1*8d67ca89SAndroid Build Coastguard Worker/* 2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2011, Intel Corporation 3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker 5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met: 7*8d67ca89SAndroid Build Coastguard Worker 8*8d67ca89SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright notice, 9*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker 11*8d67ca89SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright notice, 12*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 13*8d67ca89SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 14*8d67ca89SAndroid Build Coastguard Worker 15*8d67ca89SAndroid Build Coastguard Worker * Neither the name of Intel Corporation nor the names of its contributors 16*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 17*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 18*8d67ca89SAndroid Build Coastguard Worker 19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*8d67ca89SAndroid Build Coastguard Worker*/ 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STRCAT 32*8d67ca89SAndroid Build Coastguard Worker 33*8d67ca89SAndroid Build Coastguard Worker# ifndef L 34*8d67ca89SAndroid Build Coastguard Worker# define L(label) .L##label 35*8d67ca89SAndroid Build Coastguard Worker# endif 36*8d67ca89SAndroid Build Coastguard Worker 37*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_startproc 38*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc .cfi_startproc 39*8d67ca89SAndroid Build Coastguard Worker# endif 40*8d67ca89SAndroid Build Coastguard Worker 41*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_endproc 42*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc .cfi_endproc 43*8d67ca89SAndroid Build Coastguard Worker# endif 44*8d67ca89SAndroid Build Coastguard Worker 45*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_rel_offset 46*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 47*8d67ca89SAndroid Build Coastguard Worker# endif 48*8d67ca89SAndroid Build Coastguard Worker 49*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_restore 50*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg) .cfi_restore reg 51*8d67ca89SAndroid Build Coastguard Worker# endif 52*8d67ca89SAndroid Build Coastguard Worker 53*8d67ca89SAndroid Build Coastguard Worker# ifndef cfi_adjust_cfa_offset 54*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 55*8d67ca89SAndroid Build Coastguard Worker# endif 56*8d67ca89SAndroid Build Coastguard Worker 57*8d67ca89SAndroid Build Coastguard Worker# ifndef ENTRY 58*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name) \ 59*8d67ca89SAndroid Build Coastguard Worker .type name, @function; \ 60*8d67ca89SAndroid Build Coastguard Worker .globl name; \ 61*8d67ca89SAndroid Build Coastguard Worker .p2align 4; \ 62*8d67ca89SAndroid Build Coastguard Workername: \ 63*8d67ca89SAndroid Build Coastguard Worker cfi_startproc 64*8d67ca89SAndroid Build Coastguard Worker# endif 65*8d67ca89SAndroid Build Coastguard Worker 66*8d67ca89SAndroid Build Coastguard Worker# ifndef END 67*8d67ca89SAndroid Build Coastguard Worker# define END(name) \ 68*8d67ca89SAndroid Build Coastguard Worker cfi_endproc; \ 69*8d67ca89SAndroid Build Coastguard Worker .size name, .-name 70*8d67ca89SAndroid Build Coastguard Worker# endif 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker# define CFI_PUSH(REG) \ 73*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (4); \ 74*8d67ca89SAndroid Build Coastguard Worker cfi_rel_offset (REG, 0) 75*8d67ca89SAndroid Build Coastguard Worker 76*8d67ca89SAndroid Build Coastguard Worker# define CFI_POP(REG) \ 77*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (-4); \ 78*8d67ca89SAndroid Build Coastguard Worker cfi_restore (REG) 79*8d67ca89SAndroid Build Coastguard Worker 80*8d67ca89SAndroid Build Coastguard Worker# define PUSH(REG) pushl REG; CFI_PUSH (REG) 81*8d67ca89SAndroid Build Coastguard Worker# define POP(REG) popl REG; CFI_POP (REG) 82*8d67ca89SAndroid Build Coastguard Worker 83*8d67ca89SAndroid Build Coastguard Worker# ifndef STRCPY 84*8d67ca89SAndroid Build Coastguard Worker# define STRCPY strcpy_atom 85*8d67ca89SAndroid Build Coastguard Worker# endif 86*8d67ca89SAndroid Build Coastguard Worker 87*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 88*8d67ca89SAndroid Build Coastguard Worker# define PARMS 8 89*8d67ca89SAndroid Build Coastguard Worker# define ENTRANCE PUSH (%ebx) 90*8d67ca89SAndroid Build Coastguard Worker# define RETURN POP (%ebx); ret; CFI_PUSH (%ebx); 91*8d67ca89SAndroid Build Coastguard Worker# define RETURN1 POP (%edi); POP (%ebx); ret; CFI_PUSH (%ebx); CFI_PUSH (%edi) 92*8d67ca89SAndroid Build Coastguard Worker# else 93*8d67ca89SAndroid Build Coastguard Worker# define PARMS 4 94*8d67ca89SAndroid Build Coastguard Worker# define ENTRANCE 95*8d67ca89SAndroid Build Coastguard Worker# define RETURN ret 96*8d67ca89SAndroid Build Coastguard Worker# define RETURN1 POP (%edi); ret; CFI_PUSH (%edi) 97*8d67ca89SAndroid Build Coastguard Worker# endif 98*8d67ca89SAndroid Build Coastguard Worker 99*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 100*8d67ca89SAndroid Build Coastguard Worker# define SAVE_RESULT(n) lea n(%edx), %eax 101*8d67ca89SAndroid Build Coastguard Worker# define SAVE_RESULT_TAIL(n) lea n(%edx), %eax 102*8d67ca89SAndroid Build Coastguard Worker# else 103*8d67ca89SAndroid Build Coastguard Worker# define SAVE_RESULT(n) movl %edi, %eax 104*8d67ca89SAndroid Build Coastguard Worker# define SAVE_RESULT_TAIL(n) movl %edx, %eax 105*8d67ca89SAndroid Build Coastguard Worker# endif 106*8d67ca89SAndroid Build Coastguard Worker 107*8d67ca89SAndroid Build Coastguard Worker# define STR1 PARMS 108*8d67ca89SAndroid Build Coastguard Worker# define STR2 STR1+4 109*8d67ca89SAndroid Build Coastguard Worker# define LEN STR2+4 110*8d67ca89SAndroid Build Coastguard Worker 111*8d67ca89SAndroid Build Coastguard Worker/* In this code following instructions are used for copying: 112*8d67ca89SAndroid Build Coastguard Worker movb - 1 byte 113*8d67ca89SAndroid Build Coastguard Worker movw - 2 byte 114*8d67ca89SAndroid Build Coastguard Worker movl - 4 byte 115*8d67ca89SAndroid Build Coastguard Worker movlpd - 8 byte 116*8d67ca89SAndroid Build Coastguard Worker movaps - 16 byte - requires 16 byte alignment 117*8d67ca89SAndroid Build Coastguard Worker of sourse and destination adresses. 118*8d67ca89SAndroid Build Coastguard Worker*/ 119*8d67ca89SAndroid Build Coastguard Worker 120*8d67ca89SAndroid Build Coastguard Worker.text 121*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRCPY) 122*8d67ca89SAndroid Build Coastguard Worker ENTRANCE 123*8d67ca89SAndroid Build Coastguard Worker mov STR1(%esp), %edx 124*8d67ca89SAndroid Build Coastguard Worker mov STR2(%esp), %ecx 125*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 126*8d67ca89SAndroid Build Coastguard Worker movl LEN(%esp), %ebx 127*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ebx 128*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8Bytes) 129*8d67ca89SAndroid Build Coastguard Worker# endif 130*8d67ca89SAndroid Build Coastguard Worker cmpb $0, (%ecx) 131*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail1) 132*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 1(%ecx) 133*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail2) 134*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 2(%ecx) 135*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail3) 136*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 3(%ecx) 137*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail4) 138*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 4(%ecx) 139*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail5) 140*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 5(%ecx) 141*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail6) 142*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 6(%ecx) 143*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail7) 144*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 7(%ecx) 145*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail8) 146*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 147*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 148*8d67ca89SAndroid Build Coastguard Worker jb L(StrncpyExit15Bytes) 149*8d67ca89SAndroid Build Coastguard Worker# endif 150*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 8(%ecx) 151*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail9) 152*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 9(%ecx) 153*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail10) 154*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 10(%ecx) 155*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail11) 156*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 11(%ecx) 157*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail12) 158*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 12(%ecx) 159*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail13) 160*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 13(%ecx) 161*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail14) 162*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 14(%ecx) 163*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail15) 164*8d67ca89SAndroid Build Coastguard Worker# if defined USE_AS_STRNCPY && !defined USE_AS_STRLCPY 165*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 166*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail16) 167*8d67ca89SAndroid Build Coastguard Worker# endif 168*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 15(%ecx) 169*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail16) 170*8d67ca89SAndroid Build Coastguard Worker 171*8d67ca89SAndroid Build Coastguard Worker# if defined USE_AS_STRNCPY && defined USE_AS_STRLCPY 172*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 173*8d67ca89SAndroid Build Coastguard Worker je L(StrlcpyExitTail16) 174*8d67ca89SAndroid Build Coastguard Worker# endif 175*8d67ca89SAndroid Build Coastguard Worker 176*8d67ca89SAndroid Build Coastguard Worker PUSH (%edi) 177*8d67ca89SAndroid Build Coastguard Worker# ifndef USE_AS_STRLCPY 178*8d67ca89SAndroid Build Coastguard Worker mov %edx, %edi 179*8d67ca89SAndroid Build Coastguard Worker# else 180*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %edi 181*8d67ca89SAndroid Build Coastguard Worker# endif 182*8d67ca89SAndroid Build Coastguard Worker#endif 183*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 184*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 185*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %esi 186*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 187*8d67ca89SAndroid Build Coastguard Worker and $0xf, %esi 188*8d67ca89SAndroid Build Coastguard Worker 189*8d67ca89SAndroid Build Coastguard Worker/* add 16 bytes ecx_offset to ebx */ 190*8d67ca89SAndroid Build Coastguard Worker 191*8d67ca89SAndroid Build Coastguard Worker add %esi, %ebx 192*8d67ca89SAndroid Build Coastguard Worker#endif 193*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %esi 194*8d67ca89SAndroid Build Coastguard Worker and $-16, %esi 195*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 196*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm1 197*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, (%edx) 198*8d67ca89SAndroid Build Coastguard Worker 199*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%esi), %xmm0 200*8d67ca89SAndroid Build Coastguard Worker movlpd 8(%ecx), %xmm1 201*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 8(%edx) 202*8d67ca89SAndroid Build Coastguard Worker 203*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 204*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %esi 205*8d67ca89SAndroid Build Coastguard Worker 206*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 207*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 208*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 209*8d67ca89SAndroid Build Coastguard Worker#endif 210*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 211*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 212*8d67ca89SAndroid Build Coastguard Worker 213*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 214*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 215*8d67ca89SAndroid Build Coastguard Worker and $-16, %edx 216*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 217*8d67ca89SAndroid Build Coastguard Worker 218*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 219*8d67ca89SAndroid Build Coastguard Worker add %eax, %esi 220*8d67ca89SAndroid Build Coastguard Worker lea -1(%esi), %esi 221*8d67ca89SAndroid Build Coastguard Worker and $1<<31, %esi 222*8d67ca89SAndroid Build Coastguard Worker test %esi, %esi 223*8d67ca89SAndroid Build Coastguard Worker jnz L(ContinueCopy) 224*8d67ca89SAndroid Build Coastguard Worker lea 16(%ebx), %ebx 225*8d67ca89SAndroid Build Coastguard Worker 226*8d67ca89SAndroid Build Coastguard WorkerL(ContinueCopy): 227*8d67ca89SAndroid Build Coastguard Worker#endif 228*8d67ca89SAndroid Build Coastguard Worker sub %eax, %ecx 229*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 230*8d67ca89SAndroid Build Coastguard Worker and $0xf, %eax 231*8d67ca89SAndroid Build Coastguard Worker mov $0, %esi 232*8d67ca89SAndroid Build Coastguard Worker 233*8d67ca89SAndroid Build Coastguard Worker/* case: ecx_offset == edx_offset */ 234*8d67ca89SAndroid Build Coastguard Worker 235*8d67ca89SAndroid Build Coastguard Worker jz L(Align16Both) 236*8d67ca89SAndroid Build Coastguard Worker 237*8d67ca89SAndroid Build Coastguard Worker cmp $8, %eax 238*8d67ca89SAndroid Build Coastguard Worker jae L(ShlHigh8) 239*8d67ca89SAndroid Build Coastguard Worker cmp $1, %eax 240*8d67ca89SAndroid Build Coastguard Worker je L(Shl1) 241*8d67ca89SAndroid Build Coastguard Worker cmp $2, %eax 242*8d67ca89SAndroid Build Coastguard Worker je L(Shl2) 243*8d67ca89SAndroid Build Coastguard Worker cmp $3, %eax 244*8d67ca89SAndroid Build Coastguard Worker je L(Shl3) 245*8d67ca89SAndroid Build Coastguard Worker cmp $4, %eax 246*8d67ca89SAndroid Build Coastguard Worker je L(Shl4) 247*8d67ca89SAndroid Build Coastguard Worker cmp $5, %eax 248*8d67ca89SAndroid Build Coastguard Worker je L(Shl5) 249*8d67ca89SAndroid Build Coastguard Worker cmp $6, %eax 250*8d67ca89SAndroid Build Coastguard Worker je L(Shl6) 251*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl7) 252*8d67ca89SAndroid Build Coastguard Worker 253*8d67ca89SAndroid Build Coastguard WorkerL(ShlHigh8): 254*8d67ca89SAndroid Build Coastguard Worker je L(Shl8) 255*8d67ca89SAndroid Build Coastguard Worker cmp $9, %eax 256*8d67ca89SAndroid Build Coastguard Worker je L(Shl9) 257*8d67ca89SAndroid Build Coastguard Worker cmp $10, %eax 258*8d67ca89SAndroid Build Coastguard Worker je L(Shl10) 259*8d67ca89SAndroid Build Coastguard Worker cmp $11, %eax 260*8d67ca89SAndroid Build Coastguard Worker je L(Shl11) 261*8d67ca89SAndroid Build Coastguard Worker cmp $12, %eax 262*8d67ca89SAndroid Build Coastguard Worker je L(Shl12) 263*8d67ca89SAndroid Build Coastguard Worker cmp $13, %eax 264*8d67ca89SAndroid Build Coastguard Worker je L(Shl13) 265*8d67ca89SAndroid Build Coastguard Worker cmp $14, %eax 266*8d67ca89SAndroid Build Coastguard Worker je L(Shl14) 267*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl15) 268*8d67ca89SAndroid Build Coastguard Worker 269*8d67ca89SAndroid Build Coastguard WorkerL(Align16Both): 270*8d67ca89SAndroid Build Coastguard Worker movaps (%ecx), %xmm1 271*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx), %xmm2 272*8d67ca89SAndroid Build Coastguard Worker movaps %xmm1, (%edx) 273*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 274*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 275*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 276*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 277*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 278*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 279*8d67ca89SAndroid Build Coastguard Worker#endif 280*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 281*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 282*8d67ca89SAndroid Build Coastguard Worker 283*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx, %esi), %xmm3 284*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx, %esi) 285*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 286*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 287*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 288*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 289*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 290*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 291*8d67ca89SAndroid Build Coastguard Worker#endif 292*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 293*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 294*8d67ca89SAndroid Build Coastguard Worker 295*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx, %esi), %xmm4 296*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, (%edx, %esi) 297*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 298*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 299*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 300*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 301*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 302*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 303*8d67ca89SAndroid Build Coastguard Worker#endif 304*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 305*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 306*8d67ca89SAndroid Build Coastguard Worker 307*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx, %esi), %xmm1 308*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, (%edx, %esi) 309*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 310*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 311*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 312*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 313*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 314*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 315*8d67ca89SAndroid Build Coastguard Worker#endif 316*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 317*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 318*8d67ca89SAndroid Build Coastguard Worker 319*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx, %esi), %xmm2 320*8d67ca89SAndroid Build Coastguard Worker movaps %xmm1, (%edx, %esi) 321*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 322*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 323*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 324*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 325*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 326*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 327*8d67ca89SAndroid Build Coastguard Worker#endif 328*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 329*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 330*8d67ca89SAndroid Build Coastguard Worker 331*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx, %esi), %xmm3 332*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx, %esi) 333*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 334*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 335*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 336*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 337*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 338*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 339*8d67ca89SAndroid Build Coastguard Worker#endif 340*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 341*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 342*8d67ca89SAndroid Build Coastguard Worker 343*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, (%edx, %esi) 344*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 345*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx, %esi), %ecx 346*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 347*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 348*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 349*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 350*8d67ca89SAndroid Build Coastguard Worker lea 112(%ebx, %eax), %ebx 351*8d67ca89SAndroid Build Coastguard Worker#endif 352*8d67ca89SAndroid Build Coastguard Worker mov $-0x40, %esi 353*8d67ca89SAndroid Build Coastguard Worker 354*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Loop): 355*8d67ca89SAndroid Build Coastguard Worker movaps (%ecx), %xmm2 356*8d67ca89SAndroid Build Coastguard Worker movaps 32(%ecx), %xmm3 357*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm4 358*8d67ca89SAndroid Build Coastguard Worker movaps 16(%ecx), %xmm5 359*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 360*8d67ca89SAndroid Build Coastguard Worker movaps 48(%ecx), %xmm7 361*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm2 362*8d67ca89SAndroid Build Coastguard Worker pminub %xmm7, %xmm3 363*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm3 364*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 365*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm3 366*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 367*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %eax 368*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 369*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 370*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeaveCase2OrCase3) 371*8d67ca89SAndroid Build Coastguard Worker#endif 372*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 373*8d67ca89SAndroid Build Coastguard Worker jnz L(Aligned64Leave) 374*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, -64(%edx) 375*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, -48(%edx) 376*8d67ca89SAndroid Build Coastguard Worker movaps %xmm6, -32(%edx) 377*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, -16(%edx) 378*8d67ca89SAndroid Build Coastguard Worker jmp L(Aligned64Loop) 379*8d67ca89SAndroid Build Coastguard Worker 380*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Leave): 381*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 382*8d67ca89SAndroid Build Coastguard Worker lea 48(%ebx), %ebx 383*8d67ca89SAndroid Build Coastguard Worker#endif 384*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 385*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 386*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 387*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 388*8d67ca89SAndroid Build Coastguard Worker 389*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm0 390*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 391*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 392*8d67ca89SAndroid Build Coastguard Worker#endif 393*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 394*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, -64(%edx) 395*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 396*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 397*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 398*8d67ca89SAndroid Build Coastguard Worker 399*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 400*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 401*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 402*8d67ca89SAndroid Build Coastguard Worker#endif 403*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 404*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, -48(%edx) 405*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 406*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 407*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 408*8d67ca89SAndroid Build Coastguard Worker 409*8d67ca89SAndroid Build Coastguard Worker movaps %xmm6, -32(%edx) 410*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm0 411*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 412*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 413*8d67ca89SAndroid Build Coastguard Worker#endif 414*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 415*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 416*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 417*8d67ca89SAndroid Build Coastguard Worker 418*8d67ca89SAndroid Build Coastguard Worker .p2align 4 419*8d67ca89SAndroid Build Coastguard WorkerL(Shl1): 420*8d67ca89SAndroid Build Coastguard Worker movaps -1(%ecx), %xmm1 421*8d67ca89SAndroid Build Coastguard Worker movaps 15(%ecx), %xmm2 422*8d67ca89SAndroid Build Coastguard WorkerL(Shl1Start): 423*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 424*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 425*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 426*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 427*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 428*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1Case2OrCase3) 429*8d67ca89SAndroid Build Coastguard Worker#endif 430*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 431*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl1LoopExit) 432*8d67ca89SAndroid Build Coastguard Worker 433*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm1, %xmm2 434*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 435*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 436*8d67ca89SAndroid Build Coastguard Worker movaps 31(%ecx), %xmm2 437*8d67ca89SAndroid Build Coastguard Worker 438*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 439*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 440*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 441*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 442*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 443*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 444*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 445*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1Case2OrCase3) 446*8d67ca89SAndroid Build Coastguard Worker#endif 447*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 448*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl1LoopExit) 449*8d67ca89SAndroid Build Coastguard Worker 450*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm1, %xmm2 451*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 452*8d67ca89SAndroid Build Coastguard Worker movaps 31(%ecx), %xmm2 453*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 454*8d67ca89SAndroid Build Coastguard Worker 455*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 456*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 457*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 458*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 459*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 460*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 461*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 462*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1Case2OrCase3) 463*8d67ca89SAndroid Build Coastguard Worker#endif 464*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 465*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl1LoopExit) 466*8d67ca89SAndroid Build Coastguard Worker 467*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm1, %xmm2 468*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 469*8d67ca89SAndroid Build Coastguard Worker movaps 31(%ecx), %xmm2 470*8d67ca89SAndroid Build Coastguard Worker 471*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 472*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 473*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 474*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 475*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 476*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 477*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1Case2OrCase3) 478*8d67ca89SAndroid Build Coastguard Worker#endif 479*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 480*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl1LoopExit) 481*8d67ca89SAndroid Build Coastguard Worker 482*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm3, %xmm2 483*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 484*8d67ca89SAndroid Build Coastguard Worker lea 31(%ecx), %ecx 485*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 486*8d67ca89SAndroid Build Coastguard Worker 487*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 488*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 489*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 490*8d67ca89SAndroid Build Coastguard Worker lea -15(%ecx), %ecx 491*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 492*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 493*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 494*8d67ca89SAndroid Build Coastguard Worker#endif 495*8d67ca89SAndroid Build Coastguard Worker movaps -1(%ecx), %xmm1 496*8d67ca89SAndroid Build Coastguard Worker 497*8d67ca89SAndroid Build Coastguard WorkerL(Shl1LoopStart): 498*8d67ca89SAndroid Build Coastguard Worker movaps 15(%ecx), %xmm2 499*8d67ca89SAndroid Build Coastguard Worker movaps 31(%ecx), %xmm3 500*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 501*8d67ca89SAndroid Build Coastguard Worker movaps 47(%ecx), %xmm4 502*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 503*8d67ca89SAndroid Build Coastguard Worker movaps 63(%ecx), %xmm5 504*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 505*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 506*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 507*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 508*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 509*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 510*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm4, %xmm5 511*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm3, %xmm4 512*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 513*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl1Start) 514*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 515*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 516*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave1) 517*8d67ca89SAndroid Build Coastguard Worker#endif 518*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm2, %xmm3 519*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 520*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm1, %xmm2 521*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 522*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 523*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 524*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 525*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 526*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 527*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl1LoopStart) 528*8d67ca89SAndroid Build Coastguard Worker 529*8d67ca89SAndroid Build Coastguard WorkerL(Shl1LoopExit): 530*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 531*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 532*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%ecx), %xmm0 533*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 7(%edx) 534*8d67ca89SAndroid Build Coastguard Worker mov $15, %esi 535*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 536*8d67ca89SAndroid Build Coastguard Worker 537*8d67ca89SAndroid Build Coastguard Worker .p2align 4 538*8d67ca89SAndroid Build Coastguard WorkerL(Shl2): 539*8d67ca89SAndroid Build Coastguard Worker movaps -2(%ecx), %xmm1 540*8d67ca89SAndroid Build Coastguard Worker movaps 14(%ecx), %xmm2 541*8d67ca89SAndroid Build Coastguard WorkerL(Shl2Start): 542*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 543*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 544*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 545*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 546*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 547*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2Case2OrCase3) 548*8d67ca89SAndroid Build Coastguard Worker#endif 549*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 550*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl2LoopExit) 551*8d67ca89SAndroid Build Coastguard Worker 552*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm1, %xmm2 553*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 554*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 555*8d67ca89SAndroid Build Coastguard Worker movaps 30(%ecx), %xmm2 556*8d67ca89SAndroid Build Coastguard Worker 557*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 558*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 559*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 560*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 561*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 562*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 563*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 564*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2Case2OrCase3) 565*8d67ca89SAndroid Build Coastguard Worker#endif 566*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 567*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl2LoopExit) 568*8d67ca89SAndroid Build Coastguard Worker 569*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm1, %xmm2 570*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 571*8d67ca89SAndroid Build Coastguard Worker movaps 30(%ecx), %xmm2 572*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 573*8d67ca89SAndroid Build Coastguard Worker 574*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 575*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 576*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 577*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 578*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 579*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 580*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 581*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2Case2OrCase3) 582*8d67ca89SAndroid Build Coastguard Worker#endif 583*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 584*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl2LoopExit) 585*8d67ca89SAndroid Build Coastguard Worker 586*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm1, %xmm2 587*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 588*8d67ca89SAndroid Build Coastguard Worker movaps 30(%ecx), %xmm2 589*8d67ca89SAndroid Build Coastguard Worker 590*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 591*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 592*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 593*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 594*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 595*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 596*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2Case2OrCase3) 597*8d67ca89SAndroid Build Coastguard Worker#endif 598*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 599*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl2LoopExit) 600*8d67ca89SAndroid Build Coastguard Worker 601*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm3, %xmm2 602*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 603*8d67ca89SAndroid Build Coastguard Worker lea 30(%ecx), %ecx 604*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 605*8d67ca89SAndroid Build Coastguard Worker 606*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 607*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 608*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 609*8d67ca89SAndroid Build Coastguard Worker lea -14(%ecx), %ecx 610*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 611*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 612*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 613*8d67ca89SAndroid Build Coastguard Worker#endif 614*8d67ca89SAndroid Build Coastguard Worker movaps -2(%ecx), %xmm1 615*8d67ca89SAndroid Build Coastguard Worker 616*8d67ca89SAndroid Build Coastguard WorkerL(Shl2LoopStart): 617*8d67ca89SAndroid Build Coastguard Worker movaps 14(%ecx), %xmm2 618*8d67ca89SAndroid Build Coastguard Worker movaps 30(%ecx), %xmm3 619*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 620*8d67ca89SAndroid Build Coastguard Worker movaps 46(%ecx), %xmm4 621*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 622*8d67ca89SAndroid Build Coastguard Worker movaps 62(%ecx), %xmm5 623*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 624*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 625*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 626*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 627*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 628*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 629*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm4, %xmm5 630*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm3, %xmm4 631*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 632*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl2Start) 633*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 634*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 635*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave2) 636*8d67ca89SAndroid Build Coastguard Worker#endif 637*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm2, %xmm3 638*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 639*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm1, %xmm2 640*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 641*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 642*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 643*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 644*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 645*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 646*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl2LoopStart) 647*8d67ca89SAndroid Build Coastguard Worker 648*8d67ca89SAndroid Build Coastguard WorkerL(Shl2LoopExit): 649*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 650*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%ecx), %xmm1 651*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 652*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edx) 653*8d67ca89SAndroid Build Coastguard Worker mov $14, %esi 654*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 655*8d67ca89SAndroid Build Coastguard Worker 656*8d67ca89SAndroid Build Coastguard Worker .p2align 4 657*8d67ca89SAndroid Build Coastguard WorkerL(Shl3): 658*8d67ca89SAndroid Build Coastguard Worker movaps -3(%ecx), %xmm1 659*8d67ca89SAndroid Build Coastguard Worker movaps 13(%ecx), %xmm2 660*8d67ca89SAndroid Build Coastguard WorkerL(Shl3Start): 661*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 662*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 663*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 664*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 665*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 666*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3Case2OrCase3) 667*8d67ca89SAndroid Build Coastguard Worker#endif 668*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 669*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl3LoopExit) 670*8d67ca89SAndroid Build Coastguard Worker 671*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm1, %xmm2 672*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 673*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 674*8d67ca89SAndroid Build Coastguard Worker movaps 29(%ecx), %xmm2 675*8d67ca89SAndroid Build Coastguard Worker 676*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 677*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 678*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 679*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 680*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 681*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 682*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 683*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3Case2OrCase3) 684*8d67ca89SAndroid Build Coastguard Worker#endif 685*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 686*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl3LoopExit) 687*8d67ca89SAndroid Build Coastguard Worker 688*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm1, %xmm2 689*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 690*8d67ca89SAndroid Build Coastguard Worker movaps 29(%ecx), %xmm2 691*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 692*8d67ca89SAndroid Build Coastguard Worker 693*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 694*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 695*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 696*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 697*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 698*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 699*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 700*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3Case2OrCase3) 701*8d67ca89SAndroid Build Coastguard Worker#endif 702*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 703*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl3LoopExit) 704*8d67ca89SAndroid Build Coastguard Worker 705*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm1, %xmm2 706*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 707*8d67ca89SAndroid Build Coastguard Worker movaps 29(%ecx), %xmm2 708*8d67ca89SAndroid Build Coastguard Worker 709*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 710*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 711*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 712*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 713*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 714*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 715*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3Case2OrCase3) 716*8d67ca89SAndroid Build Coastguard Worker#endif 717*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 718*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl3LoopExit) 719*8d67ca89SAndroid Build Coastguard Worker 720*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm3, %xmm2 721*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 722*8d67ca89SAndroid Build Coastguard Worker lea 29(%ecx), %ecx 723*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 724*8d67ca89SAndroid Build Coastguard Worker 725*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 726*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 727*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 728*8d67ca89SAndroid Build Coastguard Worker lea -13(%ecx), %ecx 729*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 730*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 731*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 732*8d67ca89SAndroid Build Coastguard Worker#endif 733*8d67ca89SAndroid Build Coastguard Worker movaps -3(%ecx), %xmm1 734*8d67ca89SAndroid Build Coastguard Worker 735*8d67ca89SAndroid Build Coastguard WorkerL(Shl3LoopStart): 736*8d67ca89SAndroid Build Coastguard Worker movaps 13(%ecx), %xmm2 737*8d67ca89SAndroid Build Coastguard Worker movaps 29(%ecx), %xmm3 738*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 739*8d67ca89SAndroid Build Coastguard Worker movaps 45(%ecx), %xmm4 740*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 741*8d67ca89SAndroid Build Coastguard Worker movaps 61(%ecx), %xmm5 742*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 743*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 744*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 745*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 746*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 747*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 748*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm4, %xmm5 749*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm3, %xmm4 750*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 751*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl3Start) 752*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 753*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 754*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave3) 755*8d67ca89SAndroid Build Coastguard Worker#endif 756*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm2, %xmm3 757*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 758*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm1, %xmm2 759*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 760*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 761*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 762*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 763*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 764*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 765*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl3LoopStart) 766*8d67ca89SAndroid Build Coastguard Worker 767*8d67ca89SAndroid Build Coastguard WorkerL(Shl3LoopExit): 768*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 769*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%ecx), %xmm1 770*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 771*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edx) 772*8d67ca89SAndroid Build Coastguard Worker mov $13, %esi 773*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 774*8d67ca89SAndroid Build Coastguard Worker 775*8d67ca89SAndroid Build Coastguard Worker .p2align 4 776*8d67ca89SAndroid Build Coastguard WorkerL(Shl4): 777*8d67ca89SAndroid Build Coastguard Worker movaps -4(%ecx), %xmm1 778*8d67ca89SAndroid Build Coastguard Worker movaps 12(%ecx), %xmm2 779*8d67ca89SAndroid Build Coastguard WorkerL(Shl4Start): 780*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 781*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 782*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 783*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 784*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 785*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4Case2OrCase3) 786*8d67ca89SAndroid Build Coastguard Worker#endif 787*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 788*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl4LoopExit) 789*8d67ca89SAndroid Build Coastguard Worker 790*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm1, %xmm2 791*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 792*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 793*8d67ca89SAndroid Build Coastguard Worker movaps 28(%ecx), %xmm2 794*8d67ca89SAndroid Build Coastguard Worker 795*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 796*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 797*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 798*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 799*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 800*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 801*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 802*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4Case2OrCase3) 803*8d67ca89SAndroid Build Coastguard Worker#endif 804*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 805*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl4LoopExit) 806*8d67ca89SAndroid Build Coastguard Worker 807*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm1, %xmm2 808*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 809*8d67ca89SAndroid Build Coastguard Worker movaps 28(%ecx), %xmm2 810*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 811*8d67ca89SAndroid Build Coastguard Worker 812*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 813*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 814*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 815*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 816*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 817*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 818*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 819*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4Case2OrCase3) 820*8d67ca89SAndroid Build Coastguard Worker#endif 821*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 822*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl4LoopExit) 823*8d67ca89SAndroid Build Coastguard Worker 824*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm1, %xmm2 825*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 826*8d67ca89SAndroid Build Coastguard Worker movaps 28(%ecx), %xmm2 827*8d67ca89SAndroid Build Coastguard Worker 828*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 829*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 830*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 831*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 832*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 833*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 834*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4Case2OrCase3) 835*8d67ca89SAndroid Build Coastguard Worker#endif 836*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 837*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl4LoopExit) 838*8d67ca89SAndroid Build Coastguard Worker 839*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm3, %xmm2 840*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 841*8d67ca89SAndroid Build Coastguard Worker lea 28(%ecx), %ecx 842*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 843*8d67ca89SAndroid Build Coastguard Worker 844*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 845*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 846*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 847*8d67ca89SAndroid Build Coastguard Worker lea -12(%ecx), %ecx 848*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 849*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 850*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 851*8d67ca89SAndroid Build Coastguard Worker#endif 852*8d67ca89SAndroid Build Coastguard Worker movaps -4(%ecx), %xmm1 853*8d67ca89SAndroid Build Coastguard Worker 854*8d67ca89SAndroid Build Coastguard WorkerL(Shl4LoopStart): 855*8d67ca89SAndroid Build Coastguard Worker movaps 12(%ecx), %xmm2 856*8d67ca89SAndroid Build Coastguard Worker movaps 28(%ecx), %xmm3 857*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 858*8d67ca89SAndroid Build Coastguard Worker movaps 44(%ecx), %xmm4 859*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 860*8d67ca89SAndroid Build Coastguard Worker movaps 60(%ecx), %xmm5 861*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 862*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 863*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 864*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 865*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 866*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 867*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm4, %xmm5 868*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm3, %xmm4 869*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 870*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl4Start) 871*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 872*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 873*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave4) 874*8d67ca89SAndroid Build Coastguard Worker#endif 875*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm2, %xmm3 876*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 877*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm1, %xmm2 878*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 879*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 880*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 881*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 882*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 883*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 884*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl4LoopStart) 885*8d67ca89SAndroid Build Coastguard Worker 886*8d67ca89SAndroid Build Coastguard WorkerL(Shl4LoopExit): 887*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 888*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %esi 889*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 890*8d67ca89SAndroid Build Coastguard Worker movl %esi, 8(%edx) 891*8d67ca89SAndroid Build Coastguard Worker mov $12, %esi 892*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 893*8d67ca89SAndroid Build Coastguard Worker 894*8d67ca89SAndroid Build Coastguard Worker .p2align 4 895*8d67ca89SAndroid Build Coastguard WorkerL(Shl5): 896*8d67ca89SAndroid Build Coastguard Worker movaps -5(%ecx), %xmm1 897*8d67ca89SAndroid Build Coastguard Worker movaps 11(%ecx), %xmm2 898*8d67ca89SAndroid Build Coastguard WorkerL(Shl5Start): 899*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 900*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 901*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 902*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 903*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 904*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5Case2OrCase3) 905*8d67ca89SAndroid Build Coastguard Worker#endif 906*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 907*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl5LoopExit) 908*8d67ca89SAndroid Build Coastguard Worker 909*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm1, %xmm2 910*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 911*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 912*8d67ca89SAndroid Build Coastguard Worker movaps 27(%ecx), %xmm2 913*8d67ca89SAndroid Build Coastguard Worker 914*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 915*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 916*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 917*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 918*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 919*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 920*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 921*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5Case2OrCase3) 922*8d67ca89SAndroid Build Coastguard Worker#endif 923*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 924*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl5LoopExit) 925*8d67ca89SAndroid Build Coastguard Worker 926*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm1, %xmm2 927*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 928*8d67ca89SAndroid Build Coastguard Worker movaps 27(%ecx), %xmm2 929*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 930*8d67ca89SAndroid Build Coastguard Worker 931*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 932*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 933*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 934*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 935*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 936*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 937*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 938*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5Case2OrCase3) 939*8d67ca89SAndroid Build Coastguard Worker#endif 940*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 941*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl5LoopExit) 942*8d67ca89SAndroid Build Coastguard Worker 943*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm1, %xmm2 944*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 945*8d67ca89SAndroid Build Coastguard Worker movaps 27(%ecx), %xmm2 946*8d67ca89SAndroid Build Coastguard Worker 947*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 948*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 949*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 950*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 951*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 952*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 953*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5Case2OrCase3) 954*8d67ca89SAndroid Build Coastguard Worker#endif 955*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 956*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl5LoopExit) 957*8d67ca89SAndroid Build Coastguard Worker 958*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm3, %xmm2 959*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 960*8d67ca89SAndroid Build Coastguard Worker lea 27(%ecx), %ecx 961*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 962*8d67ca89SAndroid Build Coastguard Worker 963*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 964*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 965*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 966*8d67ca89SAndroid Build Coastguard Worker lea -11(%ecx), %ecx 967*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 968*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 969*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 970*8d67ca89SAndroid Build Coastguard Worker#endif 971*8d67ca89SAndroid Build Coastguard Worker movaps -5(%ecx), %xmm1 972*8d67ca89SAndroid Build Coastguard Worker 973*8d67ca89SAndroid Build Coastguard WorkerL(Shl5LoopStart): 974*8d67ca89SAndroid Build Coastguard Worker movaps 11(%ecx), %xmm2 975*8d67ca89SAndroid Build Coastguard Worker movaps 27(%ecx), %xmm3 976*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 977*8d67ca89SAndroid Build Coastguard Worker movaps 43(%ecx), %xmm4 978*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 979*8d67ca89SAndroid Build Coastguard Worker movaps 59(%ecx), %xmm5 980*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 981*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 982*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 983*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 984*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 985*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 986*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm4, %xmm5 987*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm3, %xmm4 988*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 989*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl5Start) 990*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 991*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 992*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave5) 993*8d67ca89SAndroid Build Coastguard Worker#endif 994*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm2, %xmm3 995*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 996*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm1, %xmm2 997*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 998*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 999*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1000*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1001*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1002*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1003*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl5LoopStart) 1004*8d67ca89SAndroid Build Coastguard Worker 1005*8d67ca89SAndroid Build Coastguard WorkerL(Shl5LoopExit): 1006*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 1007*8d67ca89SAndroid Build Coastguard Worker movl 7(%ecx), %esi 1008*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 1009*8d67ca89SAndroid Build Coastguard Worker movl %esi, 7(%edx) 1010*8d67ca89SAndroid Build Coastguard Worker mov $11, %esi 1011*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1012*8d67ca89SAndroid Build Coastguard Worker 1013*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1014*8d67ca89SAndroid Build Coastguard WorkerL(Shl6): 1015*8d67ca89SAndroid Build Coastguard Worker movaps -6(%ecx), %xmm1 1016*8d67ca89SAndroid Build Coastguard Worker movaps 10(%ecx), %xmm2 1017*8d67ca89SAndroid Build Coastguard WorkerL(Shl6Start): 1018*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1019*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1020*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1021*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1022*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1023*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6Case2OrCase3) 1024*8d67ca89SAndroid Build Coastguard Worker#endif 1025*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1026*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl6LoopExit) 1027*8d67ca89SAndroid Build Coastguard Worker 1028*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm1, %xmm2 1029*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1030*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1031*8d67ca89SAndroid Build Coastguard Worker movaps 26(%ecx), %xmm2 1032*8d67ca89SAndroid Build Coastguard Worker 1033*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1034*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1035*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1036*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1037*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1038*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1039*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1040*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6Case2OrCase3) 1041*8d67ca89SAndroid Build Coastguard Worker#endif 1042*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1043*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl6LoopExit) 1044*8d67ca89SAndroid Build Coastguard Worker 1045*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm1, %xmm2 1046*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1047*8d67ca89SAndroid Build Coastguard Worker movaps 26(%ecx), %xmm2 1048*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1049*8d67ca89SAndroid Build Coastguard Worker 1050*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1051*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1052*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1053*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1054*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1055*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1056*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1057*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6Case2OrCase3) 1058*8d67ca89SAndroid Build Coastguard Worker#endif 1059*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1060*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl6LoopExit) 1061*8d67ca89SAndroid Build Coastguard Worker 1062*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm1, %xmm2 1063*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1064*8d67ca89SAndroid Build Coastguard Worker movaps 26(%ecx), %xmm2 1065*8d67ca89SAndroid Build Coastguard Worker 1066*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1067*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1068*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1069*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1070*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1071*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1072*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6Case2OrCase3) 1073*8d67ca89SAndroid Build Coastguard Worker#endif 1074*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1075*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl6LoopExit) 1076*8d67ca89SAndroid Build Coastguard Worker 1077*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm3, %xmm2 1078*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1079*8d67ca89SAndroid Build Coastguard Worker lea 26(%ecx), %ecx 1080*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1081*8d67ca89SAndroid Build Coastguard Worker 1082*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1083*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1084*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1085*8d67ca89SAndroid Build Coastguard Worker lea -10(%ecx), %ecx 1086*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1087*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1088*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1089*8d67ca89SAndroid Build Coastguard Worker#endif 1090*8d67ca89SAndroid Build Coastguard Worker movaps -6(%ecx), %xmm1 1091*8d67ca89SAndroid Build Coastguard Worker 1092*8d67ca89SAndroid Build Coastguard WorkerL(Shl6LoopStart): 1093*8d67ca89SAndroid Build Coastguard Worker movaps 10(%ecx), %xmm2 1094*8d67ca89SAndroid Build Coastguard Worker movaps 26(%ecx), %xmm3 1095*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1096*8d67ca89SAndroid Build Coastguard Worker movaps 42(%ecx), %xmm4 1097*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1098*8d67ca89SAndroid Build Coastguard Worker movaps 58(%ecx), %xmm5 1099*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1100*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1101*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1102*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1103*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1104*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1105*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm4, %xmm5 1106*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm3, %xmm4 1107*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1108*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl6Start) 1109*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1110*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1111*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave6) 1112*8d67ca89SAndroid Build Coastguard Worker#endif 1113*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm2, %xmm3 1114*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1115*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm1, %xmm2 1116*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1117*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1118*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1119*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1120*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1121*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1122*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl6LoopStart) 1123*8d67ca89SAndroid Build Coastguard Worker 1124*8d67ca89SAndroid Build Coastguard WorkerL(Shl6LoopExit): 1125*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 1126*8d67ca89SAndroid Build Coastguard Worker movl 6(%ecx), %esi 1127*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 1128*8d67ca89SAndroid Build Coastguard Worker movl %esi, 6(%edx) 1129*8d67ca89SAndroid Build Coastguard Worker mov $10, %esi 1130*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1131*8d67ca89SAndroid Build Coastguard Worker 1132*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1133*8d67ca89SAndroid Build Coastguard WorkerL(Shl7): 1134*8d67ca89SAndroid Build Coastguard Worker movaps -7(%ecx), %xmm1 1135*8d67ca89SAndroid Build Coastguard Worker movaps 9(%ecx), %xmm2 1136*8d67ca89SAndroid Build Coastguard WorkerL(Shl7Start): 1137*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1138*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1139*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1140*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1141*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1142*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7Case2OrCase3) 1143*8d67ca89SAndroid Build Coastguard Worker#endif 1144*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1145*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl7LoopExit) 1146*8d67ca89SAndroid Build Coastguard Worker 1147*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm1, %xmm2 1148*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1149*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1150*8d67ca89SAndroid Build Coastguard Worker movaps 25(%ecx), %xmm2 1151*8d67ca89SAndroid Build Coastguard Worker 1152*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1153*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1154*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1155*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1156*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1157*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1158*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1159*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7Case2OrCase3) 1160*8d67ca89SAndroid Build Coastguard Worker#endif 1161*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1162*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl7LoopExit) 1163*8d67ca89SAndroid Build Coastguard Worker 1164*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm1, %xmm2 1165*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1166*8d67ca89SAndroid Build Coastguard Worker movaps 25(%ecx), %xmm2 1167*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1168*8d67ca89SAndroid Build Coastguard Worker 1169*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1170*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1171*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1172*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1173*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1174*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1175*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1176*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7Case2OrCase3) 1177*8d67ca89SAndroid Build Coastguard Worker#endif 1178*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1179*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl7LoopExit) 1180*8d67ca89SAndroid Build Coastguard Worker 1181*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm1, %xmm2 1182*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1183*8d67ca89SAndroid Build Coastguard Worker movaps 25(%ecx), %xmm2 1184*8d67ca89SAndroid Build Coastguard Worker 1185*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1186*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1187*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1188*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1189*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1190*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1191*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7Case2OrCase3) 1192*8d67ca89SAndroid Build Coastguard Worker#endif 1193*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1194*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl7LoopExit) 1195*8d67ca89SAndroid Build Coastguard Worker 1196*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm3, %xmm2 1197*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1198*8d67ca89SAndroid Build Coastguard Worker lea 25(%ecx), %ecx 1199*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1200*8d67ca89SAndroid Build Coastguard Worker 1201*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1202*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1203*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1204*8d67ca89SAndroid Build Coastguard Worker lea -9(%ecx), %ecx 1205*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1206*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1207*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1208*8d67ca89SAndroid Build Coastguard Worker#endif 1209*8d67ca89SAndroid Build Coastguard Worker movaps -7(%ecx), %xmm1 1210*8d67ca89SAndroid Build Coastguard Worker 1211*8d67ca89SAndroid Build Coastguard WorkerL(Shl7LoopStart): 1212*8d67ca89SAndroid Build Coastguard Worker movaps 9(%ecx), %xmm2 1213*8d67ca89SAndroid Build Coastguard Worker movaps 25(%ecx), %xmm3 1214*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1215*8d67ca89SAndroid Build Coastguard Worker movaps 41(%ecx), %xmm4 1216*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1217*8d67ca89SAndroid Build Coastguard Worker movaps 57(%ecx), %xmm5 1218*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1219*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1220*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1221*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1222*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1223*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1224*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm4, %xmm5 1225*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm3, %xmm4 1226*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1227*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl7Start) 1228*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1229*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1230*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave7) 1231*8d67ca89SAndroid Build Coastguard Worker#endif 1232*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm2, %xmm3 1233*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1234*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm1, %xmm2 1235*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1236*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1237*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1238*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1239*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1240*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1241*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl7LoopStart) 1242*8d67ca89SAndroid Build Coastguard Worker 1243*8d67ca89SAndroid Build Coastguard WorkerL(Shl7LoopExit): 1244*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 1245*8d67ca89SAndroid Build Coastguard Worker movl 5(%ecx), %esi 1246*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 1247*8d67ca89SAndroid Build Coastguard Worker movl %esi, 5(%edx) 1248*8d67ca89SAndroid Build Coastguard Worker mov $9, %esi 1249*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1250*8d67ca89SAndroid Build Coastguard Worker 1251*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1252*8d67ca89SAndroid Build Coastguard WorkerL(Shl8): 1253*8d67ca89SAndroid Build Coastguard Worker movaps -8(%ecx), %xmm1 1254*8d67ca89SAndroid Build Coastguard Worker movaps 8(%ecx), %xmm2 1255*8d67ca89SAndroid Build Coastguard WorkerL(Shl8Start): 1256*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1257*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1258*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1259*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1260*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1261*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8Case2OrCase3) 1262*8d67ca89SAndroid Build Coastguard Worker#endif 1263*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1264*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl8LoopExit) 1265*8d67ca89SAndroid Build Coastguard Worker 1266*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm1, %xmm2 1267*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1268*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1269*8d67ca89SAndroid Build Coastguard Worker movaps 24(%ecx), %xmm2 1270*8d67ca89SAndroid Build Coastguard Worker 1271*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1272*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1273*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1274*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1275*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1276*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1277*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1278*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8Case2OrCase3) 1279*8d67ca89SAndroid Build Coastguard Worker#endif 1280*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1281*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl8LoopExit) 1282*8d67ca89SAndroid Build Coastguard Worker 1283*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm1, %xmm2 1284*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1285*8d67ca89SAndroid Build Coastguard Worker movaps 24(%ecx), %xmm2 1286*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1287*8d67ca89SAndroid Build Coastguard Worker 1288*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1289*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1290*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1291*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1292*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1293*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1294*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1295*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8Case2OrCase3) 1296*8d67ca89SAndroid Build Coastguard Worker#endif 1297*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1298*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl8LoopExit) 1299*8d67ca89SAndroid Build Coastguard Worker 1300*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm1, %xmm2 1301*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1302*8d67ca89SAndroid Build Coastguard Worker movaps 24(%ecx), %xmm2 1303*8d67ca89SAndroid Build Coastguard Worker 1304*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1305*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1306*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1307*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1308*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1309*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1310*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8Case2OrCase3) 1311*8d67ca89SAndroid Build Coastguard Worker#endif 1312*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1313*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl8LoopExit) 1314*8d67ca89SAndroid Build Coastguard Worker 1315*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm3, %xmm2 1316*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1317*8d67ca89SAndroid Build Coastguard Worker lea 24(%ecx), %ecx 1318*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1319*8d67ca89SAndroid Build Coastguard Worker 1320*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1321*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1322*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1323*8d67ca89SAndroid Build Coastguard Worker lea -8(%ecx), %ecx 1324*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1325*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1326*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1327*8d67ca89SAndroid Build Coastguard Worker#endif 1328*8d67ca89SAndroid Build Coastguard Worker movaps -8(%ecx), %xmm1 1329*8d67ca89SAndroid Build Coastguard Worker 1330*8d67ca89SAndroid Build Coastguard WorkerL(Shl8LoopStart): 1331*8d67ca89SAndroid Build Coastguard Worker movaps 8(%ecx), %xmm2 1332*8d67ca89SAndroid Build Coastguard Worker movaps 24(%ecx), %xmm3 1333*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1334*8d67ca89SAndroid Build Coastguard Worker movaps 40(%ecx), %xmm4 1335*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1336*8d67ca89SAndroid Build Coastguard Worker movaps 56(%ecx), %xmm5 1337*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1338*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1339*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1340*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1341*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1342*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1343*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm4, %xmm5 1344*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm3, %xmm4 1345*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1346*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl8Start) 1347*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1348*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1349*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave8) 1350*8d67ca89SAndroid Build Coastguard Worker#endif 1351*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm2, %xmm3 1352*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1353*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm1, %xmm2 1354*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1355*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1356*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1357*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1358*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1359*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1360*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl8LoopStart) 1361*8d67ca89SAndroid Build Coastguard Worker 1362*8d67ca89SAndroid Build Coastguard WorkerL(Shl8LoopExit): 1363*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 1364*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 1365*8d67ca89SAndroid Build Coastguard Worker mov $8, %esi 1366*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1367*8d67ca89SAndroid Build Coastguard Worker 1368*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1369*8d67ca89SAndroid Build Coastguard WorkerL(Shl9): 1370*8d67ca89SAndroid Build Coastguard Worker movaps -9(%ecx), %xmm1 1371*8d67ca89SAndroid Build Coastguard Worker movaps 7(%ecx), %xmm2 1372*8d67ca89SAndroid Build Coastguard WorkerL(Shl9Start): 1373*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1374*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1375*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1376*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1377*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1378*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9Case2OrCase3) 1379*8d67ca89SAndroid Build Coastguard Worker#endif 1380*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1381*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl9LoopExit) 1382*8d67ca89SAndroid Build Coastguard Worker 1383*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm1, %xmm2 1384*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1385*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1386*8d67ca89SAndroid Build Coastguard Worker movaps 23(%ecx), %xmm2 1387*8d67ca89SAndroid Build Coastguard Worker 1388*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1389*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1390*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1391*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1392*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1393*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1394*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1395*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9Case2OrCase3) 1396*8d67ca89SAndroid Build Coastguard Worker#endif 1397*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1398*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl9LoopExit) 1399*8d67ca89SAndroid Build Coastguard Worker 1400*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm1, %xmm2 1401*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1402*8d67ca89SAndroid Build Coastguard Worker movaps 23(%ecx), %xmm2 1403*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1404*8d67ca89SAndroid Build Coastguard Worker 1405*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1406*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1407*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1408*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1409*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1410*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1411*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1412*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9Case2OrCase3) 1413*8d67ca89SAndroid Build Coastguard Worker#endif 1414*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1415*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl9LoopExit) 1416*8d67ca89SAndroid Build Coastguard Worker 1417*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm1, %xmm2 1418*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1419*8d67ca89SAndroid Build Coastguard Worker movaps 23(%ecx), %xmm2 1420*8d67ca89SAndroid Build Coastguard Worker 1421*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1422*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1423*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1424*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1425*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1426*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1427*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9Case2OrCase3) 1428*8d67ca89SAndroid Build Coastguard Worker#endif 1429*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1430*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl9LoopExit) 1431*8d67ca89SAndroid Build Coastguard Worker 1432*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm3, %xmm2 1433*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1434*8d67ca89SAndroid Build Coastguard Worker lea 23(%ecx), %ecx 1435*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1436*8d67ca89SAndroid Build Coastguard Worker 1437*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1438*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1439*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1440*8d67ca89SAndroid Build Coastguard Worker lea -7(%ecx), %ecx 1441*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1442*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1443*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1444*8d67ca89SAndroid Build Coastguard Worker#endif 1445*8d67ca89SAndroid Build Coastguard Worker movaps -9(%ecx), %xmm1 1446*8d67ca89SAndroid Build Coastguard Worker 1447*8d67ca89SAndroid Build Coastguard WorkerL(Shl9LoopStart): 1448*8d67ca89SAndroid Build Coastguard Worker movaps 7(%ecx), %xmm2 1449*8d67ca89SAndroid Build Coastguard Worker movaps 23(%ecx), %xmm3 1450*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1451*8d67ca89SAndroid Build Coastguard Worker movaps 39(%ecx), %xmm4 1452*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1453*8d67ca89SAndroid Build Coastguard Worker movaps 55(%ecx), %xmm5 1454*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1455*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1456*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1457*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1458*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1459*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1460*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm4, %xmm5 1461*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm3, %xmm4 1462*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1463*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl9Start) 1464*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1465*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1466*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave9) 1467*8d67ca89SAndroid Build Coastguard Worker#endif 1468*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm2, %xmm3 1469*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1470*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm1, %xmm2 1471*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1472*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1473*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1474*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1475*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1476*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1477*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl9LoopStart) 1478*8d67ca89SAndroid Build Coastguard Worker 1479*8d67ca89SAndroid Build Coastguard WorkerL(Shl9LoopExit): 1480*8d67ca89SAndroid Build Coastguard Worker movlpd -1(%ecx), %xmm0 1481*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -1(%edx) 1482*8d67ca89SAndroid Build Coastguard Worker mov $7, %esi 1483*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1484*8d67ca89SAndroid Build Coastguard Worker 1485*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1486*8d67ca89SAndroid Build Coastguard WorkerL(Shl10): 1487*8d67ca89SAndroid Build Coastguard Worker movaps -10(%ecx), %xmm1 1488*8d67ca89SAndroid Build Coastguard Worker movaps 6(%ecx), %xmm2 1489*8d67ca89SAndroid Build Coastguard WorkerL(Shl10Start): 1490*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1491*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1492*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1493*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1494*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1495*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10Case2OrCase3) 1496*8d67ca89SAndroid Build Coastguard Worker#endif 1497*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1498*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl10LoopExit) 1499*8d67ca89SAndroid Build Coastguard Worker 1500*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm1, %xmm2 1501*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1502*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1503*8d67ca89SAndroid Build Coastguard Worker movaps 22(%ecx), %xmm2 1504*8d67ca89SAndroid Build Coastguard Worker 1505*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1506*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1507*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1508*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1509*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1510*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1511*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1512*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10Case2OrCase3) 1513*8d67ca89SAndroid Build Coastguard Worker#endif 1514*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1515*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl10LoopExit) 1516*8d67ca89SAndroid Build Coastguard Worker 1517*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm1, %xmm2 1518*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1519*8d67ca89SAndroid Build Coastguard Worker movaps 22(%ecx), %xmm2 1520*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1521*8d67ca89SAndroid Build Coastguard Worker 1522*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1523*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1524*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1525*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1526*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1527*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1528*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1529*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10Case2OrCase3) 1530*8d67ca89SAndroid Build Coastguard Worker#endif 1531*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1532*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl10LoopExit) 1533*8d67ca89SAndroid Build Coastguard Worker 1534*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm1, %xmm2 1535*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1536*8d67ca89SAndroid Build Coastguard Worker movaps 22(%ecx), %xmm2 1537*8d67ca89SAndroid Build Coastguard Worker 1538*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1539*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1540*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1541*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1542*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1543*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1544*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10Case2OrCase3) 1545*8d67ca89SAndroid Build Coastguard Worker#endif 1546*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1547*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl10LoopExit) 1548*8d67ca89SAndroid Build Coastguard Worker 1549*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm3, %xmm2 1550*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1551*8d67ca89SAndroid Build Coastguard Worker lea 22(%ecx), %ecx 1552*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1553*8d67ca89SAndroid Build Coastguard Worker 1554*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1555*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1556*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1557*8d67ca89SAndroid Build Coastguard Worker lea -6(%ecx), %ecx 1558*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1559*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1560*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1561*8d67ca89SAndroid Build Coastguard Worker#endif 1562*8d67ca89SAndroid Build Coastguard Worker movaps -10(%ecx), %xmm1 1563*8d67ca89SAndroid Build Coastguard Worker 1564*8d67ca89SAndroid Build Coastguard WorkerL(Shl10LoopStart): 1565*8d67ca89SAndroid Build Coastguard Worker movaps 6(%ecx), %xmm2 1566*8d67ca89SAndroid Build Coastguard Worker movaps 22(%ecx), %xmm3 1567*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1568*8d67ca89SAndroid Build Coastguard Worker movaps 38(%ecx), %xmm4 1569*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1570*8d67ca89SAndroid Build Coastguard Worker movaps 54(%ecx), %xmm5 1571*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1572*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1573*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1574*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1575*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1576*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1577*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm4, %xmm5 1578*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm3, %xmm4 1579*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1580*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl10Start) 1581*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1582*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1583*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave10) 1584*8d67ca89SAndroid Build Coastguard Worker#endif 1585*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm2, %xmm3 1586*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1587*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm1, %xmm2 1588*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1589*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1590*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1591*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1592*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1593*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1594*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl10LoopStart) 1595*8d67ca89SAndroid Build Coastguard Worker 1596*8d67ca89SAndroid Build Coastguard WorkerL(Shl10LoopExit): 1597*8d67ca89SAndroid Build Coastguard Worker movlpd -2(%ecx), %xmm0 1598*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -2(%edx) 1599*8d67ca89SAndroid Build Coastguard Worker mov $6, %esi 1600*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1601*8d67ca89SAndroid Build Coastguard Worker 1602*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1603*8d67ca89SAndroid Build Coastguard WorkerL(Shl11): 1604*8d67ca89SAndroid Build Coastguard Worker movaps -11(%ecx), %xmm1 1605*8d67ca89SAndroid Build Coastguard Worker movaps 5(%ecx), %xmm2 1606*8d67ca89SAndroid Build Coastguard WorkerL(Shl11Start): 1607*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1608*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1609*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1610*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1611*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1612*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11Case2OrCase3) 1613*8d67ca89SAndroid Build Coastguard Worker#endif 1614*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1615*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl11LoopExit) 1616*8d67ca89SAndroid Build Coastguard Worker 1617*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm1, %xmm2 1618*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1619*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1620*8d67ca89SAndroid Build Coastguard Worker movaps 21(%ecx), %xmm2 1621*8d67ca89SAndroid Build Coastguard Worker 1622*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1623*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1624*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1625*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1626*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1627*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1628*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1629*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11Case2OrCase3) 1630*8d67ca89SAndroid Build Coastguard Worker#endif 1631*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1632*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl11LoopExit) 1633*8d67ca89SAndroid Build Coastguard Worker 1634*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm1, %xmm2 1635*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1636*8d67ca89SAndroid Build Coastguard Worker movaps 21(%ecx), %xmm2 1637*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1638*8d67ca89SAndroid Build Coastguard Worker 1639*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1640*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1641*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1642*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1643*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1644*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1645*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1646*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11Case2OrCase3) 1647*8d67ca89SAndroid Build Coastguard Worker#endif 1648*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1649*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl11LoopExit) 1650*8d67ca89SAndroid Build Coastguard Worker 1651*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm1, %xmm2 1652*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1653*8d67ca89SAndroid Build Coastguard Worker movaps 21(%ecx), %xmm2 1654*8d67ca89SAndroid Build Coastguard Worker 1655*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1656*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1657*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1658*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1659*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1660*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1661*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11Case2OrCase3) 1662*8d67ca89SAndroid Build Coastguard Worker#endif 1663*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1664*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl11LoopExit) 1665*8d67ca89SAndroid Build Coastguard Worker 1666*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm3, %xmm2 1667*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1668*8d67ca89SAndroid Build Coastguard Worker lea 21(%ecx), %ecx 1669*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1670*8d67ca89SAndroid Build Coastguard Worker 1671*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1672*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1673*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1674*8d67ca89SAndroid Build Coastguard Worker lea -5(%ecx), %ecx 1675*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1676*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1677*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1678*8d67ca89SAndroid Build Coastguard Worker#endif 1679*8d67ca89SAndroid Build Coastguard Worker movaps -11(%ecx), %xmm1 1680*8d67ca89SAndroid Build Coastguard Worker 1681*8d67ca89SAndroid Build Coastguard WorkerL(Shl11LoopStart): 1682*8d67ca89SAndroid Build Coastguard Worker movaps 5(%ecx), %xmm2 1683*8d67ca89SAndroid Build Coastguard Worker movaps 21(%ecx), %xmm3 1684*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1685*8d67ca89SAndroid Build Coastguard Worker movaps 37(%ecx), %xmm4 1686*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1687*8d67ca89SAndroid Build Coastguard Worker movaps 53(%ecx), %xmm5 1688*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1689*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1690*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1691*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1692*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1693*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1694*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm4, %xmm5 1695*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm3, %xmm4 1696*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1697*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl11Start) 1698*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1699*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1700*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave11) 1701*8d67ca89SAndroid Build Coastguard Worker#endif 1702*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm2, %xmm3 1703*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1704*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm1, %xmm2 1705*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1706*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1707*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1708*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1709*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1710*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1711*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl11LoopStart) 1712*8d67ca89SAndroid Build Coastguard Worker 1713*8d67ca89SAndroid Build Coastguard WorkerL(Shl11LoopExit): 1714*8d67ca89SAndroid Build Coastguard Worker movlpd -3(%ecx), %xmm0 1715*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -3(%edx) 1716*8d67ca89SAndroid Build Coastguard Worker mov $5, %esi 1717*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1718*8d67ca89SAndroid Build Coastguard Worker 1719*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1720*8d67ca89SAndroid Build Coastguard WorkerL(Shl12): 1721*8d67ca89SAndroid Build Coastguard Worker movaps -12(%ecx), %xmm1 1722*8d67ca89SAndroid Build Coastguard Worker movaps 4(%ecx), %xmm2 1723*8d67ca89SAndroid Build Coastguard WorkerL(Shl12Start): 1724*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1725*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1726*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1727*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1728*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1729*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12Case2OrCase3) 1730*8d67ca89SAndroid Build Coastguard Worker#endif 1731*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1732*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl12LoopExit) 1733*8d67ca89SAndroid Build Coastguard Worker 1734*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm1, %xmm2 1735*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1736*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1737*8d67ca89SAndroid Build Coastguard Worker movaps 20(%ecx), %xmm2 1738*8d67ca89SAndroid Build Coastguard Worker 1739*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1740*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1741*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1742*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1743*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1744*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1745*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1746*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12Case2OrCase3) 1747*8d67ca89SAndroid Build Coastguard Worker#endif 1748*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1749*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl12LoopExit) 1750*8d67ca89SAndroid Build Coastguard Worker 1751*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm1, %xmm2 1752*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1753*8d67ca89SAndroid Build Coastguard Worker movaps 20(%ecx), %xmm2 1754*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1755*8d67ca89SAndroid Build Coastguard Worker 1756*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1757*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1758*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1759*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1760*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1761*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1762*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1763*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12Case2OrCase3) 1764*8d67ca89SAndroid Build Coastguard Worker#endif 1765*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1766*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl12LoopExit) 1767*8d67ca89SAndroid Build Coastguard Worker 1768*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm1, %xmm2 1769*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1770*8d67ca89SAndroid Build Coastguard Worker movaps 20(%ecx), %xmm2 1771*8d67ca89SAndroid Build Coastguard Worker 1772*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1773*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1774*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1775*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1776*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1777*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1778*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12Case2OrCase3) 1779*8d67ca89SAndroid Build Coastguard Worker#endif 1780*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1781*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl12LoopExit) 1782*8d67ca89SAndroid Build Coastguard Worker 1783*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm3, %xmm2 1784*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1785*8d67ca89SAndroid Build Coastguard Worker lea 20(%ecx), %ecx 1786*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1787*8d67ca89SAndroid Build Coastguard Worker 1788*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1789*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1790*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1791*8d67ca89SAndroid Build Coastguard Worker lea -4(%ecx), %ecx 1792*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1793*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1794*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1795*8d67ca89SAndroid Build Coastguard Worker#endif 1796*8d67ca89SAndroid Build Coastguard Worker movaps -12(%ecx), %xmm1 1797*8d67ca89SAndroid Build Coastguard Worker 1798*8d67ca89SAndroid Build Coastguard WorkerL(Shl12LoopStart): 1799*8d67ca89SAndroid Build Coastguard Worker movaps 4(%ecx), %xmm2 1800*8d67ca89SAndroid Build Coastguard Worker movaps 20(%ecx), %xmm3 1801*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1802*8d67ca89SAndroid Build Coastguard Worker movaps 36(%ecx), %xmm4 1803*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1804*8d67ca89SAndroid Build Coastguard Worker movaps 52(%ecx), %xmm5 1805*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1806*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1807*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1808*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1809*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1810*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1811*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm4, %xmm5 1812*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm3, %xmm4 1813*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1814*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl12Start) 1815*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1816*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1817*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave12) 1818*8d67ca89SAndroid Build Coastguard Worker#endif 1819*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm2, %xmm3 1820*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1821*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm1, %xmm2 1822*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1823*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1824*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1825*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1826*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1827*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1828*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl12LoopStart) 1829*8d67ca89SAndroid Build Coastguard Worker 1830*8d67ca89SAndroid Build Coastguard WorkerL(Shl12LoopExit): 1831*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %esi 1832*8d67ca89SAndroid Build Coastguard Worker movl %esi, (%edx) 1833*8d67ca89SAndroid Build Coastguard Worker mov $4, %esi 1834*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1835*8d67ca89SAndroid Build Coastguard Worker 1836*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1837*8d67ca89SAndroid Build Coastguard WorkerL(Shl13): 1838*8d67ca89SAndroid Build Coastguard Worker movaps -13(%ecx), %xmm1 1839*8d67ca89SAndroid Build Coastguard Worker movaps 3(%ecx), %xmm2 1840*8d67ca89SAndroid Build Coastguard WorkerL(Shl13Start): 1841*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1842*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1843*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1844*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1845*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1846*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13Case2OrCase3) 1847*8d67ca89SAndroid Build Coastguard Worker#endif 1848*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1849*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl13LoopExit) 1850*8d67ca89SAndroid Build Coastguard Worker 1851*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm1, %xmm2 1852*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1853*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1854*8d67ca89SAndroid Build Coastguard Worker movaps 19(%ecx), %xmm2 1855*8d67ca89SAndroid Build Coastguard Worker 1856*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1857*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1858*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1859*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1860*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1861*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1862*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1863*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13Case2OrCase3) 1864*8d67ca89SAndroid Build Coastguard Worker#endif 1865*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1866*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl13LoopExit) 1867*8d67ca89SAndroid Build Coastguard Worker 1868*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm1, %xmm2 1869*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1870*8d67ca89SAndroid Build Coastguard Worker movaps 19(%ecx), %xmm2 1871*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1872*8d67ca89SAndroid Build Coastguard Worker 1873*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1874*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1875*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1876*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1877*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1878*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1879*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1880*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13Case2OrCase3) 1881*8d67ca89SAndroid Build Coastguard Worker#endif 1882*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1883*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl13LoopExit) 1884*8d67ca89SAndroid Build Coastguard Worker 1885*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm1, %xmm2 1886*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1887*8d67ca89SAndroid Build Coastguard Worker movaps 19(%ecx), %xmm2 1888*8d67ca89SAndroid Build Coastguard Worker 1889*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1890*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1891*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1892*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1893*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1894*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1895*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13Case2OrCase3) 1896*8d67ca89SAndroid Build Coastguard Worker#endif 1897*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1898*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl13LoopExit) 1899*8d67ca89SAndroid Build Coastguard Worker 1900*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm3, %xmm2 1901*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1902*8d67ca89SAndroid Build Coastguard Worker lea 19(%ecx), %ecx 1903*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1904*8d67ca89SAndroid Build Coastguard Worker 1905*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 1906*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 1907*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 1908*8d67ca89SAndroid Build Coastguard Worker lea -3(%ecx), %ecx 1909*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 1910*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1911*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 1912*8d67ca89SAndroid Build Coastguard Worker#endif 1913*8d67ca89SAndroid Build Coastguard Worker movaps -13(%ecx), %xmm1 1914*8d67ca89SAndroid Build Coastguard Worker 1915*8d67ca89SAndroid Build Coastguard WorkerL(Shl13LoopStart): 1916*8d67ca89SAndroid Build Coastguard Worker movaps 3(%ecx), %xmm2 1917*8d67ca89SAndroid Build Coastguard Worker movaps 19(%ecx), %xmm3 1918*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 1919*8d67ca89SAndroid Build Coastguard Worker movaps 35(%ecx), %xmm4 1920*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 1921*8d67ca89SAndroid Build Coastguard Worker movaps 51(%ecx), %xmm5 1922*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 1923*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 1924*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 1925*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 1926*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 1927*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 1928*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm4, %xmm5 1929*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm3, %xmm4 1930*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1931*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl13Start) 1932*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1933*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1934*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave13) 1935*8d67ca89SAndroid Build Coastguard Worker#endif 1936*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm2, %xmm3 1937*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 1938*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm1, %xmm2 1939*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 1940*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 1941*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 1942*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 1943*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1944*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 1945*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl13LoopStart) 1946*8d67ca89SAndroid Build Coastguard Worker 1947*8d67ca89SAndroid Build Coastguard WorkerL(Shl13LoopExit): 1948*8d67ca89SAndroid Build Coastguard Worker movl -1(%ecx), %esi 1949*8d67ca89SAndroid Build Coastguard Worker movl %esi, -1(%edx) 1950*8d67ca89SAndroid Build Coastguard Worker mov $3, %esi 1951*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 1952*8d67ca89SAndroid Build Coastguard Worker 1953*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1954*8d67ca89SAndroid Build Coastguard WorkerL(Shl14): 1955*8d67ca89SAndroid Build Coastguard Worker movaps -14(%ecx), %xmm1 1956*8d67ca89SAndroid Build Coastguard Worker movaps 2(%ecx), %xmm2 1957*8d67ca89SAndroid Build Coastguard WorkerL(Shl14Start): 1958*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1959*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1960*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1961*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1962*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1963*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14Case2OrCase3) 1964*8d67ca89SAndroid Build Coastguard Worker#endif 1965*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1966*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl14LoopExit) 1967*8d67ca89SAndroid Build Coastguard Worker 1968*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm1, %xmm2 1969*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1970*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1971*8d67ca89SAndroid Build Coastguard Worker movaps 18(%ecx), %xmm2 1972*8d67ca89SAndroid Build Coastguard Worker 1973*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1974*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1975*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1976*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1977*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1978*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1979*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1980*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14Case2OrCase3) 1981*8d67ca89SAndroid Build Coastguard Worker#endif 1982*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 1983*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl14LoopExit) 1984*8d67ca89SAndroid Build Coastguard Worker 1985*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm1, %xmm2 1986*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 1987*8d67ca89SAndroid Build Coastguard Worker movaps 18(%ecx), %xmm2 1988*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 1989*8d67ca89SAndroid Build Coastguard Worker 1990*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 1991*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 1992*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 1993*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 1994*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 1995*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1996*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1997*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14Case2OrCase3) 1998*8d67ca89SAndroid Build Coastguard Worker#endif 1999*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2000*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl14LoopExit) 2001*8d67ca89SAndroid Build Coastguard Worker 2002*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm1, %xmm2 2003*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2004*8d67ca89SAndroid Build Coastguard Worker movaps 18(%ecx), %xmm2 2005*8d67ca89SAndroid Build Coastguard Worker 2006*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 2007*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2008*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 2009*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2010*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2011*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2012*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14Case2OrCase3) 2013*8d67ca89SAndroid Build Coastguard Worker#endif 2014*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2015*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl14LoopExit) 2016*8d67ca89SAndroid Build Coastguard Worker 2017*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm3, %xmm2 2018*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2019*8d67ca89SAndroid Build Coastguard Worker lea 18(%ecx), %ecx 2020*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2021*8d67ca89SAndroid Build Coastguard Worker 2022*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 2023*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 2024*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 2025*8d67ca89SAndroid Build Coastguard Worker lea -2(%ecx), %ecx 2026*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 2027*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2028*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 2029*8d67ca89SAndroid Build Coastguard Worker#endif 2030*8d67ca89SAndroid Build Coastguard Worker movaps -14(%ecx), %xmm1 2031*8d67ca89SAndroid Build Coastguard Worker 2032*8d67ca89SAndroid Build Coastguard WorkerL(Shl14LoopStart): 2033*8d67ca89SAndroid Build Coastguard Worker movaps 2(%ecx), %xmm2 2034*8d67ca89SAndroid Build Coastguard Worker movaps 18(%ecx), %xmm3 2035*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 2036*8d67ca89SAndroid Build Coastguard Worker movaps 34(%ecx), %xmm4 2037*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 2038*8d67ca89SAndroid Build Coastguard Worker movaps 50(%ecx), %xmm5 2039*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 2040*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 2041*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 2042*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 2043*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 2044*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 2045*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm4, %xmm5 2046*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm3, %xmm4 2047*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2048*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl14Start) 2049*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2050*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 2051*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave14) 2052*8d67ca89SAndroid Build Coastguard Worker#endif 2053*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm2, %xmm3 2054*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 2055*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm1, %xmm2 2056*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 2057*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 2058*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 2059*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 2060*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2061*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 2062*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl14LoopStart) 2063*8d67ca89SAndroid Build Coastguard Worker 2064*8d67ca89SAndroid Build Coastguard WorkerL(Shl14LoopExit): 2065*8d67ca89SAndroid Build Coastguard Worker movl -2(%ecx), %esi 2066*8d67ca89SAndroid Build Coastguard Worker movl %esi, -2(%edx) 2067*8d67ca89SAndroid Build Coastguard Worker mov $2, %esi 2068*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 2069*8d67ca89SAndroid Build Coastguard Worker 2070*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2071*8d67ca89SAndroid Build Coastguard WorkerL(Shl15): 2072*8d67ca89SAndroid Build Coastguard Worker movaps -15(%ecx), %xmm1 2073*8d67ca89SAndroid Build Coastguard Worker movaps 1(%ecx), %xmm2 2074*8d67ca89SAndroid Build Coastguard WorkerL(Shl15Start): 2075*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 2076*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 2077*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 2078*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2079*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2080*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15Case2OrCase3) 2081*8d67ca89SAndroid Build Coastguard Worker#endif 2082*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2083*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl15LoopExit) 2084*8d67ca89SAndroid Build Coastguard Worker 2085*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm1, %xmm2 2086*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 2087*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2088*8d67ca89SAndroid Build Coastguard Worker movaps 17(%ecx), %xmm2 2089*8d67ca89SAndroid Build Coastguard Worker 2090*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 2091*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2092*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 2093*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2094*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 2095*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2096*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2097*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15Case2OrCase3) 2098*8d67ca89SAndroid Build Coastguard Worker#endif 2099*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2100*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl15LoopExit) 2101*8d67ca89SAndroid Build Coastguard Worker 2102*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm1, %xmm2 2103*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2104*8d67ca89SAndroid Build Coastguard Worker movaps 17(%ecx), %xmm2 2105*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm1 2106*8d67ca89SAndroid Build Coastguard Worker 2107*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 2108*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2109*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 2110*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2111*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 2112*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2113*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2114*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15Case2OrCase3) 2115*8d67ca89SAndroid Build Coastguard Worker#endif 2116*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2117*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl15LoopExit) 2118*8d67ca89SAndroid Build Coastguard Worker 2119*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm1, %xmm2 2120*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2121*8d67ca89SAndroid Build Coastguard Worker movaps 17(%ecx), %xmm2 2122*8d67ca89SAndroid Build Coastguard Worker 2123*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 2124*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2125*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 2126*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2127*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2128*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2129*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15Case2OrCase3) 2130*8d67ca89SAndroid Build Coastguard Worker#endif 2131*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2132*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl15LoopExit) 2133*8d67ca89SAndroid Build Coastguard Worker 2134*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm3, %xmm2 2135*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2136*8d67ca89SAndroid Build Coastguard Worker lea 17(%ecx), %ecx 2137*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %edx 2138*8d67ca89SAndroid Build Coastguard Worker 2139*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 2140*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %ecx 2141*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %eax 2142*8d67ca89SAndroid Build Coastguard Worker lea -1(%ecx), %ecx 2143*8d67ca89SAndroid Build Coastguard Worker sub %eax, %edx 2144*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2145*8d67ca89SAndroid Build Coastguard Worker add %eax, %ebx 2146*8d67ca89SAndroid Build Coastguard Worker#endif 2147*8d67ca89SAndroid Build Coastguard Worker movaps -15(%ecx), %xmm1 2148*8d67ca89SAndroid Build Coastguard Worker 2149*8d67ca89SAndroid Build Coastguard WorkerL(Shl15LoopStart): 2150*8d67ca89SAndroid Build Coastguard Worker movaps 1(%ecx), %xmm2 2151*8d67ca89SAndroid Build Coastguard Worker movaps 17(%ecx), %xmm3 2152*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 2153*8d67ca89SAndroid Build Coastguard Worker movaps 33(%ecx), %xmm4 2154*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, %xmm7 2155*8d67ca89SAndroid Build Coastguard Worker movaps 49(%ecx), %xmm5 2156*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm6 2157*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm7 2158*8d67ca89SAndroid Build Coastguard Worker pminub %xmm6, %xmm7 2159*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm7 2160*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm7, %eax 2161*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, %xmm7 2162*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm4, %xmm5 2163*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm3, %xmm4 2164*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2165*8d67ca89SAndroid Build Coastguard Worker jnz L(Shl15Start) 2166*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2167*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 2168*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyLeave15) 2169*8d67ca89SAndroid Build Coastguard Worker#endif 2170*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm2, %xmm3 2171*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 2172*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm1, %xmm2 2173*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, %xmm1 2174*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 2175*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 2176*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, 16(%edx) 2177*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 2178*8d67ca89SAndroid Build Coastguard Worker lea 64(%edx), %edx 2179*8d67ca89SAndroid Build Coastguard Worker jmp L(Shl15LoopStart) 2180*8d67ca89SAndroid Build Coastguard Worker 2181*8d67ca89SAndroid Build Coastguard WorkerL(Shl15LoopExit): 2182*8d67ca89SAndroid Build Coastguard Worker movl -3(%ecx), %esi 2183*8d67ca89SAndroid Build Coastguard Worker movl %esi, -3(%edx) 2184*8d67ca89SAndroid Build Coastguard Worker mov $1, %esi 2185*8d67ca89SAndroid Build Coastguard Worker#if defined USE_AS_STRCAT || defined USE_AS_STRLCPY 2186*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16Bytes) 2187*8d67ca89SAndroid Build Coastguard Worker#endif 2188*8d67ca89SAndroid Build Coastguard Worker 2189*8d67ca89SAndroid Build Coastguard Worker 2190*8d67ca89SAndroid Build Coastguard Worker#if !defined USE_AS_STRCAT && !defined USE_AS_STRLCPY 2191*8d67ca89SAndroid Build Coastguard Worker 2192*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2193*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes): 2194*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2195*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 2196*8d67ca89SAndroid Build Coastguard Worker# endif 2197*8d67ca89SAndroid Build Coastguard Worker add %esi, %edx 2198*8d67ca89SAndroid Build Coastguard Worker add %esi, %ecx 2199*8d67ca89SAndroid Build Coastguard Worker 2200*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 2201*8d67ca89SAndroid Build Coastguard Worker test %al, %al 2202*8d67ca89SAndroid Build Coastguard Worker jz L(ExitHigh8) 2203*8d67ca89SAndroid Build Coastguard Worker 2204*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesLess8): 2205*8d67ca89SAndroid Build Coastguard Worker mov %al, %ah 2206*8d67ca89SAndroid Build Coastguard Worker and $15, %ah 2207*8d67ca89SAndroid Build Coastguard Worker jz L(ExitHigh4) 2208*8d67ca89SAndroid Build Coastguard Worker 2209*8d67ca89SAndroid Build Coastguard Worker test $0x01, %al 2210*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit1) 2211*8d67ca89SAndroid Build Coastguard Worker test $0x02, %al 2212*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit2) 2213*8d67ca89SAndroid Build Coastguard Worker test $0x04, %al 2214*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit3) 2215*8d67ca89SAndroid Build Coastguard Worker 2216*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2217*8d67ca89SAndroid Build Coastguard WorkerL(Exit4): 2218*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2219*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2220*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (3) 2221*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2222*8d67ca89SAndroid Build Coastguard Worker sub $4, %ebx 2223*8d67ca89SAndroid Build Coastguard Worker lea 4(%edx), %ecx 2224*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2225*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2226*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2227*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2228*8d67ca89SAndroid Build Coastguard Worker# endif 2229*8d67ca89SAndroid Build Coastguard Worker# endif 2230*8d67ca89SAndroid Build Coastguard Worker RETURN1 2231*8d67ca89SAndroid Build Coastguard Worker 2232*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2233*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh4): 2234*8d67ca89SAndroid Build Coastguard Worker test $0x10, %al 2235*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit5) 2236*8d67ca89SAndroid Build Coastguard Worker test $0x20, %al 2237*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit6) 2238*8d67ca89SAndroid Build Coastguard Worker test $0x40, %al 2239*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit7) 2240*8d67ca89SAndroid Build Coastguard Worker 2241*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2242*8d67ca89SAndroid Build Coastguard WorkerL(Exit8): 2243*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2244*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2245*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (7) 2246*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2247*8d67ca89SAndroid Build Coastguard Worker sub $8, %ebx 2248*8d67ca89SAndroid Build Coastguard Worker lea 8(%edx), %ecx 2249*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2250*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2251*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2252*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2253*8d67ca89SAndroid Build Coastguard Worker# endif 2254*8d67ca89SAndroid Build Coastguard Worker# endif 2255*8d67ca89SAndroid Build Coastguard Worker RETURN1 2256*8d67ca89SAndroid Build Coastguard Worker 2257*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2258*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh8): 2259*8d67ca89SAndroid Build Coastguard Worker mov %ah, %al 2260*8d67ca89SAndroid Build Coastguard Worker and $15, %al 2261*8d67ca89SAndroid Build Coastguard Worker jz L(ExitHigh12) 2262*8d67ca89SAndroid Build Coastguard Worker 2263*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ah 2264*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit9) 2265*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ah 2266*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit10) 2267*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ah 2268*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit11) 2269*8d67ca89SAndroid Build Coastguard Worker 2270*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2271*8d67ca89SAndroid Build Coastguard WorkerL(Exit12): 2272*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2273*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %eax 2274*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2275*8d67ca89SAndroid Build Coastguard Worker movl %eax, 8(%edx) 2276*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (11) 2277*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2278*8d67ca89SAndroid Build Coastguard Worker sub $12, %ebx 2279*8d67ca89SAndroid Build Coastguard Worker lea 12(%edx), %ecx 2280*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2281*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2282*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2283*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2284*8d67ca89SAndroid Build Coastguard Worker# endif 2285*8d67ca89SAndroid Build Coastguard Worker# endif 2286*8d67ca89SAndroid Build Coastguard Worker RETURN1 2287*8d67ca89SAndroid Build Coastguard Worker 2288*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2289*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh12): 2290*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ah 2291*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit13) 2292*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ah 2293*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit14) 2294*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ah 2295*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit15) 2296*8d67ca89SAndroid Build Coastguard Worker 2297*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2298*8d67ca89SAndroid Build Coastguard WorkerL(Exit16): 2299*8d67ca89SAndroid Build Coastguard Worker movdqu (%ecx), %xmm0 2300*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edx) 2301*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (15) 2302*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2303*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2304*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %ecx 2305*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2306*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2307*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2308*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2309*8d67ca89SAndroid Build Coastguard Worker# endif 2310*8d67ca89SAndroid Build Coastguard Worker# endif 2311*8d67ca89SAndroid Build Coastguard Worker RETURN1 2312*8d67ca89SAndroid Build Coastguard Worker 2313*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2314*8d67ca89SAndroid Build Coastguard Worker 2315*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH(%esi) 2316*8d67ca89SAndroid Build Coastguard Worker 2317*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2318*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2): 2319*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 2320*8d67ca89SAndroid Build Coastguard Worker add %esi, %ecx 2321*8d67ca89SAndroid Build Coastguard Worker add %esi, %edx 2322*8d67ca89SAndroid Build Coastguard Worker 2323*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 2324*8d67ca89SAndroid Build Coastguard Worker 2325*8d67ca89SAndroid Build Coastguard Worker test %al, %al 2326*8d67ca89SAndroid Build Coastguard Worker jz L(ExitHighCase2) 2327*8d67ca89SAndroid Build Coastguard Worker 2328*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ebx 2329*8d67ca89SAndroid Build Coastguard Worker ja L(CopyFrom1To16BytesLess8) 2330*8d67ca89SAndroid Build Coastguard Worker 2331*8d67ca89SAndroid Build Coastguard Worker test $0x01, %al 2332*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit1) 2333*8d67ca89SAndroid Build Coastguard Worker cmp $1, %ebx 2334*8d67ca89SAndroid Build Coastguard Worker je L(Exit1) 2335*8d67ca89SAndroid Build Coastguard Worker test $0x02, %al 2336*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit2) 2337*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ebx 2338*8d67ca89SAndroid Build Coastguard Worker je L(Exit2) 2339*8d67ca89SAndroid Build Coastguard Worker test $0x04, %al 2340*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit3) 2341*8d67ca89SAndroid Build Coastguard Worker cmp $3, %ebx 2342*8d67ca89SAndroid Build Coastguard Worker je L(Exit3) 2343*8d67ca89SAndroid Build Coastguard Worker test $0x08, %al 2344*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit4) 2345*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ebx 2346*8d67ca89SAndroid Build Coastguard Worker je L(Exit4) 2347*8d67ca89SAndroid Build Coastguard Worker test $0x10, %al 2348*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit5) 2349*8d67ca89SAndroid Build Coastguard Worker cmp $5, %ebx 2350*8d67ca89SAndroid Build Coastguard Worker je L(Exit5) 2351*8d67ca89SAndroid Build Coastguard Worker test $0x20, %al 2352*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit6) 2353*8d67ca89SAndroid Build Coastguard Worker cmp $6, %ebx 2354*8d67ca89SAndroid Build Coastguard Worker je L(Exit6) 2355*8d67ca89SAndroid Build Coastguard Worker test $0x40, %al 2356*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit7) 2357*8d67ca89SAndroid Build Coastguard Worker cmp $7, %ebx 2358*8d67ca89SAndroid Build Coastguard Worker je L(Exit7) 2359*8d67ca89SAndroid Build Coastguard Worker jmp L(Exit8) 2360*8d67ca89SAndroid Build Coastguard Worker 2361*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2362*8d67ca89SAndroid Build Coastguard WorkerL(ExitHighCase2): 2363*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ebx 2364*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesLess8Case3) 2365*8d67ca89SAndroid Build Coastguard Worker 2366*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ah 2367*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit9) 2368*8d67ca89SAndroid Build Coastguard Worker cmp $9, %ebx 2369*8d67ca89SAndroid Build Coastguard Worker je L(Exit9) 2370*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ah 2371*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit10) 2372*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ebx 2373*8d67ca89SAndroid Build Coastguard Worker je L(Exit10) 2374*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ah 2375*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit11) 2376*8d67ca89SAndroid Build Coastguard Worker cmp $11, %ebx 2377*8d67ca89SAndroid Build Coastguard Worker je L(Exit11) 2378*8d67ca89SAndroid Build Coastguard Worker test $0x8, %ah 2379*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit12) 2380*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ebx 2381*8d67ca89SAndroid Build Coastguard Worker je L(Exit12) 2382*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ah 2383*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit13) 2384*8d67ca89SAndroid Build Coastguard Worker cmp $13, %ebx 2385*8d67ca89SAndroid Build Coastguard Worker je L(Exit13) 2386*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ah 2387*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit14) 2388*8d67ca89SAndroid Build Coastguard Worker cmp $14, %ebx 2389*8d67ca89SAndroid Build Coastguard Worker je L(Exit14) 2390*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ah 2391*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit15) 2392*8d67ca89SAndroid Build Coastguard Worker cmp $15, %ebx 2393*8d67ca89SAndroid Build Coastguard Worker je L(Exit15) 2394*8d67ca89SAndroid Build Coastguard Worker jmp L(Exit16) 2395*8d67ca89SAndroid Build Coastguard Worker 2396*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH(%esi) 2397*8d67ca89SAndroid Build Coastguard Worker 2398*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2399*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2OrCase3): 2400*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 2401*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 2402*8d67ca89SAndroid Build Coastguard Worker 2403*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2404*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase3): 2405*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 2406*8d67ca89SAndroid Build Coastguard Worker add %esi, %edx 2407*8d67ca89SAndroid Build Coastguard Worker add %esi, %ecx 2408*8d67ca89SAndroid Build Coastguard Worker 2409*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 2410*8d67ca89SAndroid Build Coastguard Worker 2411*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ebx 2412*8d67ca89SAndroid Build Coastguard Worker ja L(ExitHigh8Case3) 2413*8d67ca89SAndroid Build Coastguard Worker 2414*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesLess8Case3): 2415*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ebx 2416*8d67ca89SAndroid Build Coastguard Worker ja L(ExitHigh4Case3) 2417*8d67ca89SAndroid Build Coastguard Worker 2418*8d67ca89SAndroid Build Coastguard Worker cmp $1, %ebx 2419*8d67ca89SAndroid Build Coastguard Worker je L(Exit1) 2420*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ebx 2421*8d67ca89SAndroid Build Coastguard Worker je L(Exit2) 2422*8d67ca89SAndroid Build Coastguard Worker cmp $3, %ebx 2423*8d67ca89SAndroid Build Coastguard Worker je L(Exit3) 2424*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2425*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2426*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (4) 2427*8d67ca89SAndroid Build Coastguard Worker RETURN1 2428*8d67ca89SAndroid Build Coastguard Worker 2429*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2430*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh4Case3): 2431*8d67ca89SAndroid Build Coastguard Worker cmp $5, %ebx 2432*8d67ca89SAndroid Build Coastguard Worker je L(Exit5) 2433*8d67ca89SAndroid Build Coastguard Worker cmp $6, %ebx 2434*8d67ca89SAndroid Build Coastguard Worker je L(Exit6) 2435*8d67ca89SAndroid Build Coastguard Worker cmp $7, %ebx 2436*8d67ca89SAndroid Build Coastguard Worker je L(Exit7) 2437*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2438*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2439*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (8) 2440*8d67ca89SAndroid Build Coastguard Worker RETURN1 2441*8d67ca89SAndroid Build Coastguard Worker 2442*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2443*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh8Case3): 2444*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ebx 2445*8d67ca89SAndroid Build Coastguard Worker ja L(ExitHigh12Case3) 2446*8d67ca89SAndroid Build Coastguard Worker 2447*8d67ca89SAndroid Build Coastguard Worker cmp $9, %ebx 2448*8d67ca89SAndroid Build Coastguard Worker je L(Exit9) 2449*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ebx 2450*8d67ca89SAndroid Build Coastguard Worker je L(Exit10) 2451*8d67ca89SAndroid Build Coastguard Worker cmp $11, %ebx 2452*8d67ca89SAndroid Build Coastguard Worker je L(Exit11) 2453*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2454*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %eax 2455*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2456*8d67ca89SAndroid Build Coastguard Worker movl %eax, 8(%edx) 2457*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (12) 2458*8d67ca89SAndroid Build Coastguard Worker RETURN1 2459*8d67ca89SAndroid Build Coastguard Worker 2460*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2461*8d67ca89SAndroid Build Coastguard WorkerL(ExitHigh12Case3): 2462*8d67ca89SAndroid Build Coastguard Worker cmp $13, %ebx 2463*8d67ca89SAndroid Build Coastguard Worker je L(Exit13) 2464*8d67ca89SAndroid Build Coastguard Worker cmp $14, %ebx 2465*8d67ca89SAndroid Build Coastguard Worker je L(Exit14) 2466*8d67ca89SAndroid Build Coastguard Worker cmp $15, %ebx 2467*8d67ca89SAndroid Build Coastguard Worker je L(Exit15) 2468*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2469*8d67ca89SAndroid Build Coastguard Worker movlpd 8(%ecx), %xmm1 2470*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2471*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 8(%edx) 2472*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (16) 2473*8d67ca89SAndroid Build Coastguard Worker RETURN1 2474*8d67ca89SAndroid Build Coastguard Worker 2475*8d67ca89SAndroid Build Coastguard Worker# endif 2476*8d67ca89SAndroid Build Coastguard Worker 2477*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2478*8d67ca89SAndroid Build Coastguard WorkerL(Exit1): 2479*8d67ca89SAndroid Build Coastguard Worker movb (%ecx), %al 2480*8d67ca89SAndroid Build Coastguard Worker movb %al, (%edx) 2481*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (0) 2482*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2483*8d67ca89SAndroid Build Coastguard Worker sub $1, %ebx 2484*8d67ca89SAndroid Build Coastguard Worker lea 1(%edx), %ecx 2485*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2486*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2487*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2488*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2489*8d67ca89SAndroid Build Coastguard Worker# endif 2490*8d67ca89SAndroid Build Coastguard Worker# endif 2491*8d67ca89SAndroid Build Coastguard Worker RETURN1 2492*8d67ca89SAndroid Build Coastguard Worker 2493*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2494*8d67ca89SAndroid Build Coastguard WorkerL(Exit2): 2495*8d67ca89SAndroid Build Coastguard Worker movw (%ecx), %ax 2496*8d67ca89SAndroid Build Coastguard Worker movw %ax, (%edx) 2497*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (1) 2498*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2499*8d67ca89SAndroid Build Coastguard Worker sub $2, %ebx 2500*8d67ca89SAndroid Build Coastguard Worker lea 2(%edx), %ecx 2501*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2502*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2503*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2504*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2505*8d67ca89SAndroid Build Coastguard Worker# endif 2506*8d67ca89SAndroid Build Coastguard Worker# endif 2507*8d67ca89SAndroid Build Coastguard Worker RETURN1 2508*8d67ca89SAndroid Build Coastguard Worker 2509*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2510*8d67ca89SAndroid Build Coastguard WorkerL(Exit3): 2511*8d67ca89SAndroid Build Coastguard Worker movw (%ecx), %ax 2512*8d67ca89SAndroid Build Coastguard Worker movw %ax, (%edx) 2513*8d67ca89SAndroid Build Coastguard Worker movb 2(%ecx), %al 2514*8d67ca89SAndroid Build Coastguard Worker movb %al, 2(%edx) 2515*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (2) 2516*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2517*8d67ca89SAndroid Build Coastguard Worker sub $3, %ebx 2518*8d67ca89SAndroid Build Coastguard Worker lea 3(%edx), %ecx 2519*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2520*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2521*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2522*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2523*8d67ca89SAndroid Build Coastguard Worker# endif 2524*8d67ca89SAndroid Build Coastguard Worker# endif 2525*8d67ca89SAndroid Build Coastguard Worker RETURN1 2526*8d67ca89SAndroid Build Coastguard Worker 2527*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2528*8d67ca89SAndroid Build Coastguard WorkerL(Exit5): 2529*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2530*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2531*8d67ca89SAndroid Build Coastguard Worker movb 4(%ecx), %al 2532*8d67ca89SAndroid Build Coastguard Worker movb %al, 4(%edx) 2533*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (4) 2534*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2535*8d67ca89SAndroid Build Coastguard Worker sub $5, %ebx 2536*8d67ca89SAndroid Build Coastguard Worker lea 5(%edx), %ecx 2537*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2538*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2539*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2540*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2541*8d67ca89SAndroid Build Coastguard Worker# endif 2542*8d67ca89SAndroid Build Coastguard Worker# endif 2543*8d67ca89SAndroid Build Coastguard Worker RETURN1 2544*8d67ca89SAndroid Build Coastguard Worker 2545*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2546*8d67ca89SAndroid Build Coastguard WorkerL(Exit6): 2547*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2548*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2549*8d67ca89SAndroid Build Coastguard Worker movw 4(%ecx), %ax 2550*8d67ca89SAndroid Build Coastguard Worker movw %ax, 4(%edx) 2551*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (5) 2552*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2553*8d67ca89SAndroid Build Coastguard Worker sub $6, %ebx 2554*8d67ca89SAndroid Build Coastguard Worker lea 6(%edx), %ecx 2555*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2556*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2557*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2558*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2559*8d67ca89SAndroid Build Coastguard Worker# endif 2560*8d67ca89SAndroid Build Coastguard Worker# endif 2561*8d67ca89SAndroid Build Coastguard Worker RETURN1 2562*8d67ca89SAndroid Build Coastguard Worker 2563*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2564*8d67ca89SAndroid Build Coastguard WorkerL(Exit7): 2565*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2566*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2567*8d67ca89SAndroid Build Coastguard Worker movl 3(%ecx), %eax 2568*8d67ca89SAndroid Build Coastguard Worker movl %eax, 3(%edx) 2569*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (6) 2570*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2571*8d67ca89SAndroid Build Coastguard Worker sub $7, %ebx 2572*8d67ca89SAndroid Build Coastguard Worker lea 7(%edx), %ecx 2573*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2574*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2575*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2576*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2577*8d67ca89SAndroid Build Coastguard Worker# endif 2578*8d67ca89SAndroid Build Coastguard Worker# endif 2579*8d67ca89SAndroid Build Coastguard Worker RETURN1 2580*8d67ca89SAndroid Build Coastguard Worker 2581*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2582*8d67ca89SAndroid Build Coastguard WorkerL(Exit9): 2583*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2584*8d67ca89SAndroid Build Coastguard Worker movb 8(%ecx), %al 2585*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2586*8d67ca89SAndroid Build Coastguard Worker movb %al, 8(%edx) 2587*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (8) 2588*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2589*8d67ca89SAndroid Build Coastguard Worker sub $9, %ebx 2590*8d67ca89SAndroid Build Coastguard Worker lea 9(%edx), %ecx 2591*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2592*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2593*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2594*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2595*8d67ca89SAndroid Build Coastguard Worker# endif 2596*8d67ca89SAndroid Build Coastguard Worker# endif 2597*8d67ca89SAndroid Build Coastguard Worker RETURN1 2598*8d67ca89SAndroid Build Coastguard Worker 2599*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2600*8d67ca89SAndroid Build Coastguard WorkerL(Exit10): 2601*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2602*8d67ca89SAndroid Build Coastguard Worker movw 8(%ecx), %ax 2603*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2604*8d67ca89SAndroid Build Coastguard Worker movw %ax, 8(%edx) 2605*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (9) 2606*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2607*8d67ca89SAndroid Build Coastguard Worker sub $10, %ebx 2608*8d67ca89SAndroid Build Coastguard Worker lea 10(%edx), %ecx 2609*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2610*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2611*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2612*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2613*8d67ca89SAndroid Build Coastguard Worker# endif 2614*8d67ca89SAndroid Build Coastguard Worker# endif 2615*8d67ca89SAndroid Build Coastguard Worker RETURN1 2616*8d67ca89SAndroid Build Coastguard Worker 2617*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2618*8d67ca89SAndroid Build Coastguard WorkerL(Exit11): 2619*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2620*8d67ca89SAndroid Build Coastguard Worker movl 7(%ecx), %eax 2621*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2622*8d67ca89SAndroid Build Coastguard Worker movl %eax, 7(%edx) 2623*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (10) 2624*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2625*8d67ca89SAndroid Build Coastguard Worker sub $11, %ebx 2626*8d67ca89SAndroid Build Coastguard Worker lea 11(%edx), %ecx 2627*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2628*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2629*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2630*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2631*8d67ca89SAndroid Build Coastguard Worker# endif 2632*8d67ca89SAndroid Build Coastguard Worker# endif 2633*8d67ca89SAndroid Build Coastguard Worker RETURN1 2634*8d67ca89SAndroid Build Coastguard Worker 2635*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2636*8d67ca89SAndroid Build Coastguard WorkerL(Exit13): 2637*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2638*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%ecx), %xmm1 2639*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2640*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edx) 2641*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (12) 2642*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2643*8d67ca89SAndroid Build Coastguard Worker sub $13, %ebx 2644*8d67ca89SAndroid Build Coastguard Worker lea 13(%edx), %ecx 2645*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2646*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2647*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2648*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2649*8d67ca89SAndroid Build Coastguard Worker# endif 2650*8d67ca89SAndroid Build Coastguard Worker# endif 2651*8d67ca89SAndroid Build Coastguard Worker RETURN1 2652*8d67ca89SAndroid Build Coastguard Worker 2653*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2654*8d67ca89SAndroid Build Coastguard WorkerL(Exit14): 2655*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2656*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%ecx), %xmm1 2657*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2658*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edx) 2659*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (13) 2660*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2661*8d67ca89SAndroid Build Coastguard Worker sub $14, %ebx 2662*8d67ca89SAndroid Build Coastguard Worker lea 14(%edx), %ecx 2663*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2664*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2665*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2666*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2667*8d67ca89SAndroid Build Coastguard Worker# endif 2668*8d67ca89SAndroid Build Coastguard Worker# endif 2669*8d67ca89SAndroid Build Coastguard Worker RETURN1 2670*8d67ca89SAndroid Build Coastguard Worker 2671*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2672*8d67ca89SAndroid Build Coastguard WorkerL(Exit15): 2673*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 2674*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%ecx), %xmm1 2675*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 2676*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edx) 2677*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT (14) 2678*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2679*8d67ca89SAndroid Build Coastguard Worker sub $15, %ebx 2680*8d67ca89SAndroid Build Coastguard Worker lea 15(%edx), %ecx 2681*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero1) 2682*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2683*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2684*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2685*8d67ca89SAndroid Build Coastguard Worker# endif 2686*8d67ca89SAndroid Build Coastguard Worker# endif 2687*8d67ca89SAndroid Build Coastguard Worker RETURN1 2688*8d67ca89SAndroid Build Coastguard Worker 2689*8d67ca89SAndroid Build Coastguard WorkerCFI_POP (%edi) 2690*8d67ca89SAndroid Build Coastguard Worker 2691*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2692*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2693*8d67ca89SAndroid Build Coastguard WorkerL(Fill0): 2694*8d67ca89SAndroid Build Coastguard Worker RETURN 2695*8d67ca89SAndroid Build Coastguard Worker 2696*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2697*8d67ca89SAndroid Build Coastguard WorkerL(Fill1): 2698*8d67ca89SAndroid Build Coastguard Worker movb %dl, (%ecx) 2699*8d67ca89SAndroid Build Coastguard Worker RETURN 2700*8d67ca89SAndroid Build Coastguard Worker 2701*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2702*8d67ca89SAndroid Build Coastguard WorkerL(Fill2): 2703*8d67ca89SAndroid Build Coastguard Worker movw %dx, (%ecx) 2704*8d67ca89SAndroid Build Coastguard Worker RETURN 2705*8d67ca89SAndroid Build Coastguard Worker 2706*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2707*8d67ca89SAndroid Build Coastguard WorkerL(Fill3): 2708*8d67ca89SAndroid Build Coastguard Worker movw %dx, (%ecx) 2709*8d67ca89SAndroid Build Coastguard Worker movb %dl, 2(%ecx) 2710*8d67ca89SAndroid Build Coastguard Worker RETURN 2711*8d67ca89SAndroid Build Coastguard Worker 2712*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2713*8d67ca89SAndroid Build Coastguard WorkerL(Fill4): 2714*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%ecx) 2715*8d67ca89SAndroid Build Coastguard Worker RETURN 2716*8d67ca89SAndroid Build Coastguard Worker 2717*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2718*8d67ca89SAndroid Build Coastguard WorkerL(Fill5): 2719*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%ecx) 2720*8d67ca89SAndroid Build Coastguard Worker movb %dl, 4(%ecx) 2721*8d67ca89SAndroid Build Coastguard Worker RETURN 2722*8d67ca89SAndroid Build Coastguard Worker 2723*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2724*8d67ca89SAndroid Build Coastguard WorkerL(Fill6): 2725*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%ecx) 2726*8d67ca89SAndroid Build Coastguard Worker movw %dx, 4(%ecx) 2727*8d67ca89SAndroid Build Coastguard Worker RETURN 2728*8d67ca89SAndroid Build Coastguard Worker 2729*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2730*8d67ca89SAndroid Build Coastguard WorkerL(Fill7): 2731*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%ecx) 2732*8d67ca89SAndroid Build Coastguard Worker movl %edx, 3(%ecx) 2733*8d67ca89SAndroid Build Coastguard Worker RETURN 2734*8d67ca89SAndroid Build Coastguard Worker 2735*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2736*8d67ca89SAndroid Build Coastguard WorkerL(Fill8): 2737*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2738*8d67ca89SAndroid Build Coastguard Worker RETURN 2739*8d67ca89SAndroid Build Coastguard Worker 2740*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2741*8d67ca89SAndroid Build Coastguard WorkerL(Fill9): 2742*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2743*8d67ca89SAndroid Build Coastguard Worker movb %dl, 8(%ecx) 2744*8d67ca89SAndroid Build Coastguard Worker RETURN 2745*8d67ca89SAndroid Build Coastguard Worker 2746*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2747*8d67ca89SAndroid Build Coastguard WorkerL(Fill10): 2748*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2749*8d67ca89SAndroid Build Coastguard Worker movw %dx, 8(%ecx) 2750*8d67ca89SAndroid Build Coastguard Worker RETURN 2751*8d67ca89SAndroid Build Coastguard Worker 2752*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2753*8d67ca89SAndroid Build Coastguard WorkerL(Fill11): 2754*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2755*8d67ca89SAndroid Build Coastguard Worker movl %edx, 7(%ecx) 2756*8d67ca89SAndroid Build Coastguard Worker RETURN 2757*8d67ca89SAndroid Build Coastguard Worker 2758*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2759*8d67ca89SAndroid Build Coastguard WorkerL(Fill12): 2760*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2761*8d67ca89SAndroid Build Coastguard Worker movl %edx, 8(%ecx) 2762*8d67ca89SAndroid Build Coastguard Worker RETURN 2763*8d67ca89SAndroid Build Coastguard Worker 2764*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2765*8d67ca89SAndroid Build Coastguard WorkerL(Fill13): 2766*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2767*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 5(%ecx) 2768*8d67ca89SAndroid Build Coastguard Worker RETURN 2769*8d67ca89SAndroid Build Coastguard Worker 2770*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2771*8d67ca89SAndroid Build Coastguard WorkerL(Fill14): 2772*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2773*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 6(%ecx) 2774*8d67ca89SAndroid Build Coastguard Worker RETURN 2775*8d67ca89SAndroid Build Coastguard Worker 2776*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2777*8d67ca89SAndroid Build Coastguard WorkerL(Fill15): 2778*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2779*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 7(%ecx) 2780*8d67ca89SAndroid Build Coastguard Worker RETURN 2781*8d67ca89SAndroid Build Coastguard Worker 2782*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2783*8d67ca89SAndroid Build Coastguard WorkerL(Fill16): 2784*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2785*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 8(%ecx) 2786*8d67ca89SAndroid Build Coastguard Worker RETURN 2787*8d67ca89SAndroid Build Coastguard Worker 2788*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2789*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillExit1): 2790*8d67ca89SAndroid Build Coastguard Worker lea 16(%ebx), %ebx 2791*8d67ca89SAndroid Build Coastguard WorkerL(FillFrom1To16Bytes): 2792*8d67ca89SAndroid Build Coastguard Worker test %ebx, %ebx 2793*8d67ca89SAndroid Build Coastguard Worker jz L(Fill0) 2794*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 2795*8d67ca89SAndroid Build Coastguard Worker je L(Fill16) 2796*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ebx 2797*8d67ca89SAndroid Build Coastguard Worker je L(Fill8) 2798*8d67ca89SAndroid Build Coastguard Worker jg L(FillMore8) 2799*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ebx 2800*8d67ca89SAndroid Build Coastguard Worker je L(Fill4) 2801*8d67ca89SAndroid Build Coastguard Worker jg L(FillMore4) 2802*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ebx 2803*8d67ca89SAndroid Build Coastguard Worker jl L(Fill1) 2804*8d67ca89SAndroid Build Coastguard Worker je L(Fill2) 2805*8d67ca89SAndroid Build Coastguard Worker jg L(Fill3) 2806*8d67ca89SAndroid Build Coastguard WorkerL(FillMore8): /* but less than 16 */ 2807*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ebx 2808*8d67ca89SAndroid Build Coastguard Worker je L(Fill12) 2809*8d67ca89SAndroid Build Coastguard Worker jl L(FillLess12) 2810*8d67ca89SAndroid Build Coastguard Worker cmp $14, %ebx 2811*8d67ca89SAndroid Build Coastguard Worker jl L(Fill13) 2812*8d67ca89SAndroid Build Coastguard Worker je L(Fill14) 2813*8d67ca89SAndroid Build Coastguard Worker jg L(Fill15) 2814*8d67ca89SAndroid Build Coastguard WorkerL(FillMore4): /* but less than 8 */ 2815*8d67ca89SAndroid Build Coastguard Worker cmp $6, %ebx 2816*8d67ca89SAndroid Build Coastguard Worker jl L(Fill5) 2817*8d67ca89SAndroid Build Coastguard Worker je L(Fill6) 2818*8d67ca89SAndroid Build Coastguard Worker jg L(Fill7) 2819*8d67ca89SAndroid Build Coastguard WorkerL(FillLess12): /* but more than 8 */ 2820*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ebx 2821*8d67ca89SAndroid Build Coastguard Worker jl L(Fill9) 2822*8d67ca89SAndroid Build Coastguard Worker je L(Fill10) 2823*8d67ca89SAndroid Build Coastguard Worker jmp L(Fill11) 2824*8d67ca89SAndroid Build Coastguard Worker 2825*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH(%edi) 2826*8d67ca89SAndroid Build Coastguard Worker 2827*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2828*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillTailWithZero1): 2829*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 2830*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillTailWithZero): 2831*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 2832*8d67ca89SAndroid Build Coastguard Worker xor %edx, %edx 2833*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2834*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyFillExit1) 2835*8d67ca89SAndroid Build Coastguard Worker 2836*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%ecx) 2837*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 8(%ecx) 2838*8d67ca89SAndroid Build Coastguard Worker 2839*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2840*8d67ca89SAndroid Build Coastguard Worker 2841*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %edx 2842*8d67ca89SAndroid Build Coastguard Worker and $0xf, %edx 2843*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ecx 2844*8d67ca89SAndroid Build Coastguard Worker add %edx, %ebx 2845*8d67ca89SAndroid Build Coastguard Worker xor %edx, %edx 2846*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 2847*8d67ca89SAndroid Build Coastguard Worker jb L(StrncpyFillLess64) 2848*8d67ca89SAndroid Build Coastguard Worker 2849*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLoopMovdqa): 2850*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%ecx) 2851*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 16(%ecx) 2852*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 32(%ecx) 2853*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 48(%ecx) 2854*8d67ca89SAndroid Build Coastguard Worker lea 64(%ecx), %ecx 2855*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 2856*8d67ca89SAndroid Build Coastguard Worker jae L(StrncpyFillLoopMovdqa) 2857*8d67ca89SAndroid Build Coastguard Worker 2858*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess64): 2859*8d67ca89SAndroid Build Coastguard Worker add $32, %ebx 2860*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillLess32) 2861*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%ecx) 2862*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 16(%ecx) 2863*8d67ca89SAndroid Build Coastguard Worker lea 32(%ecx), %ecx 2864*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2865*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillExit1) 2866*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%ecx) 2867*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2868*8d67ca89SAndroid Build Coastguard Worker jmp L(FillFrom1To16Bytes) 2869*8d67ca89SAndroid Build Coastguard Worker 2870*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess32): 2871*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 2872*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillExit1) 2873*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%ecx) 2874*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 2875*8d67ca89SAndroid Build Coastguard Worker jmp L(FillFrom1To16Bytes) 2876*8d67ca89SAndroid Build Coastguard Worker# endif 2877*8d67ca89SAndroid Build Coastguard Worker 2878*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2879*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail1): 2880*8d67ca89SAndroid Build Coastguard Worker movb (%ecx), %al 2881*8d67ca89SAndroid Build Coastguard Worker movb %al, (%edx) 2882*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (0) 2883*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2884*8d67ca89SAndroid Build Coastguard Worker sub $1, %ebx 2885*8d67ca89SAndroid Build Coastguard Worker lea 1(%edx), %ecx 2886*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2887*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2888*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2889*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2890*8d67ca89SAndroid Build Coastguard Worker# endif 2891*8d67ca89SAndroid Build Coastguard Worker# endif 2892*8d67ca89SAndroid Build Coastguard Worker RETURN 2893*8d67ca89SAndroid Build Coastguard Worker 2894*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2895*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail2): 2896*8d67ca89SAndroid Build Coastguard Worker movw (%ecx), %ax 2897*8d67ca89SAndroid Build Coastguard Worker movw %ax, (%edx) 2898*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (1) 2899*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2900*8d67ca89SAndroid Build Coastguard Worker sub $2, %ebx 2901*8d67ca89SAndroid Build Coastguard Worker lea 2(%edx), %ecx 2902*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2903*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2904*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2905*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2906*8d67ca89SAndroid Build Coastguard Worker# endif 2907*8d67ca89SAndroid Build Coastguard Worker# endif 2908*8d67ca89SAndroid Build Coastguard Worker RETURN 2909*8d67ca89SAndroid Build Coastguard Worker 2910*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2911*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail3): 2912*8d67ca89SAndroid Build Coastguard Worker movw (%ecx), %ax 2913*8d67ca89SAndroid Build Coastguard Worker movw %ax, (%edx) 2914*8d67ca89SAndroid Build Coastguard Worker movb 2(%ecx), %al 2915*8d67ca89SAndroid Build Coastguard Worker movb %al, 2(%edx) 2916*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (2) 2917*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2918*8d67ca89SAndroid Build Coastguard Worker sub $3, %ebx 2919*8d67ca89SAndroid Build Coastguard Worker lea 3(%edx), %ecx 2920*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2921*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2922*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2923*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2924*8d67ca89SAndroid Build Coastguard Worker# endif 2925*8d67ca89SAndroid Build Coastguard Worker# endif 2926*8d67ca89SAndroid Build Coastguard Worker RETURN 2927*8d67ca89SAndroid Build Coastguard Worker 2928*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2929*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail4): 2930*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2931*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2932*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (3) 2933*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2934*8d67ca89SAndroid Build Coastguard Worker sub $4, %ebx 2935*8d67ca89SAndroid Build Coastguard Worker lea 4(%edx), %ecx 2936*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2937*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2938*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2939*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2940*8d67ca89SAndroid Build Coastguard Worker# endif 2941*8d67ca89SAndroid Build Coastguard Worker# endif 2942*8d67ca89SAndroid Build Coastguard Worker RETURN 2943*8d67ca89SAndroid Build Coastguard Worker 2944*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2945*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail5): 2946*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2947*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2948*8d67ca89SAndroid Build Coastguard Worker movb 4(%ecx), %al 2949*8d67ca89SAndroid Build Coastguard Worker movb %al, 4(%edx) 2950*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (4) 2951*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2952*8d67ca89SAndroid Build Coastguard Worker sub $5, %ebx 2953*8d67ca89SAndroid Build Coastguard Worker lea 5(%edx), %ecx 2954*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2955*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2956*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2957*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2958*8d67ca89SAndroid Build Coastguard Worker# endif 2959*8d67ca89SAndroid Build Coastguard Worker# endif 2960*8d67ca89SAndroid Build Coastguard Worker RETURN 2961*8d67ca89SAndroid Build Coastguard Worker 2962*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2963*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail6): 2964*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2965*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2966*8d67ca89SAndroid Build Coastguard Worker movw 4(%ecx), %ax 2967*8d67ca89SAndroid Build Coastguard Worker movw %ax, 4(%edx) 2968*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (5) 2969*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2970*8d67ca89SAndroid Build Coastguard Worker sub $6, %ebx 2971*8d67ca89SAndroid Build Coastguard Worker lea 6(%edx), %ecx 2972*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2973*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2974*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2975*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2976*8d67ca89SAndroid Build Coastguard Worker# endif 2977*8d67ca89SAndroid Build Coastguard Worker# endif 2978*8d67ca89SAndroid Build Coastguard Worker RETURN 2979*8d67ca89SAndroid Build Coastguard Worker 2980*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2981*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail7): 2982*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 2983*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 2984*8d67ca89SAndroid Build Coastguard Worker movl 3(%ecx), %eax 2985*8d67ca89SAndroid Build Coastguard Worker movl %eax, 3(%edx) 2986*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (6) 2987*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 2988*8d67ca89SAndroid Build Coastguard Worker sub $7, %ebx 2989*8d67ca89SAndroid Build Coastguard Worker lea 7(%edx), %ecx 2990*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 2991*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 2992*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 2993*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 2994*8d67ca89SAndroid Build Coastguard Worker# endif 2995*8d67ca89SAndroid Build Coastguard Worker# endif 2996*8d67ca89SAndroid Build Coastguard Worker RETURN 2997*8d67ca89SAndroid Build Coastguard Worker 2998*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2999*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail8): 3000*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3001*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3002*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (7) 3003*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3004*8d67ca89SAndroid Build Coastguard Worker sub $8, %ebx 3005*8d67ca89SAndroid Build Coastguard Worker lea 8(%edx), %ecx 3006*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3007*8d67ca89SAndroid Build Coastguard Worker# endif 3008*8d67ca89SAndroid Build Coastguard Worker RETURN 3009*8d67ca89SAndroid Build Coastguard Worker 3010*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3011*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail9): 3012*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3013*8d67ca89SAndroid Build Coastguard Worker movb 8(%ecx), %al 3014*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3015*8d67ca89SAndroid Build Coastguard Worker movb %al, 8(%edx) 3016*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (8) 3017*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3018*8d67ca89SAndroid Build Coastguard Worker sub $9, %ebx 3019*8d67ca89SAndroid Build Coastguard Worker lea 9(%edx), %ecx 3020*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3021*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3022*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3023*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3024*8d67ca89SAndroid Build Coastguard Worker# endif 3025*8d67ca89SAndroid Build Coastguard Worker# endif 3026*8d67ca89SAndroid Build Coastguard Worker RETURN 3027*8d67ca89SAndroid Build Coastguard Worker 3028*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3029*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail10): 3030*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3031*8d67ca89SAndroid Build Coastguard Worker movw 8(%ecx), %ax 3032*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3033*8d67ca89SAndroid Build Coastguard Worker movw %ax, 8(%edx) 3034*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (9) 3035*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3036*8d67ca89SAndroid Build Coastguard Worker sub $10, %ebx 3037*8d67ca89SAndroid Build Coastguard Worker lea 10(%edx), %ecx 3038*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3039*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3040*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3041*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3042*8d67ca89SAndroid Build Coastguard Worker# endif 3043*8d67ca89SAndroid Build Coastguard Worker# endif 3044*8d67ca89SAndroid Build Coastguard Worker RETURN 3045*8d67ca89SAndroid Build Coastguard Worker 3046*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3047*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail11): 3048*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3049*8d67ca89SAndroid Build Coastguard Worker movl 7(%ecx), %eax 3050*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3051*8d67ca89SAndroid Build Coastguard Worker movl %eax, 7(%edx) 3052*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (10) 3053*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3054*8d67ca89SAndroid Build Coastguard Worker sub $11, %ebx 3055*8d67ca89SAndroid Build Coastguard Worker lea 11(%edx), %ecx 3056*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3057*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3058*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3059*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3060*8d67ca89SAndroid Build Coastguard Worker# endif 3061*8d67ca89SAndroid Build Coastguard Worker# endif 3062*8d67ca89SAndroid Build Coastguard Worker RETURN 3063*8d67ca89SAndroid Build Coastguard Worker 3064*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3065*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail12): 3066*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3067*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %eax 3068*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3069*8d67ca89SAndroid Build Coastguard Worker movl %eax, 8(%edx) 3070*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (11) 3071*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3072*8d67ca89SAndroid Build Coastguard Worker sub $12, %ebx 3073*8d67ca89SAndroid Build Coastguard Worker lea 12(%edx), %ecx 3074*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3075*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3076*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3077*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3078*8d67ca89SAndroid Build Coastguard Worker# endif 3079*8d67ca89SAndroid Build Coastguard Worker# endif 3080*8d67ca89SAndroid Build Coastguard Worker RETURN 3081*8d67ca89SAndroid Build Coastguard Worker 3082*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3083*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail13): 3084*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3085*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%ecx), %xmm1 3086*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3087*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edx) 3088*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (12) 3089*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3090*8d67ca89SAndroid Build Coastguard Worker sub $13, %ebx 3091*8d67ca89SAndroid Build Coastguard Worker lea 13(%edx), %ecx 3092*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3093*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3094*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3095*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3096*8d67ca89SAndroid Build Coastguard Worker# endif 3097*8d67ca89SAndroid Build Coastguard Worker# endif 3098*8d67ca89SAndroid Build Coastguard Worker RETURN 3099*8d67ca89SAndroid Build Coastguard Worker 3100*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3101*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail14): 3102*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3103*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%ecx), %xmm1 3104*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3105*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edx) 3106*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (13) 3107*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3108*8d67ca89SAndroid Build Coastguard Worker sub $14, %ebx 3109*8d67ca89SAndroid Build Coastguard Worker lea 14(%edx), %ecx 3110*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3111*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3112*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3113*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3114*8d67ca89SAndroid Build Coastguard Worker# endif 3115*8d67ca89SAndroid Build Coastguard Worker# endif 3116*8d67ca89SAndroid Build Coastguard Worker RETURN 3117*8d67ca89SAndroid Build Coastguard Worker 3118*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3119*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail15): 3120*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3121*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%ecx), %xmm1 3122*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3123*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edx) 3124*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (14) 3125*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3126*8d67ca89SAndroid Build Coastguard Worker sub $15, %ebx 3127*8d67ca89SAndroid Build Coastguard Worker lea 15(%edx), %ecx 3128*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3129*8d67ca89SAndroid Build Coastguard Worker# endif 3130*8d67ca89SAndroid Build Coastguard Worker RETURN 3131*8d67ca89SAndroid Build Coastguard Worker 3132*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3133*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail16): 3134*8d67ca89SAndroid Build Coastguard Worker movdqu (%ecx), %xmm0 3135*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edx) 3136*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (15) 3137*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3138*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3139*8d67ca89SAndroid Build Coastguard Worker lea 16(%edx), %ecx 3140*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 3141*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3142*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3143*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3144*8d67ca89SAndroid Build Coastguard Worker# endif 3145*8d67ca89SAndroid Build Coastguard Worker# endif 3146*8d67ca89SAndroid Build Coastguard Worker RETURN 3147*8d67ca89SAndroid Build Coastguard Worker#endif 3148*8d67ca89SAndroid Build Coastguard Worker 3149*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 3150*8d67ca89SAndroid Build Coastguard Worker# if !defined(USE_AS_STRCAT) && !defined(USE_AS_STRLCPY) 3151*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 3152*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%edi) 3153*8d67ca89SAndroid Build Coastguard Worker# endif 3154*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3155*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeaveCase2OrCase3): 3156*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3157*8d67ca89SAndroid Build Coastguard Worker jnz L(Aligned64LeaveCase2) 3158*8d67ca89SAndroid Build Coastguard Worker 3159*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase3): 3160*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3161*8d67ca89SAndroid Build Coastguard Worker jle L(CopyFrom1To16BytesCase3) 3162*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, -64(%edx) 3163*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3164*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3165*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase3) 3166*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, -48(%edx) 3167*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3168*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3169*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase3) 3170*8d67ca89SAndroid Build Coastguard Worker movaps %xmm6, -32(%edx) 3171*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3172*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3173*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3174*8d67ca89SAndroid Build Coastguard Worker 3175*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase2): 3176*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 3177*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 3178*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3179*8d67ca89SAndroid Build Coastguard Worker jle L(CopyFrom1To16BytesCase2OrCase3) 3180*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3181*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 3182*8d67ca89SAndroid Build Coastguard Worker 3183*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm0 3184*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 3185*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, -64(%edx) 3186*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3187*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3188*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 3189*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3190*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 3191*8d67ca89SAndroid Build Coastguard Worker 3192*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 3193*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 3194*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, -48(%edx) 3195*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3196*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3197*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 3198*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3199*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 3200*8d67ca89SAndroid Build Coastguard Worker 3201*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm0 3202*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 3203*8d67ca89SAndroid Build Coastguard Worker movaps %xmm6, -32(%edx) 3204*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3205*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3206*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase2) 3207*8d67ca89SAndroid Build Coastguard Worker 3208*8d67ca89SAndroid Build Coastguard Worker/*--------------------------------------------------*/ 3209*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3210*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit1Case2OrCase3): 3211*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3212*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%ecx), %xmm1 3213*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3214*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edx) 3215*8d67ca89SAndroid Build Coastguard Worker mov $15, %esi 3216*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3217*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3218*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3219*8d67ca89SAndroid Build Coastguard Worker 3220*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3221*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit2Case2OrCase3): 3222*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3223*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%ecx), %xmm1 3224*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3225*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edx) 3226*8d67ca89SAndroid Build Coastguard Worker mov $14, %esi 3227*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3228*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3229*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3230*8d67ca89SAndroid Build Coastguard Worker 3231*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3232*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit3Case2OrCase3): 3233*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3234*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%ecx), %xmm1 3235*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3236*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edx) 3237*8d67ca89SAndroid Build Coastguard Worker mov $13, %esi 3238*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3239*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3240*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3241*8d67ca89SAndroid Build Coastguard Worker 3242*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3243*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4Case2OrCase3): 3244*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3245*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %esi 3246*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3247*8d67ca89SAndroid Build Coastguard Worker movl %esi, 8(%edx) 3248*8d67ca89SAndroid Build Coastguard Worker mov $12, %esi 3249*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3250*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3251*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3252*8d67ca89SAndroid Build Coastguard Worker 3253*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3254*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit5Case2OrCase3): 3255*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3256*8d67ca89SAndroid Build Coastguard Worker movl 7(%ecx), %esi 3257*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3258*8d67ca89SAndroid Build Coastguard Worker movl %esi, 7(%edx) 3259*8d67ca89SAndroid Build Coastguard Worker mov $11, %esi 3260*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3261*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3262*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3263*8d67ca89SAndroid Build Coastguard Worker 3264*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3265*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit6Case2OrCase3): 3266*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3267*8d67ca89SAndroid Build Coastguard Worker movl 6(%ecx), %esi 3268*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3269*8d67ca89SAndroid Build Coastguard Worker movl %esi, 6(%edx) 3270*8d67ca89SAndroid Build Coastguard Worker mov $10, %esi 3271*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3272*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3273*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3274*8d67ca89SAndroid Build Coastguard Worker 3275*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3276*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit7Case2OrCase3): 3277*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3278*8d67ca89SAndroid Build Coastguard Worker movl 5(%ecx), %esi 3279*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3280*8d67ca89SAndroid Build Coastguard Worker movl %esi, 5(%edx) 3281*8d67ca89SAndroid Build Coastguard Worker mov $9, %esi 3282*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3283*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3284*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3285*8d67ca89SAndroid Build Coastguard Worker 3286*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3287*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8Case2OrCase3): 3288*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3289*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3290*8d67ca89SAndroid Build Coastguard Worker mov $8, %esi 3291*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3292*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3293*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3294*8d67ca89SAndroid Build Coastguard Worker 3295*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3296*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit9Case2OrCase3): 3297*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3298*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3299*8d67ca89SAndroid Build Coastguard Worker mov $7, %esi 3300*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3301*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3302*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3303*8d67ca89SAndroid Build Coastguard Worker 3304*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3305*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit10Case2OrCase3): 3306*8d67ca89SAndroid Build Coastguard Worker movlpd -1(%ecx), %xmm0 3307*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -1(%edx) 3308*8d67ca89SAndroid Build Coastguard Worker mov $6, %esi 3309*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3310*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3311*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3312*8d67ca89SAndroid Build Coastguard Worker 3313*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3314*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit11Case2OrCase3): 3315*8d67ca89SAndroid Build Coastguard Worker movlpd -2(%ecx), %xmm0 3316*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -2(%edx) 3317*8d67ca89SAndroid Build Coastguard Worker mov $5, %esi 3318*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3319*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3320*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3321*8d67ca89SAndroid Build Coastguard Worker 3322*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3323*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12Case2OrCase3): 3324*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %esi 3325*8d67ca89SAndroid Build Coastguard Worker movl %esi, (%edx) 3326*8d67ca89SAndroid Build Coastguard Worker mov $4, %esi 3327*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3328*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3329*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3330*8d67ca89SAndroid Build Coastguard Worker 3331*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3332*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit13Case2OrCase3): 3333*8d67ca89SAndroid Build Coastguard Worker movl -1(%ecx), %esi 3334*8d67ca89SAndroid Build Coastguard Worker movl %esi, -1(%edx) 3335*8d67ca89SAndroid Build Coastguard Worker mov $3, %esi 3336*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3337*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3338*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3339*8d67ca89SAndroid Build Coastguard Worker 3340*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3341*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit14Case2OrCase3): 3342*8d67ca89SAndroid Build Coastguard Worker movl -2(%ecx), %esi 3343*8d67ca89SAndroid Build Coastguard Worker movl %esi, -2(%edx) 3344*8d67ca89SAndroid Build Coastguard Worker mov $2, %esi 3345*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3346*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3347*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3348*8d67ca89SAndroid Build Coastguard Worker 3349*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3350*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15Case2OrCase3): 3351*8d67ca89SAndroid Build Coastguard Worker movl -3(%ecx), %esi 3352*8d67ca89SAndroid Build Coastguard Worker movl %esi, -3(%edx) 3353*8d67ca89SAndroid Build Coastguard Worker mov $1, %esi 3354*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 3355*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 3356*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3357*8d67ca89SAndroid Build Coastguard Worker 3358*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave1): 3359*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3360*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3361*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit1) 3362*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm1, %xmm2 3363*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3364*8d67ca89SAndroid Build Coastguard Worker movaps 31(%ecx), %xmm2 3365*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3366*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3367*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1) 3368*8d67ca89SAndroid Build Coastguard Worker palignr $1, %xmm3, %xmm2 3369*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3370*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3371*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3372*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1) 3373*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3374*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3375*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3376*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit1) 3377*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3378*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3379*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3380*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit1): 3381*8d67ca89SAndroid Build Coastguard Worker lea 15(%edx, %esi), %edx 3382*8d67ca89SAndroid Build Coastguard Worker lea 15(%ecx, %esi), %ecx 3383*8d67ca89SAndroid Build Coastguard Worker movdqu -16(%ecx), %xmm0 3384*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3385*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, -16(%edx) 3386*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3387*8d67ca89SAndroid Build Coastguard Worker 3388*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave2): 3389*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3390*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3391*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit2) 3392*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm1, %xmm2 3393*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3394*8d67ca89SAndroid Build Coastguard Worker movaps 30(%ecx), %xmm2 3395*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3396*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3397*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2) 3398*8d67ca89SAndroid Build Coastguard Worker palignr $2, %xmm3, %xmm2 3399*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3400*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3401*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3402*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2) 3403*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3404*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3405*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3406*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit2) 3407*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3408*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3409*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3410*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit2): 3411*8d67ca89SAndroid Build Coastguard Worker lea 14(%edx, %esi), %edx 3412*8d67ca89SAndroid Build Coastguard Worker lea 14(%ecx, %esi), %ecx 3413*8d67ca89SAndroid Build Coastguard Worker movdqu -16(%ecx), %xmm0 3414*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3415*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, -16(%edx) 3416*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3417*8d67ca89SAndroid Build Coastguard Worker 3418*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave3): 3419*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3420*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3421*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit3) 3422*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm1, %xmm2 3423*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3424*8d67ca89SAndroid Build Coastguard Worker movaps 29(%ecx), %xmm2 3425*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3426*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3427*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3) 3428*8d67ca89SAndroid Build Coastguard Worker palignr $3, %xmm3, %xmm2 3429*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3430*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3431*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3432*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3) 3433*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3434*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3435*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3436*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit3) 3437*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3438*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3439*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3440*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit3): 3441*8d67ca89SAndroid Build Coastguard Worker lea 13(%edx, %esi), %edx 3442*8d67ca89SAndroid Build Coastguard Worker lea 13(%ecx, %esi), %ecx 3443*8d67ca89SAndroid Build Coastguard Worker movdqu -16(%ecx), %xmm0 3444*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3445*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, -16(%edx) 3446*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3447*8d67ca89SAndroid Build Coastguard Worker 3448*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave4): 3449*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3450*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3451*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit4) 3452*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm1, %xmm2 3453*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3454*8d67ca89SAndroid Build Coastguard Worker movaps 28(%ecx), %xmm2 3455*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3456*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3457*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4) 3458*8d67ca89SAndroid Build Coastguard Worker palignr $4, %xmm3, %xmm2 3459*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3460*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3461*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3462*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4) 3463*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3464*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3465*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3466*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4) 3467*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3468*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3469*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3470*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4): 3471*8d67ca89SAndroid Build Coastguard Worker lea 12(%edx, %esi), %edx 3472*8d67ca89SAndroid Build Coastguard Worker lea 12(%ecx, %esi), %ecx 3473*8d67ca89SAndroid Build Coastguard Worker movlpd -12(%ecx), %xmm0 3474*8d67ca89SAndroid Build Coastguard Worker movl -4(%ecx), %eax 3475*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -12(%edx) 3476*8d67ca89SAndroid Build Coastguard Worker movl %eax, -4(%edx) 3477*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3478*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3479*8d67ca89SAndroid Build Coastguard Worker 3480*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave5): 3481*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3482*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3483*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit5) 3484*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm1, %xmm2 3485*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3486*8d67ca89SAndroid Build Coastguard Worker movaps 27(%ecx), %xmm2 3487*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3488*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3489*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5) 3490*8d67ca89SAndroid Build Coastguard Worker palignr $5, %xmm3, %xmm2 3491*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3492*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3493*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3494*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5) 3495*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3496*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3497*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3498*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit5) 3499*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3500*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3501*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3502*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit5): 3503*8d67ca89SAndroid Build Coastguard Worker lea 11(%edx, %esi), %edx 3504*8d67ca89SAndroid Build Coastguard Worker lea 11(%ecx, %esi), %ecx 3505*8d67ca89SAndroid Build Coastguard Worker movlpd -11(%ecx), %xmm0 3506*8d67ca89SAndroid Build Coastguard Worker movl -4(%ecx), %eax 3507*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -11(%edx) 3508*8d67ca89SAndroid Build Coastguard Worker movl %eax, -4(%edx) 3509*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3510*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3511*8d67ca89SAndroid Build Coastguard Worker 3512*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave6): 3513*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3514*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3515*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit6) 3516*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm1, %xmm2 3517*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3518*8d67ca89SAndroid Build Coastguard Worker movaps 26(%ecx), %xmm2 3519*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3520*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3521*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6) 3522*8d67ca89SAndroid Build Coastguard Worker palignr $6, %xmm3, %xmm2 3523*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3524*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3525*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3526*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6) 3527*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3528*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3529*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3530*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit6) 3531*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3532*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3533*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3534*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit6): 3535*8d67ca89SAndroid Build Coastguard Worker lea 10(%edx, %esi), %edx 3536*8d67ca89SAndroid Build Coastguard Worker lea 10(%ecx, %esi), %ecx 3537*8d67ca89SAndroid Build Coastguard Worker 3538*8d67ca89SAndroid Build Coastguard Worker movlpd -10(%ecx), %xmm0 3539*8d67ca89SAndroid Build Coastguard Worker movw -2(%ecx), %ax 3540*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -10(%edx) 3541*8d67ca89SAndroid Build Coastguard Worker movw %ax, -2(%edx) 3542*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3543*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3544*8d67ca89SAndroid Build Coastguard Worker 3545*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave7): 3546*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3547*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3548*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit7) 3549*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm1, %xmm2 3550*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3551*8d67ca89SAndroid Build Coastguard Worker movaps 25(%ecx), %xmm2 3552*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3553*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3554*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7) 3555*8d67ca89SAndroid Build Coastguard Worker palignr $7, %xmm3, %xmm2 3556*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3557*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3558*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3559*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7) 3560*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3561*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3562*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3563*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit7) 3564*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3565*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3566*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3567*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit7): 3568*8d67ca89SAndroid Build Coastguard Worker lea 9(%edx, %esi), %edx 3569*8d67ca89SAndroid Build Coastguard Worker lea 9(%ecx, %esi), %ecx 3570*8d67ca89SAndroid Build Coastguard Worker 3571*8d67ca89SAndroid Build Coastguard Worker movlpd -9(%ecx), %xmm0 3572*8d67ca89SAndroid Build Coastguard Worker movb -1(%ecx), %ah 3573*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -9(%edx) 3574*8d67ca89SAndroid Build Coastguard Worker movb %ah, -1(%edx) 3575*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3576*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3577*8d67ca89SAndroid Build Coastguard Worker 3578*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave8): 3579*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3580*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3581*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit8) 3582*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm1, %xmm2 3583*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3584*8d67ca89SAndroid Build Coastguard Worker movaps 24(%ecx), %xmm2 3585*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3586*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3587*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8) 3588*8d67ca89SAndroid Build Coastguard Worker palignr $8, %xmm3, %xmm2 3589*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3590*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3591*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3592*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8) 3593*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3594*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3595*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3596*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit8) 3597*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3598*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3599*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3600*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8): 3601*8d67ca89SAndroid Build Coastguard Worker lea 8(%edx, %esi), %edx 3602*8d67ca89SAndroid Build Coastguard Worker lea 8(%ecx, %esi), %ecx 3603*8d67ca89SAndroid Build Coastguard Worker movlpd -8(%ecx), %xmm0 3604*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -8(%edx) 3605*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3606*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3607*8d67ca89SAndroid Build Coastguard Worker 3608*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave9): 3609*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3610*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3611*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit9) 3612*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm1, %xmm2 3613*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3614*8d67ca89SAndroid Build Coastguard Worker movaps 23(%ecx), %xmm2 3615*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3616*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3617*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9) 3618*8d67ca89SAndroid Build Coastguard Worker palignr $9, %xmm3, %xmm2 3619*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3620*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3621*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3622*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9) 3623*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3624*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3625*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3626*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit9) 3627*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3628*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3629*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3630*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit9): 3631*8d67ca89SAndroid Build Coastguard Worker lea 7(%edx, %esi), %edx 3632*8d67ca89SAndroid Build Coastguard Worker lea 7(%ecx, %esi), %ecx 3633*8d67ca89SAndroid Build Coastguard Worker 3634*8d67ca89SAndroid Build Coastguard Worker movlpd -8(%ecx), %xmm0 3635*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -8(%edx) 3636*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3637*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3638*8d67ca89SAndroid Build Coastguard Worker 3639*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave10): 3640*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3641*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3642*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit10) 3643*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm1, %xmm2 3644*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3645*8d67ca89SAndroid Build Coastguard Worker movaps 22(%ecx), %xmm2 3646*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3647*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3648*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10) 3649*8d67ca89SAndroid Build Coastguard Worker palignr $10, %xmm3, %xmm2 3650*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3651*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3652*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3653*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10) 3654*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3655*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3656*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3657*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit10) 3658*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3659*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3660*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3661*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit10): 3662*8d67ca89SAndroid Build Coastguard Worker lea 6(%edx, %esi), %edx 3663*8d67ca89SAndroid Build Coastguard Worker lea 6(%ecx, %esi), %ecx 3664*8d67ca89SAndroid Build Coastguard Worker 3665*8d67ca89SAndroid Build Coastguard Worker movlpd -8(%ecx), %xmm0 3666*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -8(%edx) 3667*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3668*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3669*8d67ca89SAndroid Build Coastguard Worker 3670*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave11): 3671*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3672*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3673*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit11) 3674*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm1, %xmm2 3675*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3676*8d67ca89SAndroid Build Coastguard Worker movaps 21(%ecx), %xmm2 3677*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3678*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3679*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11) 3680*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm3, %xmm2 3681*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3682*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3683*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3684*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11) 3685*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3686*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3687*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3688*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit11) 3689*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3690*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3691*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3692*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit11): 3693*8d67ca89SAndroid Build Coastguard Worker lea 5(%edx, %esi), %edx 3694*8d67ca89SAndroid Build Coastguard Worker lea 5(%ecx, %esi), %ecx 3695*8d67ca89SAndroid Build Coastguard Worker movl -5(%ecx), %esi 3696*8d67ca89SAndroid Build Coastguard Worker movb -1(%ecx), %ah 3697*8d67ca89SAndroid Build Coastguard Worker movl %esi, -5(%edx) 3698*8d67ca89SAndroid Build Coastguard Worker movb %ah, -1(%edx) 3699*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3700*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3701*8d67ca89SAndroid Build Coastguard Worker 3702*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave12): 3703*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3704*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3705*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit12) 3706*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm1, %xmm2 3707*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3708*8d67ca89SAndroid Build Coastguard Worker movaps 20(%ecx), %xmm2 3709*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3710*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3711*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12) 3712*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm3, %xmm2 3713*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3714*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3715*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3716*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12) 3717*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3718*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3719*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3720*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12) 3721*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3722*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3723*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3724*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12): 3725*8d67ca89SAndroid Build Coastguard Worker lea 4(%edx, %esi), %edx 3726*8d67ca89SAndroid Build Coastguard Worker lea 4(%ecx, %esi), %ecx 3727*8d67ca89SAndroid Build Coastguard Worker movl -4(%ecx), %eax 3728*8d67ca89SAndroid Build Coastguard Worker movl %eax, -4(%edx) 3729*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3730*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3731*8d67ca89SAndroid Build Coastguard Worker 3732*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave13): 3733*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3734*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3735*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit13) 3736*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm1, %xmm2 3737*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3738*8d67ca89SAndroid Build Coastguard Worker movaps 19(%ecx), %xmm2 3739*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3740*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3741*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13) 3742*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm3, %xmm2 3743*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3744*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3745*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3746*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13) 3747*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3748*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3749*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3750*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit13) 3751*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3752*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3753*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3754*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit13): 3755*8d67ca89SAndroid Build Coastguard Worker lea 3(%edx, %esi), %edx 3756*8d67ca89SAndroid Build Coastguard Worker lea 3(%ecx, %esi), %ecx 3757*8d67ca89SAndroid Build Coastguard Worker 3758*8d67ca89SAndroid Build Coastguard Worker movl -4(%ecx), %eax 3759*8d67ca89SAndroid Build Coastguard Worker movl %eax, -4(%edx) 3760*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3761*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3762*8d67ca89SAndroid Build Coastguard Worker 3763*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave14): 3764*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3765*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3766*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit14) 3767*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm1, %xmm2 3768*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3769*8d67ca89SAndroid Build Coastguard Worker movaps 18(%ecx), %xmm2 3770*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3771*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3772*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14) 3773*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm3, %xmm2 3774*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3775*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3776*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3777*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14) 3778*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3779*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3780*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3781*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit14) 3782*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3783*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3784*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3785*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit14): 3786*8d67ca89SAndroid Build Coastguard Worker lea 2(%edx, %esi), %edx 3787*8d67ca89SAndroid Build Coastguard Worker lea 2(%ecx, %esi), %ecx 3788*8d67ca89SAndroid Build Coastguard Worker movw -2(%ecx), %ax 3789*8d67ca89SAndroid Build Coastguard Worker movw %ax, -2(%edx) 3790*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3791*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3792*8d67ca89SAndroid Build Coastguard Worker 3793*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyLeave15): 3794*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm3 3795*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 3796*8d67ca89SAndroid Build Coastguard Worker jle L(StrncpyExit15) 3797*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm1, %xmm2 3798*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, (%edx) 3799*8d67ca89SAndroid Build Coastguard Worker movaps 17(%ecx), %xmm2 3800*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3801*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3802*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15) 3803*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm3, %xmm2 3804*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, 16(%edx) 3805*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3806*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3807*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15) 3808*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, 32(%edx) 3809*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3810*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 3811*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit15) 3812*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, 48(%edx) 3813*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 3814*8d67ca89SAndroid Build Coastguard Worker lea -16(%ebx), %ebx 3815*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15): 3816*8d67ca89SAndroid Build Coastguard Worker lea 1(%edx, %esi), %edx 3817*8d67ca89SAndroid Build Coastguard Worker lea 1(%ecx, %esi), %ecx 3818*8d67ca89SAndroid Build Coastguard Worker movb -1(%ecx), %ah 3819*8d67ca89SAndroid Build Coastguard Worker movb %ah, -1(%edx) 3820*8d67ca89SAndroid Build Coastguard Worker xor %esi, %esi 3821*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesCase3) 3822*8d67ca89SAndroid Build Coastguard Worker#endif 3823*8d67ca89SAndroid Build Coastguard Worker 3824*8d67ca89SAndroid Build Coastguard Worker#if !defined USE_AS_STRCAT && ! defined USE_AS_STRLCPY 3825*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STRNCPY 3826*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%esi) 3827*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%edi) 3828*8d67ca89SAndroid Build Coastguard Worker 3829*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3830*8d67ca89SAndroid Build Coastguard WorkerL(ExitTail0): 3831*8d67ca89SAndroid Build Coastguard Worker movl %edx, %eax 3832*8d67ca89SAndroid Build Coastguard Worker RETURN 3833*8d67ca89SAndroid Build Coastguard Worker 3834*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3835*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15Bytes): 3836*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ebx 3837*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit12Bytes) 3838*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 8(%ecx) 3839*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail9) 3840*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 9(%ecx) 3841*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail10) 3842*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 10(%ecx) 3843*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail11) 3844*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 11(%ecx) 3845*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail12) 3846*8d67ca89SAndroid Build Coastguard Worker cmp $13, %ebx 3847*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail13) 3848*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 12(%ecx) 3849*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail13) 3850*8d67ca89SAndroid Build Coastguard Worker cmp $14, %ebx 3851*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail14) 3852*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 13(%ecx) 3853*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail14) 3854*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3855*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%ecx), %xmm1 3856*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3857*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edx) 3858*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3859*8d67ca89SAndroid Build Coastguard Worker lea 14(%edx), %eax 3860*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3861*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3862*8d67ca89SAndroid Build Coastguard Worker# else 3863*8d67ca89SAndroid Build Coastguard Worker movl %edx, %eax 3864*8d67ca89SAndroid Build Coastguard Worker# endif 3865*8d67ca89SAndroid Build Coastguard Worker RETURN 3866*8d67ca89SAndroid Build Coastguard Worker 3867*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3868*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12Bytes): 3869*8d67ca89SAndroid Build Coastguard Worker cmp $9, %ebx 3870*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail9) 3871*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 8(%ecx) 3872*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail9) 3873*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ebx 3874*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail10) 3875*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 9(%ecx) 3876*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail10) 3877*8d67ca89SAndroid Build Coastguard Worker cmp $11, %ebx 3878*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail11) 3879*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 10(%ecx) 3880*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail11) 3881*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3882*8d67ca89SAndroid Build Coastguard Worker movl 8(%ecx), %eax 3883*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3884*8d67ca89SAndroid Build Coastguard Worker movl %eax, 8(%edx) 3885*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (11) 3886*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3887*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3888*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3889*8d67ca89SAndroid Build Coastguard Worker# endif 3890*8d67ca89SAndroid Build Coastguard Worker RETURN 3891*8d67ca89SAndroid Build Coastguard Worker 3892*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3893*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8Bytes): 3894*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ebx 3895*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyExit4Bytes) 3896*8d67ca89SAndroid Build Coastguard Worker cmpb $0, (%ecx) 3897*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail1) 3898*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 1(%ecx) 3899*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail2) 3900*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 2(%ecx) 3901*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail3) 3902*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 3(%ecx) 3903*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail4) 3904*8d67ca89SAndroid Build Coastguard Worker 3905*8d67ca89SAndroid Build Coastguard Worker cmp $5, %ebx 3906*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail5) 3907*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 4(%ecx) 3908*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail5) 3909*8d67ca89SAndroid Build Coastguard Worker cmp $6, %ebx 3910*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail6) 3911*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 5(%ecx) 3912*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail6) 3913*8d67ca89SAndroid Build Coastguard Worker cmp $7, %ebx 3914*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail7) 3915*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 6(%ecx) 3916*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail7) 3917*8d67ca89SAndroid Build Coastguard Worker movlpd (%ecx), %xmm0 3918*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edx) 3919*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3920*8d67ca89SAndroid Build Coastguard Worker lea 7(%edx), %eax 3921*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3922*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3923*8d67ca89SAndroid Build Coastguard Worker# else 3924*8d67ca89SAndroid Build Coastguard Worker movl %edx, %eax 3925*8d67ca89SAndroid Build Coastguard Worker# endif 3926*8d67ca89SAndroid Build Coastguard Worker RETURN 3927*8d67ca89SAndroid Build Coastguard Worker 3928*8d67ca89SAndroid Build Coastguard Worker .p2align 4 3929*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4Bytes): 3930*8d67ca89SAndroid Build Coastguard Worker test %ebx, %ebx 3931*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail0) 3932*8d67ca89SAndroid Build Coastguard Worker cmp $1, %ebx 3933*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail1) 3934*8d67ca89SAndroid Build Coastguard Worker cmpb $0, (%ecx) 3935*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail1) 3936*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ebx 3937*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail2) 3938*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 1(%ecx) 3939*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail2) 3940*8d67ca89SAndroid Build Coastguard Worker cmp $3, %ebx 3941*8d67ca89SAndroid Build Coastguard Worker je L(ExitTail3) 3942*8d67ca89SAndroid Build Coastguard Worker cmpb $0, 2(%ecx) 3943*8d67ca89SAndroid Build Coastguard Worker jz L(ExitTail3) 3944*8d67ca89SAndroid Build Coastguard Worker movl (%ecx), %eax 3945*8d67ca89SAndroid Build Coastguard Worker movl %eax, (%edx) 3946*8d67ca89SAndroid Build Coastguard Worker SAVE_RESULT_TAIL (3) 3947*8d67ca89SAndroid Build Coastguard Worker# ifdef USE_AS_STPCPY 3948*8d67ca89SAndroid Build Coastguard Worker cmpb $1, (%eax) 3949*8d67ca89SAndroid Build Coastguard Worker sbb $-1, %eax 3950*8d67ca89SAndroid Build Coastguard Worker# endif 3951*8d67ca89SAndroid Build Coastguard Worker RETURN 3952*8d67ca89SAndroid Build Coastguard Worker# endif 3953*8d67ca89SAndroid Build Coastguard Worker 3954*8d67ca89SAndroid Build Coastguard WorkerEND (STRCPY) 3955*8d67ca89SAndroid Build Coastguard Worker#endif 3956