1*8d67ca89SAndroid Build Coastguard Worker/* 2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2014, 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 L 32*8d67ca89SAndroid Build Coastguard Worker# define L(label) .L##label 33*8d67ca89SAndroid Build Coastguard Worker#endif 34*8d67ca89SAndroid Build Coastguard Worker 35*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc 36*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc .cfi_startproc 37*8d67ca89SAndroid Build Coastguard Worker#endif 38*8d67ca89SAndroid Build Coastguard Worker 39*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc 40*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc .cfi_endproc 41*8d67ca89SAndroid Build Coastguard Worker#endif 42*8d67ca89SAndroid Build Coastguard Worker 43*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_rel_offset 44*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 45*8d67ca89SAndroid Build Coastguard Worker#endif 46*8d67ca89SAndroid Build Coastguard Worker 47*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore 48*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg) .cfi_restore reg 49*8d67ca89SAndroid Build Coastguard Worker#endif 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_adjust_cfa_offset 52*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 53*8d67ca89SAndroid Build Coastguard Worker#endif 54*8d67ca89SAndroid Build Coastguard Worker 55*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY 56*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name) \ 57*8d67ca89SAndroid Build Coastguard Worker .type name, @function; \ 58*8d67ca89SAndroid Build Coastguard Worker .globl name; \ 59*8d67ca89SAndroid Build Coastguard Worker .p2align 4; \ 60*8d67ca89SAndroid Build Coastguard Workername: \ 61*8d67ca89SAndroid Build Coastguard Worker cfi_startproc 62*8d67ca89SAndroid Build Coastguard Worker#endif 63*8d67ca89SAndroid Build Coastguard Worker 64*8d67ca89SAndroid Build Coastguard Worker#ifndef END 65*8d67ca89SAndroid Build Coastguard Worker# define END(name) \ 66*8d67ca89SAndroid Build Coastguard Worker cfi_endproc; \ 67*8d67ca89SAndroid Build Coastguard Worker .size name, .-name 68*8d67ca89SAndroid Build Coastguard Worker#endif 69*8d67ca89SAndroid Build Coastguard Worker 70*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG) \ 71*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (4); \ 72*8d67ca89SAndroid Build Coastguard Worker cfi_rel_offset (REG, 0) 73*8d67ca89SAndroid Build Coastguard Worker 74*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG) \ 75*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (-4); \ 76*8d67ca89SAndroid Build Coastguard Worker cfi_restore (REG) 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG) pushl REG; CFI_PUSH (REG) 79*8d67ca89SAndroid Build Coastguard Worker#define POP(REG) popl REG; CFI_POP (REG) 80*8d67ca89SAndroid Build Coastguard Worker 81*8d67ca89SAndroid Build Coastguard Worker#ifndef STRCPY 82*8d67ca89SAndroid Build Coastguard Worker# define STRCPY strcpy 83*8d67ca89SAndroid Build Coastguard Worker#endif 84*8d67ca89SAndroid Build Coastguard Worker 85*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPNCPY 86*8d67ca89SAndroid Build Coastguard Worker# define USE_AS_STRNCPY 87*8d67ca89SAndroid Build Coastguard Worker# define USE_AS_STPCPY 88*8d67ca89SAndroid Build Coastguard Worker#endif 89*8d67ca89SAndroid Build Coastguard Worker 90*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 91*8d67ca89SAndroid Build Coastguard Worker# define PARMS 16 92*8d67ca89SAndroid Build Coastguard Worker# define ENTRANCE PUSH(%ebx); PUSH(%esi); PUSH(%edi) 93*8d67ca89SAndroid Build Coastguard Worker# define RETURN POP(%edi); POP(%esi); POP(%ebx); ret; CFI_PUSH(%ebx); CFI_PUSH(%edi); CFI_PUSH(%edi); 94*8d67ca89SAndroid Build Coastguard Worker#else 95*8d67ca89SAndroid Build Coastguard Worker# define PARMS 12 96*8d67ca89SAndroid Build Coastguard Worker# define ENTRANCE PUSH(%esi); PUSH(%edi) 97*8d67ca89SAndroid Build Coastguard Worker# define RETURN POP(%edi); POP(%esi); ret; CFI_PUSH(%esi); CFI_PUSH(%edi); 98*8d67ca89SAndroid Build Coastguard Worker#endif 99*8d67ca89SAndroid Build Coastguard Worker 100*8d67ca89SAndroid Build Coastguard Worker#define STR1 PARMS 101*8d67ca89SAndroid Build Coastguard Worker#define STR2 STR1+4 102*8d67ca89SAndroid Build Coastguard Worker#define LEN STR2+4 103*8d67ca89SAndroid Build Coastguard Worker 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker#if (defined SHARED || defined __PIC__) 106*8d67ca89SAndroid Build Coastguard Worker# define JMPTBL(I, B) I - B 107*8d67ca89SAndroid Build Coastguard Worker 108*8d67ca89SAndroid Build Coastguard Worker/* Load an entry in a jump table into ECX and branch to it. TABLE is a 109*8d67ca89SAndroid Build Coastguard Worker jump table with relative offsets. INDEX is a register contains the 110*8d67ca89SAndroid Build Coastguard Worker index into the jump table. SCALE is the scale of INDEX. */ 111*8d67ca89SAndroid Build Coastguard Worker 112*8d67ca89SAndroid Build Coastguard Worker# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ 113*8d67ca89SAndroid Build Coastguard Worker /* We first load PC into ECX. */ \ 114*8d67ca89SAndroid Build Coastguard Worker call __x86.get_pc_thunk.cx; \ 115*8d67ca89SAndroid Build Coastguard Worker /* Get the address of the jump table. */ \ 116*8d67ca89SAndroid Build Coastguard Worker addl $(TABLE - .), %ecx; \ 117*8d67ca89SAndroid Build Coastguard Worker /* Get the entry and convert the relative offset to the \ 118*8d67ca89SAndroid Build Coastguard Worker absolute address. */ \ 119*8d67ca89SAndroid Build Coastguard Worker addl (%ecx,INDEX,SCALE), %ecx; \ 120*8d67ca89SAndroid Build Coastguard Worker /* We loaded the jump table and adjuested ECX. Go. */ \ 121*8d67ca89SAndroid Build Coastguard Worker jmp *%ecx 122*8d67ca89SAndroid Build Coastguard Worker#else 123*8d67ca89SAndroid Build Coastguard Worker# define JMPTBL(I, B) I 124*8d67ca89SAndroid Build Coastguard Worker 125*8d67ca89SAndroid Build Coastguard Worker/* Branch to an entry in a jump table. TABLE is a jump table with 126*8d67ca89SAndroid Build Coastguard Worker absolute offsets. INDEX is a register contains the index into the 127*8d67ca89SAndroid Build Coastguard Worker jump table. SCALE is the scale of INDEX. */ 128*8d67ca89SAndroid Build Coastguard Worker 129*8d67ca89SAndroid Build Coastguard Worker# define BRANCH_TO_JMPTBL_ENTRY(TABLE, INDEX, SCALE) \ 130*8d67ca89SAndroid Build Coastguard Worker jmp *TABLE(,INDEX,SCALE) 131*8d67ca89SAndroid Build Coastguard Worker#endif 132*8d67ca89SAndroid Build Coastguard Worker 133*8d67ca89SAndroid Build Coastguard Worker.text 134*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRCPY) 135*8d67ca89SAndroid Build Coastguard Worker ENTRANCE 136*8d67ca89SAndroid Build Coastguard Worker mov STR1(%esp), %edi 137*8d67ca89SAndroid Build Coastguard Worker mov STR2(%esp), %esi 138*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 139*8d67ca89SAndroid Build Coastguard Worker movl LEN(%esp), %ebx 140*8d67ca89SAndroid Build Coastguard Worker test %ebx, %ebx 141*8d67ca89SAndroid Build Coastguard Worker jz L(ExitZero) 142*8d67ca89SAndroid Build Coastguard Worker#endif 143*8d67ca89SAndroid Build Coastguard Worker 144*8d67ca89SAndroid Build Coastguard Worker mov %esi, %ecx 145*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STPCPY 146*8d67ca89SAndroid Build Coastguard Worker mov %edi, %eax /* save result */ 147*8d67ca89SAndroid Build Coastguard Worker#endif 148*8d67ca89SAndroid Build Coastguard Worker and $15, %ecx 149*8d67ca89SAndroid Build Coastguard Worker jz L(SourceStringAlignmentZero) 150*8d67ca89SAndroid Build Coastguard Worker 151*8d67ca89SAndroid Build Coastguard Worker and $-16, %esi 152*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 153*8d67ca89SAndroid Build Coastguard Worker pxor %xmm1, %xmm1 154*8d67ca89SAndroid Build Coastguard Worker 155*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%esi), %xmm1 156*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 157*8d67ca89SAndroid Build Coastguard Worker add %ecx, %ebx 158*8d67ca89SAndroid Build Coastguard Worker#endif 159*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %edx 160*8d67ca89SAndroid Build Coastguard Worker shr %cl, %edx 161*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 162*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 163*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 164*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesTailCase2OrCase3) 165*8d67ca89SAndroid Build Coastguard Worker#else 166*8d67ca89SAndroid Build Coastguard Worker cmp $17, %ebx 167*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesTailCase2OrCase3) 168*8d67ca89SAndroid Build Coastguard Worker#endif 169*8d67ca89SAndroid Build Coastguard Worker#endif 170*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 171*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesTail) 172*8d67ca89SAndroid Build Coastguard Worker 173*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%esi), %xmm0 174*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 175*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 176*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 177*8d67ca89SAndroid Build Coastguard Worker cmp $32, %ebx 178*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To32BytesCase2OrCase3) 179*8d67ca89SAndroid Build Coastguard Worker#else 180*8d67ca89SAndroid Build Coastguard Worker cmp $33, %ebx 181*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To32BytesCase2OrCase3) 182*8d67ca89SAndroid Build Coastguard Worker#endif 183*8d67ca89SAndroid Build Coastguard Worker#endif 184*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 185*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To32Bytes) 186*8d67ca89SAndroid Build Coastguard Worker 187*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi, %ecx), %xmm1 /* copy 16 bytes */ 188*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm1, (%edi) 189*8d67ca89SAndroid Build Coastguard Worker 190*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %edi 191*8d67ca89SAndroid Build Coastguard Worker mov %edi, %edx 192*8d67ca89SAndroid Build Coastguard Worker mov $16, %ecx 193*8d67ca89SAndroid Build Coastguard Worker and $15, %edx 194*8d67ca89SAndroid Build Coastguard Worker jz L(Align16Both) 195*8d67ca89SAndroid Build Coastguard Worker 196*8d67ca89SAndroid Build Coastguard Worker/* If source adress alignment != destination adress alignment */ 197*8d67ca89SAndroid Build Coastguard Worker .p2align 4 198*8d67ca89SAndroid Build Coastguard WorkerL(Unalign16Both): 199*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi, %ecx), %xmm1 200*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm2 201*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm1, (%edi, %ecx) 202*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 203*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 204*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 205*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 206*8d67ca89SAndroid Build Coastguard Worker sub $48, %ebx 207*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 208*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 209*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm2) 210*8d67ca89SAndroid Build Coastguard Worker#else 211*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 212*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 213*8d67ca89SAndroid Build Coastguard Worker#endif 214*8d67ca89SAndroid Build Coastguard Worker 215*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm3 216*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, (%edi, %ecx) 217*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 218*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 219*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 220*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 221*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 222*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 223*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 224*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm3) 225*8d67ca89SAndroid Build Coastguard Worker#else 226*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 227*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 228*8d67ca89SAndroid Build Coastguard Worker#endif 229*8d67ca89SAndroid Build Coastguard Worker 230*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm4 231*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm3, (%edi, %ecx) 232*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 233*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 234*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 235*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 236*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 237*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 238*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 239*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm4) 240*8d67ca89SAndroid Build Coastguard Worker#else 241*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 242*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 243*8d67ca89SAndroid Build Coastguard Worker#endif 244*8d67ca89SAndroid Build Coastguard Worker 245*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm1 246*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi, %ecx) 247*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 248*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 249*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 250*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 251*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 252*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 253*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 254*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm1) 255*8d67ca89SAndroid Build Coastguard Worker#else 256*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 257*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 258*8d67ca89SAndroid Build Coastguard Worker#endif 259*8d67ca89SAndroid Build Coastguard Worker 260*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm2 261*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm1, (%edi, %ecx) 262*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 263*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 264*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 265*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 266*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 267*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 268*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 269*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm2) 270*8d67ca89SAndroid Build Coastguard Worker#else 271*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 272*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 273*8d67ca89SAndroid Build Coastguard Worker#endif 274*8d67ca89SAndroid Build Coastguard Worker 275*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi, %ecx), %xmm3 276*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, (%edi, %ecx) 277*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 278*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 279*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 280*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 281*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 282*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 283*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 284*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm3) 285*8d67ca89SAndroid Build Coastguard Worker#else 286*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 287*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 288*8d67ca89SAndroid Build Coastguard Worker#endif 289*8d67ca89SAndroid Build Coastguard Worker 290*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm3, (%edi, %ecx) 291*8d67ca89SAndroid Build Coastguard Worker mov %esi, %edx 292*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi, %ecx), %esi 293*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %esi 294*8d67ca89SAndroid Build Coastguard Worker sub %esi, %edx 295*8d67ca89SAndroid Build Coastguard Worker sub %edx, %edi 296*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 297*8d67ca89SAndroid Build Coastguard Worker lea 64+64(%ebx, %edx), %ebx 298*8d67ca89SAndroid Build Coastguard Worker#endif 299*8d67ca89SAndroid Build Coastguard WorkerL(Unaligned64Loop): 300*8d67ca89SAndroid Build Coastguard Worker movaps (%esi), %xmm2 301*8d67ca89SAndroid Build Coastguard Worker movaps %xmm2, %xmm4 302*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi), %xmm5 303*8d67ca89SAndroid Build Coastguard Worker movaps 32(%esi), %xmm3 304*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 305*8d67ca89SAndroid Build Coastguard Worker movaps 48(%esi), %xmm7 306*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm2 307*8d67ca89SAndroid Build Coastguard Worker pminub %xmm7, %xmm3 308*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm3 309*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm3 310*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 311*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 312*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 313*8d67ca89SAndroid Build Coastguard Worker jbe L(UnalignedLeaveCase2OrCase3) 314*8d67ca89SAndroid Build Coastguard Worker#endif 315*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 316*8d67ca89SAndroid Build Coastguard Worker jnz L(Unaligned64Leave) 317*8d67ca89SAndroid Build Coastguard Worker 318*8d67ca89SAndroid Build Coastguard WorkerL(Unaligned64Loop_start): 319*8d67ca89SAndroid Build Coastguard Worker add $64, %edi 320*8d67ca89SAndroid Build Coastguard Worker add $64, %esi 321*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, -64(%edi) 322*8d67ca89SAndroid Build Coastguard Worker movaps (%esi), %xmm2 323*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, %xmm4 324*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, -48(%edi) 325*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi), %xmm5 326*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm2 327*8d67ca89SAndroid Build Coastguard Worker movaps 32(%esi), %xmm3 328*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, -32(%edi) 329*8d67ca89SAndroid Build Coastguard Worker movaps %xmm3, %xmm6 330*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm7, -16(%edi) 331*8d67ca89SAndroid Build Coastguard Worker movaps 48(%esi), %xmm7 332*8d67ca89SAndroid Build Coastguard Worker pminub %xmm7, %xmm3 333*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm3 334*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 335*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 336*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 337*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 338*8d67ca89SAndroid Build Coastguard Worker jbe L(UnalignedLeaveCase2OrCase3) 339*8d67ca89SAndroid Build Coastguard Worker#endif 340*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 341*8d67ca89SAndroid Build Coastguard Worker jz L(Unaligned64Loop_start) 342*8d67ca89SAndroid Build Coastguard Worker 343*8d67ca89SAndroid Build Coastguard WorkerL(Unaligned64Leave): 344*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 345*8d67ca89SAndroid Build Coastguard Worker pxor %xmm1, %xmm1 346*8d67ca89SAndroid Build Coastguard Worker 347*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 348*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm1 349*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 350*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 351*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 352*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnaligned_0) 353*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 354*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnaligned_16) 355*8d67ca89SAndroid Build Coastguard Worker 356*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 357*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm1 358*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 359*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 360*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 361*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnaligned_32) 362*8d67ca89SAndroid Build Coastguard Worker 363*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %edx 364*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 365*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, 16(%edi) 366*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, 32(%edi) 367*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 368*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 369*8d67ca89SAndroid Build Coastguard Worker lea 48(%edi, %edx), %eax 370*8d67ca89SAndroid Build Coastguard Worker#endif 371*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm7, 48(%edi) 372*8d67ca89SAndroid Build Coastguard Worker add $15, %ebx 373*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 374*8d67ca89SAndroid Build Coastguard Worker lea 49(%edi, %edx), %edi 375*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 376*8d67ca89SAndroid Build Coastguard Worker#else 377*8d67ca89SAndroid Build Coastguard Worker add $48, %esi 378*8d67ca89SAndroid Build Coastguard Worker add $48, %edi 379*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 380*8d67ca89SAndroid Build Coastguard Worker#endif 381*8d67ca89SAndroid Build Coastguard Worker 382*8d67ca89SAndroid Build Coastguard Worker/* If source adress alignment == destination adress alignment */ 383*8d67ca89SAndroid Build Coastguard Worker 384*8d67ca89SAndroid Build Coastguard WorkerL(SourceStringAlignmentZero): 385*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 386*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi), %xmm1 387*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 388*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 389*8d67ca89SAndroid Build Coastguard Worker 390*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 391*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 392*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ebx 393*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesTail1Case2OrCase3) 394*8d67ca89SAndroid Build Coastguard Worker#else 395*8d67ca89SAndroid Build Coastguard Worker cmp $17, %ebx 396*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesTail1Case2OrCase3) 397*8d67ca89SAndroid Build Coastguard Worker#endif 398*8d67ca89SAndroid Build Coastguard Worker#endif 399*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 400*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesTail1) 401*8d67ca89SAndroid Build Coastguard Worker 402*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%esi), %xmm0 403*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm1, (%edi) 404*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 405*8d67ca89SAndroid Build Coastguard Worker 406*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 407*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 408*8d67ca89SAndroid Build Coastguard Worker cmp $32, %ebx 409*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To32Bytes1Case2OrCase3) 410*8d67ca89SAndroid Build Coastguard Worker#else 411*8d67ca89SAndroid Build Coastguard Worker cmp $33, %ebx 412*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To32Bytes1Case2OrCase3) 413*8d67ca89SAndroid Build Coastguard Worker#endif 414*8d67ca89SAndroid Build Coastguard Worker#endif 415*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 416*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To32Bytes1) 417*8d67ca89SAndroid Build Coastguard Worker 418*8d67ca89SAndroid Build Coastguard Worker mov %edi, %edx 419*8d67ca89SAndroid Build Coastguard Worker mov $16, %ecx 420*8d67ca89SAndroid Build Coastguard Worker and $15, %edx 421*8d67ca89SAndroid Build Coastguard Worker jnz L(Unalign16Both) 422*8d67ca89SAndroid Build Coastguard Worker 423*8d67ca89SAndroid Build Coastguard WorkerL(Align16Both): 424*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi, %ecx), %xmm1 425*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm2 426*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, (%edi, %ecx) 427*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 428*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 429*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 430*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 431*8d67ca89SAndroid Build Coastguard Worker sub $48, %ebx 432*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 433*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 434*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm2) 435*8d67ca89SAndroid Build Coastguard Worker#else 436*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 437*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 438*8d67ca89SAndroid Build Coastguard Worker#endif 439*8d67ca89SAndroid Build Coastguard Worker 440*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm3 441*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, (%edi, %ecx) 442*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 443*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 444*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 445*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 446*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 447*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 448*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 449*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm3) 450*8d67ca89SAndroid Build Coastguard Worker#else 451*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 452*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 453*8d67ca89SAndroid Build Coastguard Worker#endif 454*8d67ca89SAndroid Build Coastguard Worker 455*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm4 456*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm3, (%edi, %ecx) 457*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 458*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 459*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 460*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 461*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 462*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 463*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 464*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm4) 465*8d67ca89SAndroid Build Coastguard Worker#else 466*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 467*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 468*8d67ca89SAndroid Build Coastguard Worker#endif 469*8d67ca89SAndroid Build Coastguard Worker 470*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm1 471*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi, %ecx) 472*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 473*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 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(CopyFrom1To16BytesCase2OrCase3) 478*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 479*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm1) 480*8d67ca89SAndroid Build Coastguard Worker#else 481*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 482*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 483*8d67ca89SAndroid Build Coastguard Worker#endif 484*8d67ca89SAndroid Build Coastguard Worker 485*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm2 486*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, (%edi, %ecx) 487*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm2, %xmm0 488*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 489*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 490*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 491*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 492*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 493*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 494*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm2) 495*8d67ca89SAndroid Build Coastguard Worker#else 496*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 497*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 498*8d67ca89SAndroid Build Coastguard Worker#endif 499*8d67ca89SAndroid Build Coastguard Worker 500*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi, %ecx), %xmm3 501*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, (%edi, %ecx) 502*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 503*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 504*8d67ca89SAndroid Build Coastguard Worker lea 16(%ecx), %ecx 505*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 506*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 507*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 508*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 509*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm3) 510*8d67ca89SAndroid Build Coastguard Worker#else 511*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 512*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes) 513*8d67ca89SAndroid Build Coastguard Worker#endif 514*8d67ca89SAndroid Build Coastguard Worker 515*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm3, (%edi, %ecx) 516*8d67ca89SAndroid Build Coastguard Worker mov %esi, %edx 517*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi, %ecx), %esi 518*8d67ca89SAndroid Build Coastguard Worker and $-0x40, %esi 519*8d67ca89SAndroid Build Coastguard Worker sub %esi, %edx 520*8d67ca89SAndroid Build Coastguard Worker sub %edx, %edi 521*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 522*8d67ca89SAndroid Build Coastguard Worker lea 64+64(%ebx, %edx), %ebx 523*8d67ca89SAndroid Build Coastguard Worker#endif 524*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Loop): 525*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi), %xmm2 526*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, %xmm4 527*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi), %xmm5 528*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 529*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm3, %xmm6 530*8d67ca89SAndroid Build Coastguard Worker movaps 48(%esi), %xmm7 531*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm2 532*8d67ca89SAndroid Build Coastguard Worker pminub %xmm7, %xmm3 533*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm3 534*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm3 535*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 536*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 537*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 538*8d67ca89SAndroid Build Coastguard Worker jbe L(AlignedLeaveCase2OrCase3) 539*8d67ca89SAndroid Build Coastguard Worker#endif 540*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 541*8d67ca89SAndroid Build Coastguard Worker jnz L(Aligned64Leave) 542*8d67ca89SAndroid Build Coastguard Worker 543*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Loop_start): 544*8d67ca89SAndroid Build Coastguard Worker add $64, %esi 545*8d67ca89SAndroid Build Coastguard Worker add $64, %edi 546*8d67ca89SAndroid Build Coastguard Worker movaps %xmm4, -64(%edi) 547*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi), %xmm2 548*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, %xmm4 549*8d67ca89SAndroid Build Coastguard Worker movaps %xmm5, -48(%edi) 550*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi), %xmm5 551*8d67ca89SAndroid Build Coastguard Worker pminub %xmm5, %xmm2 552*8d67ca89SAndroid Build Coastguard Worker movaps 32(%esi), %xmm3 553*8d67ca89SAndroid Build Coastguard Worker movaps %xmm6, -32(%edi) 554*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm3, %xmm6 555*8d67ca89SAndroid Build Coastguard Worker movaps %xmm7, -16(%edi) 556*8d67ca89SAndroid Build Coastguard Worker movaps 48(%esi), %xmm7 557*8d67ca89SAndroid Build Coastguard Worker pminub %xmm7, %xmm3 558*8d67ca89SAndroid Build Coastguard Worker pminub %xmm2, %xmm3 559*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm3, %xmm0 560*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 561*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 562*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 563*8d67ca89SAndroid Build Coastguard Worker jbe L(AlignedLeaveCase2OrCase3) 564*8d67ca89SAndroid Build Coastguard Worker#endif 565*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 566*8d67ca89SAndroid Build Coastguard Worker jz L(Aligned64Loop_start) 567*8d67ca89SAndroid Build Coastguard Worker 568*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64Leave): 569*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 570*8d67ca89SAndroid Build Coastguard Worker pxor %xmm1, %xmm1 571*8d67ca89SAndroid Build Coastguard Worker 572*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 573*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm1 574*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 575*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 576*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 577*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes_0) 578*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 579*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes_16) 580*8d67ca89SAndroid Build Coastguard Worker 581*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 582*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm1 583*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 584*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 585*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 586*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16Bytes_32) 587*8d67ca89SAndroid Build Coastguard Worker 588*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %edx 589*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 590*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, 16(%edi) 591*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm6, 32(%edi) 592*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 593*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 594*8d67ca89SAndroid Build Coastguard Worker lea 48(%edi, %edx), %eax 595*8d67ca89SAndroid Build Coastguard Worker#endif 596*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm7, 48(%edi) 597*8d67ca89SAndroid Build Coastguard Worker add $15, %ebx 598*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 599*8d67ca89SAndroid Build Coastguard Worker lea 49(%edi, %edx), %edi 600*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 601*8d67ca89SAndroid Build Coastguard Worker#else 602*8d67ca89SAndroid Build Coastguard Worker add $48, %esi 603*8d67ca89SAndroid Build Coastguard Worker add $48, %edi 604*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 605*8d67ca89SAndroid Build Coastguard Worker#endif 606*8d67ca89SAndroid Build Coastguard Worker 607*8d67ca89SAndroid Build Coastguard Worker/*----------------------------------------------------*/ 608*8d67ca89SAndroid Build Coastguard Worker 609*8d67ca89SAndroid Build Coastguard Worker/* Case1 */ 610*8d67ca89SAndroid Build Coastguard Worker#ifndef USE_AS_STRNCPY 611*8d67ca89SAndroid Build Coastguard Worker .p2align 4 612*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes): 613*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 614*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 615*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 616*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 617*8d67ca89SAndroid Build Coastguard Worker#endif 618*8d67ca89SAndroid Build Coastguard Worker .p2align 4 619*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTail): 620*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 621*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 622*8d67ca89SAndroid Build Coastguard Worker#endif 623*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 624*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 625*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 626*8d67ca89SAndroid Build Coastguard Worker 627*8d67ca89SAndroid Build Coastguard Worker .p2align 4 628*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To32Bytes1): 629*8d67ca89SAndroid Build Coastguard Worker add $16, %esi 630*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 631*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 632*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 633*8d67ca89SAndroid Build Coastguard Worker#endif 634*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTail1): 635*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 636*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 637*8d67ca89SAndroid Build Coastguard Worker 638*8d67ca89SAndroid Build Coastguard Worker .p2align 4 639*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To32Bytes): 640*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 641*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 642*8d67ca89SAndroid Build Coastguard Worker#endif 643*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 644*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 645*8d67ca89SAndroid Build Coastguard Worker add $16, %edx 646*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %edx 647*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 648*8d67ca89SAndroid Build Coastguard Worker 649*8d67ca89SAndroid Build Coastguard Worker .p2align 4 650*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes_0): 651*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 652*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 653*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 654*8d67ca89SAndroid Build Coastguard Worker lea (%edi, %edx), %eax 655*8d67ca89SAndroid Build Coastguard Worker#endif 656*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 657*8d67ca89SAndroid Build Coastguard Worker add $63, %ebx 658*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 659*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi, %edx), %edi 660*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 661*8d67ca89SAndroid Build Coastguard Worker#else 662*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 663*8d67ca89SAndroid Build Coastguard Worker#endif 664*8d67ca89SAndroid Build Coastguard Worker 665*8d67ca89SAndroid Build Coastguard Worker .p2align 4 666*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes_16): 667*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %edx 668*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 669*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 670*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 671*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi, %edx), %eax 672*8d67ca89SAndroid Build Coastguard Worker#endif 673*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, 16(%edi) 674*8d67ca89SAndroid Build Coastguard Worker add $47, %ebx 675*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 676*8d67ca89SAndroid Build Coastguard Worker lea 17(%edi, %edx), %edi 677*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 678*8d67ca89SAndroid Build Coastguard Worker#else 679*8d67ca89SAndroid Build Coastguard Worker add $16, %esi 680*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 681*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 682*8d67ca89SAndroid Build Coastguard Worker#endif 683*8d67ca89SAndroid Build Coastguard Worker 684*8d67ca89SAndroid Build Coastguard Worker .p2align 4 685*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16Bytes_32): 686*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 687*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 688*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, 16(%edi) 689*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 690*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 691*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi, %edx), %eax 692*8d67ca89SAndroid Build Coastguard Worker#endif 693*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm6, 32(%edi) 694*8d67ca89SAndroid Build Coastguard Worker add $31, %ebx 695*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 696*8d67ca89SAndroid Build Coastguard Worker lea 33(%edi, %edx), %edi 697*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 698*8d67ca89SAndroid Build Coastguard Worker#else 699*8d67ca89SAndroid Build Coastguard Worker add $32, %esi 700*8d67ca89SAndroid Build Coastguard Worker add $32, %edi 701*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 702*8d67ca89SAndroid Build Coastguard Worker#endif 703*8d67ca89SAndroid Build Coastguard Worker 704*8d67ca89SAndroid Build Coastguard Worker .p2align 4 705*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnaligned_0): 706*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 707*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 708*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 709*8d67ca89SAndroid Build Coastguard Worker lea (%edi, %edx), %eax 710*8d67ca89SAndroid Build Coastguard Worker#endif 711*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 712*8d67ca89SAndroid Build Coastguard Worker add $63, %ebx 713*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 714*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi, %edx), %edi 715*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 716*8d67ca89SAndroid Build Coastguard Worker#else 717*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 718*8d67ca89SAndroid Build Coastguard Worker#endif 719*8d67ca89SAndroid Build Coastguard Worker 720*8d67ca89SAndroid Build Coastguard Worker .p2align 4 721*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnaligned_16): 722*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %edx 723*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 724*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 725*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 726*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi, %edx), %eax 727*8d67ca89SAndroid Build Coastguard Worker#endif 728*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, 16(%edi) 729*8d67ca89SAndroid Build Coastguard Worker add $47, %ebx 730*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 731*8d67ca89SAndroid Build Coastguard Worker lea 17(%edi, %edx), %edi 732*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 733*8d67ca89SAndroid Build Coastguard Worker#else 734*8d67ca89SAndroid Build Coastguard Worker add $16, %esi 735*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 736*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 737*8d67ca89SAndroid Build Coastguard Worker#endif 738*8d67ca89SAndroid Build Coastguard Worker 739*8d67ca89SAndroid Build Coastguard Worker .p2align 4 740*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnaligned_32): 741*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 742*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 743*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, 16(%edi) 744*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 745*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 746*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi, %edx), %eax 747*8d67ca89SAndroid Build Coastguard Worker#endif 748*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, 32(%edi) 749*8d67ca89SAndroid Build Coastguard Worker add $31, %ebx 750*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 751*8d67ca89SAndroid Build Coastguard Worker lea 33(%edi, %edx), %edi 752*8d67ca89SAndroid Build Coastguard Worker jmp L(StrncpyFillTailWithZero) 753*8d67ca89SAndroid Build Coastguard Worker#else 754*8d67ca89SAndroid Build Coastguard Worker add $32, %esi 755*8d67ca89SAndroid Build Coastguard Worker add $32, %edi 756*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 757*8d67ca89SAndroid Build Coastguard Worker#endif 758*8d67ca89SAndroid Build Coastguard Worker 759*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 760*8d67ca89SAndroid Build Coastguard Worker .p2align 4 761*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm6): 762*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm6, (%edi, %ecx) 763*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 764*8d67ca89SAndroid Build Coastguard Worker 765*8d67ca89SAndroid Build Coastguard Worker .p2align 4 766*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm5): 767*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, (%edi, %ecx) 768*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 769*8d67ca89SAndroid Build Coastguard Worker 770*8d67ca89SAndroid Build Coastguard Worker .p2align 4 771*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm4): 772*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi, %ecx) 773*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 774*8d67ca89SAndroid Build Coastguard Worker 775*8d67ca89SAndroid Build Coastguard Worker .p2align 4 776*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm3): 777*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm3, (%edi, %ecx) 778*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 779*8d67ca89SAndroid Build Coastguard Worker 780*8d67ca89SAndroid Build Coastguard Worker .p2align 4 781*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm2): 782*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm2, (%edi, %ecx) 783*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 784*8d67ca89SAndroid Build Coastguard Worker 785*8d67ca89SAndroid Build Coastguard Worker .p2align 4 786*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmm1): 787*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, (%edi, %ecx) 788*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 789*8d67ca89SAndroid Build Coastguard Worker 790*8d67ca89SAndroid Build Coastguard Worker .p2align 4 791*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm6): 792*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, (%edi, %ecx) 793*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 794*8d67ca89SAndroid Build Coastguard Worker 795*8d67ca89SAndroid Build Coastguard Worker .p2align 4 796*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm5): 797*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, (%edi, %ecx) 798*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 799*8d67ca89SAndroid Build Coastguard Worker 800*8d67ca89SAndroid Build Coastguard Worker .p2align 4 801*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm4): 802*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi, %ecx) 803*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 804*8d67ca89SAndroid Build Coastguard Worker 805*8d67ca89SAndroid Build Coastguard Worker .p2align 4 806*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm3): 807*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm3, (%edi, %ecx) 808*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 809*8d67ca89SAndroid Build Coastguard Worker 810*8d67ca89SAndroid Build Coastguard Worker .p2align 4 811*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm1): 812*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm1, (%edi, %ecx) 813*8d67ca89SAndroid Build Coastguard Worker jmp L(CopyFrom1To16BytesXmmExit) 814*8d67ca89SAndroid Build Coastguard Worker 815*8d67ca89SAndroid Build Coastguard Worker .p2align 4 816*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesExit): 817*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitTable), %edx, 4) 818*8d67ca89SAndroid Build Coastguard Worker 819*8d67ca89SAndroid Build Coastguard Worker/* Case2 */ 820*8d67ca89SAndroid Build Coastguard Worker 821*8d67ca89SAndroid Build Coastguard Worker .p2align 4 822*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2): 823*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 824*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 825*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 826*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 827*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 828*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 829*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 830*8d67ca89SAndroid Build Coastguard Worker 831*8d67ca89SAndroid Build Coastguard Worker .p2align 4 832*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To32BytesCase2): 833*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 834*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 835*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 836*8d67ca89SAndroid Build Coastguard Worker add $16, %edx 837*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %edx 838*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 839*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 840*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 841*8d67ca89SAndroid Build Coastguard Worker 842*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTailCase2): 843*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 844*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 845*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 846*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 847*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 848*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 849*8d67ca89SAndroid Build Coastguard Worker 850*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTail1Case2): 851*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 852*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 853*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 854*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 855*8d67ca89SAndroid Build Coastguard Worker 856*8d67ca89SAndroid Build Coastguard Worker/* Case2 or Case3, Case3 */ 857*8d67ca89SAndroid Build Coastguard Worker 858*8d67ca89SAndroid Build Coastguard Worker .p2align 4 859*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase2OrCase3): 860*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 861*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesCase2) 862*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesCase3): 863*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 864*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 865*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 866*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 867*8d67ca89SAndroid Build Coastguard Worker 868*8d67ca89SAndroid Build Coastguard Worker .p2align 4 869*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To32BytesCase2OrCase3): 870*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 871*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To32BytesCase2) 872*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 873*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 874*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 875*8d67ca89SAndroid Build Coastguard Worker 876*8d67ca89SAndroid Build Coastguard Worker .p2align 4 877*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTailCase2OrCase3): 878*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 879*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesTailCase2) 880*8d67ca89SAndroid Build Coastguard Worker sub %ecx, %ebx 881*8d67ca89SAndroid Build Coastguard Worker add %ecx, %esi 882*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 883*8d67ca89SAndroid Build Coastguard Worker 884*8d67ca89SAndroid Build Coastguard Worker .p2align 4 885*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To32Bytes1Case2OrCase3): 886*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 887*8d67ca89SAndroid Build Coastguard Worker add $16, %esi 888*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 889*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesTail1Case2OrCase3): 890*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 891*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesTail1Case2) 892*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 893*8d67ca89SAndroid Build Coastguard Worker 894*8d67ca89SAndroid Build Coastguard Worker#endif 895*8d67ca89SAndroid Build Coastguard Worker 896*8d67ca89SAndroid Build Coastguard Worker/*-----------------------------------------------------------------*/ 897*8d67ca89SAndroid Build Coastguard Worker .p2align 4 898*8d67ca89SAndroid Build Coastguard WorkerL(Exit0): 899*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 900*8d67ca89SAndroid Build Coastguard Worker mov %edi, %eax 901*8d67ca89SAndroid Build Coastguard Worker#endif 902*8d67ca89SAndroid Build Coastguard Worker RETURN 903*8d67ca89SAndroid Build Coastguard Worker 904*8d67ca89SAndroid Build Coastguard Worker .p2align 4 905*8d67ca89SAndroid Build Coastguard WorkerL(Exit1): 906*8d67ca89SAndroid Build Coastguard Worker movb %dh, (%edi) 907*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 908*8d67ca89SAndroid Build Coastguard Worker lea (%edi), %eax 909*8d67ca89SAndroid Build Coastguard Worker#endif 910*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 911*8d67ca89SAndroid Build Coastguard Worker sub $1, %ebx 912*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi), %edi 913*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 914*8d67ca89SAndroid Build Coastguard Worker#endif 915*8d67ca89SAndroid Build Coastguard Worker RETURN 916*8d67ca89SAndroid Build Coastguard Worker 917*8d67ca89SAndroid Build Coastguard Worker .p2align 4 918*8d67ca89SAndroid Build Coastguard WorkerL(Exit2): 919*8d67ca89SAndroid Build Coastguard Worker movw (%esi), %dx 920*8d67ca89SAndroid Build Coastguard Worker movw %dx, (%edi) 921*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 922*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi), %eax 923*8d67ca89SAndroid Build Coastguard Worker#endif 924*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 925*8d67ca89SAndroid Build Coastguard Worker sub $2, %ebx 926*8d67ca89SAndroid Build Coastguard Worker lea 2(%edi), %edi 927*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 928*8d67ca89SAndroid Build Coastguard Worker#endif 929*8d67ca89SAndroid Build Coastguard Worker RETURN 930*8d67ca89SAndroid Build Coastguard Worker 931*8d67ca89SAndroid Build Coastguard Worker .p2align 4 932*8d67ca89SAndroid Build Coastguard WorkerL(Exit3): 933*8d67ca89SAndroid Build Coastguard Worker movw (%esi), %cx 934*8d67ca89SAndroid Build Coastguard Worker movw %cx, (%edi) 935*8d67ca89SAndroid Build Coastguard Worker movb %dh, 2(%edi) 936*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 937*8d67ca89SAndroid Build Coastguard Worker lea 2(%edi), %eax 938*8d67ca89SAndroid Build Coastguard Worker#endif 939*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 940*8d67ca89SAndroid Build Coastguard Worker sub $3, %ebx 941*8d67ca89SAndroid Build Coastguard Worker lea 3(%edi), %edi 942*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 943*8d67ca89SAndroid Build Coastguard Worker#endif 944*8d67ca89SAndroid Build Coastguard Worker RETURN 945*8d67ca89SAndroid Build Coastguard Worker 946*8d67ca89SAndroid Build Coastguard Worker .p2align 4 947*8d67ca89SAndroid Build Coastguard WorkerL(Exit4): 948*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %edx 949*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%edi) 950*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 951*8d67ca89SAndroid Build Coastguard Worker lea 3(%edi), %eax 952*8d67ca89SAndroid Build Coastguard Worker#endif 953*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 954*8d67ca89SAndroid Build Coastguard Worker sub $4, %ebx 955*8d67ca89SAndroid Build Coastguard Worker lea 4(%edi), %edi 956*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 957*8d67ca89SAndroid Build Coastguard Worker#endif 958*8d67ca89SAndroid Build Coastguard Worker RETURN 959*8d67ca89SAndroid Build Coastguard Worker 960*8d67ca89SAndroid Build Coastguard Worker .p2align 4 961*8d67ca89SAndroid Build Coastguard WorkerL(Exit5): 962*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 963*8d67ca89SAndroid Build Coastguard Worker movb %dh, 4(%edi) 964*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 965*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 966*8d67ca89SAndroid Build Coastguard Worker lea 4(%edi), %eax 967*8d67ca89SAndroid Build Coastguard Worker#endif 968*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 969*8d67ca89SAndroid Build Coastguard Worker sub $5, %ebx 970*8d67ca89SAndroid Build Coastguard Worker lea 5(%edi), %edi 971*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 972*8d67ca89SAndroid Build Coastguard Worker#endif 973*8d67ca89SAndroid Build Coastguard Worker RETURN 974*8d67ca89SAndroid Build Coastguard Worker 975*8d67ca89SAndroid Build Coastguard Worker .p2align 4 976*8d67ca89SAndroid Build Coastguard WorkerL(Exit6): 977*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 978*8d67ca89SAndroid Build Coastguard Worker movw 4(%esi), %dx 979*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 980*8d67ca89SAndroid Build Coastguard Worker movw %dx, 4(%edi) 981*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 982*8d67ca89SAndroid Build Coastguard Worker lea 5(%edi), %eax 983*8d67ca89SAndroid Build Coastguard Worker#endif 984*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 985*8d67ca89SAndroid Build Coastguard Worker sub $6, %ebx 986*8d67ca89SAndroid Build Coastguard Worker lea 6(%edi), %edi 987*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 988*8d67ca89SAndroid Build Coastguard Worker#endif 989*8d67ca89SAndroid Build Coastguard Worker RETURN 990*8d67ca89SAndroid Build Coastguard Worker 991*8d67ca89SAndroid Build Coastguard Worker .p2align 4 992*8d67ca89SAndroid Build Coastguard WorkerL(Exit7): 993*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 994*8d67ca89SAndroid Build Coastguard Worker movl 3(%esi), %edx 995*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 996*8d67ca89SAndroid Build Coastguard Worker movl %edx, 3(%edi) 997*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 998*8d67ca89SAndroid Build Coastguard Worker lea 6(%edi), %eax 999*8d67ca89SAndroid Build Coastguard Worker#endif 1000*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1001*8d67ca89SAndroid Build Coastguard Worker sub $7, %ebx 1002*8d67ca89SAndroid Build Coastguard Worker lea 7(%edi), %edi 1003*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1004*8d67ca89SAndroid Build Coastguard Worker#endif 1005*8d67ca89SAndroid Build Coastguard Worker RETURN 1006*8d67ca89SAndroid Build Coastguard Worker 1007*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1008*8d67ca89SAndroid Build Coastguard WorkerL(Exit8): 1009*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1010*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1011*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1012*8d67ca89SAndroid Build Coastguard Worker lea 7(%edi), %eax 1013*8d67ca89SAndroid Build Coastguard Worker#endif 1014*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1015*8d67ca89SAndroid Build Coastguard Worker sub $8, %ebx 1016*8d67ca89SAndroid Build Coastguard Worker lea 8(%edi), %edi 1017*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1018*8d67ca89SAndroid Build Coastguard Worker#endif 1019*8d67ca89SAndroid Build Coastguard Worker RETURN 1020*8d67ca89SAndroid Build Coastguard Worker 1021*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1022*8d67ca89SAndroid Build Coastguard WorkerL(Exit9): 1023*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1024*8d67ca89SAndroid Build Coastguard Worker movb %dh, 8(%edi) 1025*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1026*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1027*8d67ca89SAndroid Build Coastguard Worker lea 8(%edi), %eax 1028*8d67ca89SAndroid Build Coastguard Worker#endif 1029*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1030*8d67ca89SAndroid Build Coastguard Worker sub $9, %ebx 1031*8d67ca89SAndroid Build Coastguard Worker lea 9(%edi), %edi 1032*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1033*8d67ca89SAndroid Build Coastguard Worker#endif 1034*8d67ca89SAndroid Build Coastguard Worker RETURN 1035*8d67ca89SAndroid Build Coastguard Worker 1036*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1037*8d67ca89SAndroid Build Coastguard WorkerL(Exit10): 1038*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1039*8d67ca89SAndroid Build Coastguard Worker movw 8(%esi), %dx 1040*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1041*8d67ca89SAndroid Build Coastguard Worker movw %dx, 8(%edi) 1042*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1043*8d67ca89SAndroid Build Coastguard Worker lea 9(%edi), %eax 1044*8d67ca89SAndroid Build Coastguard Worker#endif 1045*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1046*8d67ca89SAndroid Build Coastguard Worker sub $10, %ebx 1047*8d67ca89SAndroid Build Coastguard Worker lea 10(%edi), %edi 1048*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1049*8d67ca89SAndroid Build Coastguard Worker#endif 1050*8d67ca89SAndroid Build Coastguard Worker RETURN 1051*8d67ca89SAndroid Build Coastguard Worker 1052*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1053*8d67ca89SAndroid Build Coastguard WorkerL(Exit11): 1054*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1055*8d67ca89SAndroid Build Coastguard Worker movl 7(%esi), %edx 1056*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1057*8d67ca89SAndroid Build Coastguard Worker movl %edx, 7(%edi) 1058*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1059*8d67ca89SAndroid Build Coastguard Worker lea 10(%edi), %eax 1060*8d67ca89SAndroid Build Coastguard Worker#endif 1061*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1062*8d67ca89SAndroid Build Coastguard Worker sub $11, %ebx 1063*8d67ca89SAndroid Build Coastguard Worker lea 11(%edi), %edi 1064*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1065*8d67ca89SAndroid Build Coastguard Worker#endif 1066*8d67ca89SAndroid Build Coastguard Worker RETURN 1067*8d67ca89SAndroid Build Coastguard Worker 1068*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1069*8d67ca89SAndroid Build Coastguard WorkerL(Exit12): 1070*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1071*8d67ca89SAndroid Build Coastguard Worker movl 8(%esi), %edx 1072*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1073*8d67ca89SAndroid Build Coastguard Worker movl %edx, 8(%edi) 1074*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1075*8d67ca89SAndroid Build Coastguard Worker lea 11(%edi), %eax 1076*8d67ca89SAndroid Build Coastguard Worker#endif 1077*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1078*8d67ca89SAndroid Build Coastguard Worker sub $12, %ebx 1079*8d67ca89SAndroid Build Coastguard Worker lea 12(%edi), %edi 1080*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1081*8d67ca89SAndroid Build Coastguard Worker#endif 1082*8d67ca89SAndroid Build Coastguard Worker RETURN 1083*8d67ca89SAndroid Build Coastguard Worker 1084*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1085*8d67ca89SAndroid Build Coastguard WorkerL(Exit13): 1086*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1087*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%esi), %xmm1 1088*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1089*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edi) 1090*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1091*8d67ca89SAndroid Build Coastguard Worker lea 12(%edi), %eax 1092*8d67ca89SAndroid Build Coastguard Worker#endif 1093*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1094*8d67ca89SAndroid Build Coastguard Worker sub $13, %ebx 1095*8d67ca89SAndroid Build Coastguard Worker lea 13(%edi), %edi 1096*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1097*8d67ca89SAndroid Build Coastguard Worker#endif 1098*8d67ca89SAndroid Build Coastguard Worker RETURN 1099*8d67ca89SAndroid Build Coastguard Worker 1100*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1101*8d67ca89SAndroid Build Coastguard WorkerL(Exit14): 1102*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1103*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%esi), %xmm1 1104*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1105*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edi) 1106*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1107*8d67ca89SAndroid Build Coastguard Worker lea 13(%edi), %eax 1108*8d67ca89SAndroid Build Coastguard Worker#endif 1109*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1110*8d67ca89SAndroid Build Coastguard Worker sub $14, %ebx 1111*8d67ca89SAndroid Build Coastguard Worker lea 14(%edi), %edi 1112*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1113*8d67ca89SAndroid Build Coastguard Worker#endif 1114*8d67ca89SAndroid Build Coastguard Worker RETURN 1115*8d67ca89SAndroid Build Coastguard Worker 1116*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1117*8d67ca89SAndroid Build Coastguard WorkerL(Exit15): 1118*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1119*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%esi), %xmm1 1120*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1121*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edi) 1122*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1123*8d67ca89SAndroid Build Coastguard Worker lea 14(%edi), %eax 1124*8d67ca89SAndroid Build Coastguard Worker#endif 1125*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1126*8d67ca89SAndroid Build Coastguard Worker sub $15, %ebx 1127*8d67ca89SAndroid Build Coastguard Worker lea 15(%edi), %edi 1128*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1129*8d67ca89SAndroid Build Coastguard Worker#endif 1130*8d67ca89SAndroid Build Coastguard Worker RETURN 1131*8d67ca89SAndroid Build Coastguard Worker 1132*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1133*8d67ca89SAndroid Build Coastguard WorkerL(Exit16): 1134*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1135*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1136*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1137*8d67ca89SAndroid Build Coastguard Worker lea 15(%edi), %eax 1138*8d67ca89SAndroid Build Coastguard Worker#endif 1139*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1140*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1141*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi), %edi 1142*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1143*8d67ca89SAndroid Build Coastguard Worker#endif 1144*8d67ca89SAndroid Build Coastguard Worker RETURN 1145*8d67ca89SAndroid Build Coastguard Worker 1146*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1147*8d67ca89SAndroid Build Coastguard WorkerL(Exit17): 1148*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1149*8d67ca89SAndroid Build Coastguard Worker xor %cl, %cl 1150*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1151*8d67ca89SAndroid Build Coastguard Worker movb %cl, 16(%edi) 1152*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1153*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi), %eax 1154*8d67ca89SAndroid Build Coastguard Worker#endif 1155*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1156*8d67ca89SAndroid Build Coastguard Worker sub $17, %ebx 1157*8d67ca89SAndroid Build Coastguard Worker lea 17(%edi), %edi 1158*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1159*8d67ca89SAndroid Build Coastguard Worker#endif 1160*8d67ca89SAndroid Build Coastguard Worker RETURN 1161*8d67ca89SAndroid Build Coastguard Worker 1162*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1163*8d67ca89SAndroid Build Coastguard WorkerL(Exit18): 1164*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1165*8d67ca89SAndroid Build Coastguard Worker movw 16(%esi), %cx 1166*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1167*8d67ca89SAndroid Build Coastguard Worker movw %cx, 16(%edi) 1168*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1169*8d67ca89SAndroid Build Coastguard Worker lea 17(%edi), %eax 1170*8d67ca89SAndroid Build Coastguard Worker#endif 1171*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1172*8d67ca89SAndroid Build Coastguard Worker sub $18, %ebx 1173*8d67ca89SAndroid Build Coastguard Worker lea 18(%edi), %edi 1174*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1175*8d67ca89SAndroid Build Coastguard Worker#endif 1176*8d67ca89SAndroid Build Coastguard Worker RETURN 1177*8d67ca89SAndroid Build Coastguard Worker 1178*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1179*8d67ca89SAndroid Build Coastguard WorkerL(Exit19): 1180*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1181*8d67ca89SAndroid Build Coastguard Worker movl 15(%esi), %ecx 1182*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1183*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 15(%edi) 1184*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1185*8d67ca89SAndroid Build Coastguard Worker lea 18(%edi), %eax 1186*8d67ca89SAndroid Build Coastguard Worker#endif 1187*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1188*8d67ca89SAndroid Build Coastguard Worker sub $19, %ebx 1189*8d67ca89SAndroid Build Coastguard Worker lea 19(%edi), %edi 1190*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1191*8d67ca89SAndroid Build Coastguard Worker#endif 1192*8d67ca89SAndroid Build Coastguard Worker RETURN 1193*8d67ca89SAndroid Build Coastguard Worker 1194*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1195*8d67ca89SAndroid Build Coastguard WorkerL(Exit20): 1196*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1197*8d67ca89SAndroid Build Coastguard Worker movl 16(%esi), %ecx 1198*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1199*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 16(%edi) 1200*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1201*8d67ca89SAndroid Build Coastguard Worker lea 19(%edi), %eax 1202*8d67ca89SAndroid Build Coastguard Worker#endif 1203*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1204*8d67ca89SAndroid Build Coastguard Worker sub $20, %ebx 1205*8d67ca89SAndroid Build Coastguard Worker lea 20(%edi), %edi 1206*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1207*8d67ca89SAndroid Build Coastguard Worker#endif 1208*8d67ca89SAndroid Build Coastguard Worker RETURN 1209*8d67ca89SAndroid Build Coastguard Worker 1210*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1211*8d67ca89SAndroid Build Coastguard WorkerL(Exit21): 1212*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1213*8d67ca89SAndroid Build Coastguard Worker movl 16(%esi), %ecx 1214*8d67ca89SAndroid Build Coastguard Worker xor %dl, %dl 1215*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1216*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 16(%edi) 1217*8d67ca89SAndroid Build Coastguard Worker movb %dl, 20(%edi) 1218*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1219*8d67ca89SAndroid Build Coastguard Worker lea 20(%edi), %eax 1220*8d67ca89SAndroid Build Coastguard Worker#endif 1221*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1222*8d67ca89SAndroid Build Coastguard Worker sub $21, %ebx 1223*8d67ca89SAndroid Build Coastguard Worker lea 21(%edi), %edi 1224*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1225*8d67ca89SAndroid Build Coastguard Worker#endif 1226*8d67ca89SAndroid Build Coastguard Worker RETURN 1227*8d67ca89SAndroid Build Coastguard Worker 1228*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1229*8d67ca89SAndroid Build Coastguard WorkerL(Exit22): 1230*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1231*8d67ca89SAndroid Build Coastguard Worker movlpd 14(%esi), %xmm3 1232*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1233*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm3, 14(%edi) 1234*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1235*8d67ca89SAndroid Build Coastguard Worker lea 21(%edi), %eax 1236*8d67ca89SAndroid Build Coastguard Worker#endif 1237*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1238*8d67ca89SAndroid Build Coastguard Worker sub $22, %ebx 1239*8d67ca89SAndroid Build Coastguard Worker lea 22(%edi), %edi 1240*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1241*8d67ca89SAndroid Build Coastguard Worker#endif 1242*8d67ca89SAndroid Build Coastguard Worker RETURN 1243*8d67ca89SAndroid Build Coastguard Worker 1244*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1245*8d67ca89SAndroid Build Coastguard WorkerL(Exit23): 1246*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1247*8d67ca89SAndroid Build Coastguard Worker movlpd 15(%esi), %xmm3 1248*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1249*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm3, 15(%edi) 1250*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1251*8d67ca89SAndroid Build Coastguard Worker lea 22(%edi), %eax 1252*8d67ca89SAndroid Build Coastguard Worker#endif 1253*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1254*8d67ca89SAndroid Build Coastguard Worker sub $23, %ebx 1255*8d67ca89SAndroid Build Coastguard Worker lea 23(%edi), %edi 1256*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1257*8d67ca89SAndroid Build Coastguard Worker#endif 1258*8d67ca89SAndroid Build Coastguard Worker RETURN 1259*8d67ca89SAndroid Build Coastguard Worker 1260*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1261*8d67ca89SAndroid Build Coastguard WorkerL(Exit24): 1262*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1263*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1264*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1265*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1266*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1267*8d67ca89SAndroid Build Coastguard Worker lea 23(%edi), %eax 1268*8d67ca89SAndroid Build Coastguard Worker#endif 1269*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1270*8d67ca89SAndroid Build Coastguard Worker sub $24, %ebx 1271*8d67ca89SAndroid Build Coastguard Worker lea 24(%edi), %edi 1272*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1273*8d67ca89SAndroid Build Coastguard Worker#endif 1274*8d67ca89SAndroid Build Coastguard Worker RETURN 1275*8d67ca89SAndroid Build Coastguard Worker 1276*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1277*8d67ca89SAndroid Build Coastguard WorkerL(Exit25): 1278*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1279*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1280*8d67ca89SAndroid Build Coastguard Worker xor %cl, %cl 1281*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1282*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1283*8d67ca89SAndroid Build Coastguard Worker movb %cl, 24(%edi) 1284*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1285*8d67ca89SAndroid Build Coastguard Worker lea 24(%edi), %eax 1286*8d67ca89SAndroid Build Coastguard Worker#endif 1287*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1288*8d67ca89SAndroid Build Coastguard Worker sub $25, %ebx 1289*8d67ca89SAndroid Build Coastguard Worker lea 25(%edi), %edi 1290*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1291*8d67ca89SAndroid Build Coastguard Worker#endif 1292*8d67ca89SAndroid Build Coastguard Worker RETURN 1293*8d67ca89SAndroid Build Coastguard Worker 1294*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1295*8d67ca89SAndroid Build Coastguard WorkerL(Exit26): 1296*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1297*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1298*8d67ca89SAndroid Build Coastguard Worker movw 24(%esi), %cx 1299*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1300*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1301*8d67ca89SAndroid Build Coastguard Worker movw %cx, 24(%edi) 1302*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1303*8d67ca89SAndroid Build Coastguard Worker lea 25(%edi), %eax 1304*8d67ca89SAndroid Build Coastguard Worker#endif 1305*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1306*8d67ca89SAndroid Build Coastguard Worker sub $26, %ebx 1307*8d67ca89SAndroid Build Coastguard Worker lea 26(%edi), %edi 1308*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1309*8d67ca89SAndroid Build Coastguard Worker#endif 1310*8d67ca89SAndroid Build Coastguard Worker RETURN 1311*8d67ca89SAndroid Build Coastguard Worker 1312*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1313*8d67ca89SAndroid Build Coastguard WorkerL(Exit27): 1314*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1315*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1316*8d67ca89SAndroid Build Coastguard Worker movl 23(%esi), %ecx 1317*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1318*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1319*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 23(%edi) 1320*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1321*8d67ca89SAndroid Build Coastguard Worker lea 26(%edi), %eax 1322*8d67ca89SAndroid Build Coastguard Worker#endif 1323*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1324*8d67ca89SAndroid Build Coastguard Worker sub $27, %ebx 1325*8d67ca89SAndroid Build Coastguard Worker lea 27(%edi), %edi 1326*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1327*8d67ca89SAndroid Build Coastguard Worker#endif 1328*8d67ca89SAndroid Build Coastguard Worker RETURN 1329*8d67ca89SAndroid Build Coastguard Worker 1330*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1331*8d67ca89SAndroid Build Coastguard WorkerL(Exit28): 1332*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1333*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1334*8d67ca89SAndroid Build Coastguard Worker movl 24(%esi), %ecx 1335*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1336*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1337*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 24(%edi) 1338*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1339*8d67ca89SAndroid Build Coastguard Worker lea 27(%edi), %eax 1340*8d67ca89SAndroid Build Coastguard Worker#endif 1341*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1342*8d67ca89SAndroid Build Coastguard Worker sub $28, %ebx 1343*8d67ca89SAndroid Build Coastguard Worker lea 28(%edi), %edi 1344*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1345*8d67ca89SAndroid Build Coastguard Worker#endif 1346*8d67ca89SAndroid Build Coastguard Worker RETURN 1347*8d67ca89SAndroid Build Coastguard Worker 1348*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1349*8d67ca89SAndroid Build Coastguard WorkerL(Exit29): 1350*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1351*8d67ca89SAndroid Build Coastguard Worker movdqu 13(%esi), %xmm2 1352*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1353*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 13(%edi) 1354*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1355*8d67ca89SAndroid Build Coastguard Worker lea 28(%edi), %eax 1356*8d67ca89SAndroid Build Coastguard Worker#endif 1357*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1358*8d67ca89SAndroid Build Coastguard Worker sub $29, %ebx 1359*8d67ca89SAndroid Build Coastguard Worker lea 29(%edi), %edi 1360*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1361*8d67ca89SAndroid Build Coastguard Worker#endif 1362*8d67ca89SAndroid Build Coastguard Worker RETURN 1363*8d67ca89SAndroid Build Coastguard Worker 1364*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1365*8d67ca89SAndroid Build Coastguard WorkerL(Exit30): 1366*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1367*8d67ca89SAndroid Build Coastguard Worker movdqu 14(%esi), %xmm2 1368*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1369*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 14(%edi) 1370*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1371*8d67ca89SAndroid Build Coastguard Worker lea 29(%edi), %eax 1372*8d67ca89SAndroid Build Coastguard Worker#endif 1373*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1374*8d67ca89SAndroid Build Coastguard Worker sub $30, %ebx 1375*8d67ca89SAndroid Build Coastguard Worker lea 30(%edi), %edi 1376*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1377*8d67ca89SAndroid Build Coastguard Worker#endif 1378*8d67ca89SAndroid Build Coastguard Worker RETURN 1379*8d67ca89SAndroid Build Coastguard Worker 1380*8d67ca89SAndroid Build Coastguard Worker 1381*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1382*8d67ca89SAndroid Build Coastguard WorkerL(Exit31): 1383*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1384*8d67ca89SAndroid Build Coastguard Worker movdqu 15(%esi), %xmm2 1385*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1386*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 15(%edi) 1387*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1388*8d67ca89SAndroid Build Coastguard Worker lea 30(%edi), %eax 1389*8d67ca89SAndroid Build Coastguard Worker#endif 1390*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1391*8d67ca89SAndroid Build Coastguard Worker sub $31, %ebx 1392*8d67ca89SAndroid Build Coastguard Worker lea 31(%edi), %edi 1393*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1394*8d67ca89SAndroid Build Coastguard Worker#endif 1395*8d67ca89SAndroid Build Coastguard Worker RETURN 1396*8d67ca89SAndroid Build Coastguard Worker 1397*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1398*8d67ca89SAndroid Build Coastguard WorkerL(Exit32): 1399*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1400*8d67ca89SAndroid Build Coastguard Worker movdqu 16(%esi), %xmm2 1401*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1402*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 16(%edi) 1403*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1404*8d67ca89SAndroid Build Coastguard Worker lea 31(%edi), %eax 1405*8d67ca89SAndroid Build Coastguard Worker#endif 1406*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1407*8d67ca89SAndroid Build Coastguard Worker sub $32, %ebx 1408*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1409*8d67ca89SAndroid Build Coastguard Worker jnz L(StrncpyFillTailWithZero) 1410*8d67ca89SAndroid Build Coastguard Worker#endif 1411*8d67ca89SAndroid Build Coastguard Worker RETURN 1412*8d67ca89SAndroid Build Coastguard Worker 1413*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 1414*8d67ca89SAndroid Build Coastguard Worker 1415*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1416*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit1): 1417*8d67ca89SAndroid Build Coastguard Worker movb (%esi), %dl 1418*8d67ca89SAndroid Build Coastguard Worker movb %dl, (%edi) 1419*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1420*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi), %eax 1421*8d67ca89SAndroid Build Coastguard Worker#endif 1422*8d67ca89SAndroid Build Coastguard Worker RETURN 1423*8d67ca89SAndroid Build Coastguard Worker 1424*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1425*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit2): 1426*8d67ca89SAndroid Build Coastguard Worker movw (%esi), %dx 1427*8d67ca89SAndroid Build Coastguard Worker movw %dx, (%edi) 1428*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1429*8d67ca89SAndroid Build Coastguard Worker lea 2(%edi), %eax 1430*8d67ca89SAndroid Build Coastguard Worker#endif 1431*8d67ca89SAndroid Build Coastguard Worker RETURN 1432*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1433*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit3): 1434*8d67ca89SAndroid Build Coastguard Worker movw (%esi), %cx 1435*8d67ca89SAndroid Build Coastguard Worker movb 2(%esi), %dl 1436*8d67ca89SAndroid Build Coastguard Worker movw %cx, (%edi) 1437*8d67ca89SAndroid Build Coastguard Worker movb %dl, 2(%edi) 1438*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1439*8d67ca89SAndroid Build Coastguard Worker lea 3(%edi), %eax 1440*8d67ca89SAndroid Build Coastguard Worker#endif 1441*8d67ca89SAndroid Build Coastguard Worker RETURN 1442*8d67ca89SAndroid Build Coastguard Worker 1443*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1444*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit4): 1445*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %edx 1446*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%edi) 1447*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1448*8d67ca89SAndroid Build Coastguard Worker lea 4(%edi), %eax 1449*8d67ca89SAndroid Build Coastguard Worker#endif 1450*8d67ca89SAndroid Build Coastguard Worker RETURN 1451*8d67ca89SAndroid Build Coastguard Worker 1452*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1453*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit5): 1454*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 1455*8d67ca89SAndroid Build Coastguard Worker movb 4(%esi), %dl 1456*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 1457*8d67ca89SAndroid Build Coastguard Worker movb %dl, 4(%edi) 1458*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1459*8d67ca89SAndroid Build Coastguard Worker lea 5(%edi), %eax 1460*8d67ca89SAndroid Build Coastguard Worker#endif 1461*8d67ca89SAndroid Build Coastguard Worker RETURN 1462*8d67ca89SAndroid Build Coastguard Worker 1463*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1464*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit6): 1465*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 1466*8d67ca89SAndroid Build Coastguard Worker movw 4(%esi), %dx 1467*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 1468*8d67ca89SAndroid Build Coastguard Worker movw %dx, 4(%edi) 1469*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1470*8d67ca89SAndroid Build Coastguard Worker lea 6(%edi), %eax 1471*8d67ca89SAndroid Build Coastguard Worker#endif 1472*8d67ca89SAndroid Build Coastguard Worker RETURN 1473*8d67ca89SAndroid Build Coastguard Worker 1474*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1475*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit7): 1476*8d67ca89SAndroid Build Coastguard Worker movl (%esi), %ecx 1477*8d67ca89SAndroid Build Coastguard Worker movl 3(%esi), %edx 1478*8d67ca89SAndroid Build Coastguard Worker movl %ecx, (%edi) 1479*8d67ca89SAndroid Build Coastguard Worker movl %edx, 3(%edi) 1480*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1481*8d67ca89SAndroid Build Coastguard Worker lea 7(%edi), %eax 1482*8d67ca89SAndroid Build Coastguard Worker#endif 1483*8d67ca89SAndroid Build Coastguard Worker RETURN 1484*8d67ca89SAndroid Build Coastguard Worker 1485*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1486*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit8): 1487*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1488*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1489*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1490*8d67ca89SAndroid Build Coastguard Worker lea 8(%edi), %eax 1491*8d67ca89SAndroid Build Coastguard Worker#endif 1492*8d67ca89SAndroid Build Coastguard Worker RETURN 1493*8d67ca89SAndroid Build Coastguard Worker 1494*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1495*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit9): 1496*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1497*8d67ca89SAndroid Build Coastguard Worker movb 8(%esi), %dl 1498*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1499*8d67ca89SAndroid Build Coastguard Worker movb %dl, 8(%edi) 1500*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1501*8d67ca89SAndroid Build Coastguard Worker lea 9(%edi), %eax 1502*8d67ca89SAndroid Build Coastguard Worker#endif 1503*8d67ca89SAndroid Build Coastguard Worker RETURN 1504*8d67ca89SAndroid Build Coastguard Worker 1505*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1506*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit10): 1507*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1508*8d67ca89SAndroid Build Coastguard Worker movw 8(%esi), %dx 1509*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1510*8d67ca89SAndroid Build Coastguard Worker movw %dx, 8(%edi) 1511*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1512*8d67ca89SAndroid Build Coastguard Worker lea 10(%edi), %eax 1513*8d67ca89SAndroid Build Coastguard Worker#endif 1514*8d67ca89SAndroid Build Coastguard Worker RETURN 1515*8d67ca89SAndroid Build Coastguard Worker 1516*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1517*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit11): 1518*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1519*8d67ca89SAndroid Build Coastguard Worker movl 7(%esi), %edx 1520*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1521*8d67ca89SAndroid Build Coastguard Worker movl %edx, 7(%edi) 1522*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1523*8d67ca89SAndroid Build Coastguard Worker lea 11(%edi), %eax 1524*8d67ca89SAndroid Build Coastguard Worker#endif 1525*8d67ca89SAndroid Build Coastguard Worker RETURN 1526*8d67ca89SAndroid Build Coastguard Worker 1527*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1528*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit12): 1529*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1530*8d67ca89SAndroid Build Coastguard Worker movl 8(%esi), %edx 1531*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1532*8d67ca89SAndroid Build Coastguard Worker movl %edx, 8(%edi) 1533*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1534*8d67ca89SAndroid Build Coastguard Worker lea 12(%edi), %eax 1535*8d67ca89SAndroid Build Coastguard Worker#endif 1536*8d67ca89SAndroid Build Coastguard Worker RETURN 1537*8d67ca89SAndroid Build Coastguard Worker 1538*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1539*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit13): 1540*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1541*8d67ca89SAndroid Build Coastguard Worker movlpd 5(%esi), %xmm1 1542*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1543*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 5(%edi) 1544*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1545*8d67ca89SAndroid Build Coastguard Worker lea 13(%edi), %eax 1546*8d67ca89SAndroid Build Coastguard Worker#endif 1547*8d67ca89SAndroid Build Coastguard Worker RETURN 1548*8d67ca89SAndroid Build Coastguard Worker 1549*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1550*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit14): 1551*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1552*8d67ca89SAndroid Build Coastguard Worker movlpd 6(%esi), %xmm1 1553*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1554*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 6(%edi) 1555*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1556*8d67ca89SAndroid Build Coastguard Worker lea 14(%edi), %eax 1557*8d67ca89SAndroid Build Coastguard Worker#endif 1558*8d67ca89SAndroid Build Coastguard Worker RETURN 1559*8d67ca89SAndroid Build Coastguard Worker 1560*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1561*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit15): 1562*8d67ca89SAndroid Build Coastguard Worker movlpd (%esi), %xmm0 1563*8d67ca89SAndroid Build Coastguard Worker movlpd 7(%esi), %xmm1 1564*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1565*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm1, 7(%edi) 1566*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1567*8d67ca89SAndroid Build Coastguard Worker lea 15(%edi), %eax 1568*8d67ca89SAndroid Build Coastguard Worker#endif 1569*8d67ca89SAndroid Build Coastguard Worker RETURN 1570*8d67ca89SAndroid Build Coastguard Worker 1571*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1572*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit16): 1573*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1574*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1575*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1576*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi), %eax 1577*8d67ca89SAndroid Build Coastguard Worker#endif 1578*8d67ca89SAndroid Build Coastguard Worker RETURN 1579*8d67ca89SAndroid Build Coastguard Worker 1580*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1581*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit17): 1582*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1583*8d67ca89SAndroid Build Coastguard Worker movb 16(%esi), %cl 1584*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1585*8d67ca89SAndroid Build Coastguard Worker movb %cl, 16(%edi) 1586*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1587*8d67ca89SAndroid Build Coastguard Worker lea 17(%edi), %eax 1588*8d67ca89SAndroid Build Coastguard Worker#endif 1589*8d67ca89SAndroid Build Coastguard Worker RETURN 1590*8d67ca89SAndroid Build Coastguard Worker 1591*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1592*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit18): 1593*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1594*8d67ca89SAndroid Build Coastguard Worker movw 16(%esi), %cx 1595*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1596*8d67ca89SAndroid Build Coastguard Worker movw %cx, 16(%edi) 1597*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1598*8d67ca89SAndroid Build Coastguard Worker lea 18(%edi), %eax 1599*8d67ca89SAndroid Build Coastguard Worker#endif 1600*8d67ca89SAndroid Build Coastguard Worker RETURN 1601*8d67ca89SAndroid Build Coastguard Worker 1602*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1603*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit19): 1604*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1605*8d67ca89SAndroid Build Coastguard Worker movl 15(%esi), %ecx 1606*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1607*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 15(%edi) 1608*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1609*8d67ca89SAndroid Build Coastguard Worker lea 19(%edi), %eax 1610*8d67ca89SAndroid Build Coastguard Worker#endif 1611*8d67ca89SAndroid Build Coastguard Worker RETURN 1612*8d67ca89SAndroid Build Coastguard Worker 1613*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1614*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit20): 1615*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1616*8d67ca89SAndroid Build Coastguard Worker movl 16(%esi), %ecx 1617*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1618*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 16(%edi) 1619*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1620*8d67ca89SAndroid Build Coastguard Worker lea 20(%edi), %eax 1621*8d67ca89SAndroid Build Coastguard Worker#endif 1622*8d67ca89SAndroid Build Coastguard Worker RETURN 1623*8d67ca89SAndroid Build Coastguard Worker 1624*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1625*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit21): 1626*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1627*8d67ca89SAndroid Build Coastguard Worker movl 16(%esi), %ecx 1628*8d67ca89SAndroid Build Coastguard Worker movb 20(%esi), %dl 1629*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1630*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 16(%edi) 1631*8d67ca89SAndroid Build Coastguard Worker movb %dl, 20(%edi) 1632*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1633*8d67ca89SAndroid Build Coastguard Worker lea 21(%edi), %eax 1634*8d67ca89SAndroid Build Coastguard Worker#endif 1635*8d67ca89SAndroid Build Coastguard Worker RETURN 1636*8d67ca89SAndroid Build Coastguard Worker 1637*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1638*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit22): 1639*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1640*8d67ca89SAndroid Build Coastguard Worker movlpd 14(%esi), %xmm3 1641*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1642*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm3, 14(%edi) 1643*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1644*8d67ca89SAndroid Build Coastguard Worker lea 22(%edi), %eax 1645*8d67ca89SAndroid Build Coastguard Worker#endif 1646*8d67ca89SAndroid Build Coastguard Worker RETURN 1647*8d67ca89SAndroid Build Coastguard Worker 1648*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1649*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit23): 1650*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1651*8d67ca89SAndroid Build Coastguard Worker movlpd 15(%esi), %xmm3 1652*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1653*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm3, 15(%edi) 1654*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1655*8d67ca89SAndroid Build Coastguard Worker lea 23(%edi), %eax 1656*8d67ca89SAndroid Build Coastguard Worker#endif 1657*8d67ca89SAndroid Build Coastguard Worker RETURN 1658*8d67ca89SAndroid Build Coastguard Worker 1659*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1660*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit24): 1661*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1662*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1663*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1664*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1665*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1666*8d67ca89SAndroid Build Coastguard Worker lea 24(%edi), %eax 1667*8d67ca89SAndroid Build Coastguard Worker#endif 1668*8d67ca89SAndroid Build Coastguard Worker RETURN 1669*8d67ca89SAndroid Build Coastguard Worker 1670*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1671*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit25): 1672*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1673*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1674*8d67ca89SAndroid Build Coastguard Worker movb 24(%esi), %cl 1675*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1676*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1677*8d67ca89SAndroid Build Coastguard Worker movb %cl, 24(%edi) 1678*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1679*8d67ca89SAndroid Build Coastguard Worker lea 25(%edi), %eax 1680*8d67ca89SAndroid Build Coastguard Worker#endif 1681*8d67ca89SAndroid Build Coastguard Worker RETURN 1682*8d67ca89SAndroid Build Coastguard Worker 1683*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1684*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit26): 1685*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1686*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1687*8d67ca89SAndroid Build Coastguard Worker movw 24(%esi), %cx 1688*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1689*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1690*8d67ca89SAndroid Build Coastguard Worker movw %cx, 24(%edi) 1691*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1692*8d67ca89SAndroid Build Coastguard Worker lea 26(%edi), %eax 1693*8d67ca89SAndroid Build Coastguard Worker#endif 1694*8d67ca89SAndroid Build Coastguard Worker RETURN 1695*8d67ca89SAndroid Build Coastguard Worker 1696*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1697*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit27): 1698*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1699*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1700*8d67ca89SAndroid Build Coastguard Worker movl 23(%esi), %ecx 1701*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1702*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1703*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 23(%edi) 1704*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1705*8d67ca89SAndroid Build Coastguard Worker lea 27(%edi), %eax 1706*8d67ca89SAndroid Build Coastguard Worker#endif 1707*8d67ca89SAndroid Build Coastguard Worker RETURN 1708*8d67ca89SAndroid Build Coastguard Worker 1709*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1710*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit28): 1711*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1712*8d67ca89SAndroid Build Coastguard Worker movlpd 16(%esi), %xmm2 1713*8d67ca89SAndroid Build Coastguard Worker movl 24(%esi), %ecx 1714*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1715*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm2, 16(%edi) 1716*8d67ca89SAndroid Build Coastguard Worker movl %ecx, 24(%edi) 1717*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1718*8d67ca89SAndroid Build Coastguard Worker lea 28(%edi), %eax 1719*8d67ca89SAndroid Build Coastguard Worker#endif 1720*8d67ca89SAndroid Build Coastguard Worker RETURN 1721*8d67ca89SAndroid Build Coastguard Worker 1722*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1723*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit29): 1724*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1725*8d67ca89SAndroid Build Coastguard Worker movdqu 13(%esi), %xmm2 1726*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1727*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 13(%edi) 1728*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1729*8d67ca89SAndroid Build Coastguard Worker lea 29(%edi), %eax 1730*8d67ca89SAndroid Build Coastguard Worker#endif 1731*8d67ca89SAndroid Build Coastguard Worker RETURN 1732*8d67ca89SAndroid Build Coastguard Worker 1733*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1734*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit30): 1735*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1736*8d67ca89SAndroid Build Coastguard Worker movdqu 14(%esi), %xmm2 1737*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1738*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 14(%edi) 1739*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1740*8d67ca89SAndroid Build Coastguard Worker lea 30(%edi), %eax 1741*8d67ca89SAndroid Build Coastguard Worker#endif 1742*8d67ca89SAndroid Build Coastguard Worker RETURN 1743*8d67ca89SAndroid Build Coastguard Worker 1744*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1745*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit31): 1746*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1747*8d67ca89SAndroid Build Coastguard Worker movdqu 15(%esi), %xmm2 1748*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1749*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 15(%edi) 1750*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1751*8d67ca89SAndroid Build Coastguard Worker lea 31(%edi), %eax 1752*8d67ca89SAndroid Build Coastguard Worker#endif 1753*8d67ca89SAndroid Build Coastguard Worker RETURN 1754*8d67ca89SAndroid Build Coastguard Worker 1755*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1756*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit32): 1757*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1758*8d67ca89SAndroid Build Coastguard Worker movdqu 16(%esi), %xmm2 1759*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1760*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 16(%edi) 1761*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1762*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %eax 1763*8d67ca89SAndroid Build Coastguard Worker#endif 1764*8d67ca89SAndroid Build Coastguard Worker RETURN 1765*8d67ca89SAndroid Build Coastguard Worker 1766*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1767*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyExit33): 1768*8d67ca89SAndroid Build Coastguard Worker movdqu (%esi), %xmm0 1769*8d67ca89SAndroid Build Coastguard Worker movdqu 16(%esi), %xmm2 1770*8d67ca89SAndroid Build Coastguard Worker movb 32(%esi), %cl 1771*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1772*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, 16(%edi) 1773*8d67ca89SAndroid Build Coastguard Worker movb %cl, 32(%edi) 1774*8d67ca89SAndroid Build Coastguard Worker RETURN 1775*8d67ca89SAndroid Build Coastguard Worker 1776*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1777*8d67ca89SAndroid Build Coastguard WorkerL(Fill0): 1778*8d67ca89SAndroid Build Coastguard Worker RETURN 1779*8d67ca89SAndroid Build Coastguard Worker 1780*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1781*8d67ca89SAndroid Build Coastguard WorkerL(Fill1): 1782*8d67ca89SAndroid Build Coastguard Worker movb %dl, (%edi) 1783*8d67ca89SAndroid Build Coastguard Worker RETURN 1784*8d67ca89SAndroid Build Coastguard Worker 1785*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1786*8d67ca89SAndroid Build Coastguard WorkerL(Fill2): 1787*8d67ca89SAndroid Build Coastguard Worker movw %dx, (%edi) 1788*8d67ca89SAndroid Build Coastguard Worker RETURN 1789*8d67ca89SAndroid Build Coastguard Worker 1790*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1791*8d67ca89SAndroid Build Coastguard WorkerL(Fill3): 1792*8d67ca89SAndroid Build Coastguard Worker movl %edx, -1(%edi) 1793*8d67ca89SAndroid Build Coastguard Worker RETURN 1794*8d67ca89SAndroid Build Coastguard Worker 1795*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1796*8d67ca89SAndroid Build Coastguard WorkerL(Fill4): 1797*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%edi) 1798*8d67ca89SAndroid Build Coastguard Worker RETURN 1799*8d67ca89SAndroid Build Coastguard Worker 1800*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1801*8d67ca89SAndroid Build Coastguard WorkerL(Fill5): 1802*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%edi) 1803*8d67ca89SAndroid Build Coastguard Worker movb %dl, 4(%edi) 1804*8d67ca89SAndroid Build Coastguard Worker RETURN 1805*8d67ca89SAndroid Build Coastguard Worker 1806*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1807*8d67ca89SAndroid Build Coastguard WorkerL(Fill6): 1808*8d67ca89SAndroid Build Coastguard Worker movl %edx, (%edi) 1809*8d67ca89SAndroid Build Coastguard Worker movw %dx, 4(%edi) 1810*8d67ca89SAndroid Build Coastguard Worker RETURN 1811*8d67ca89SAndroid Build Coastguard Worker 1812*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1813*8d67ca89SAndroid Build Coastguard WorkerL(Fill7): 1814*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, -1(%edi) 1815*8d67ca89SAndroid Build Coastguard Worker RETURN 1816*8d67ca89SAndroid Build Coastguard Worker 1817*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1818*8d67ca89SAndroid Build Coastguard WorkerL(Fill8): 1819*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1820*8d67ca89SAndroid Build Coastguard Worker RETURN 1821*8d67ca89SAndroid Build Coastguard Worker 1822*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1823*8d67ca89SAndroid Build Coastguard WorkerL(Fill9): 1824*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1825*8d67ca89SAndroid Build Coastguard Worker movb %dl, 8(%edi) 1826*8d67ca89SAndroid Build Coastguard Worker RETURN 1827*8d67ca89SAndroid Build Coastguard Worker 1828*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1829*8d67ca89SAndroid Build Coastguard WorkerL(Fill10): 1830*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1831*8d67ca89SAndroid Build Coastguard Worker movw %dx, 8(%edi) 1832*8d67ca89SAndroid Build Coastguard Worker RETURN 1833*8d67ca89SAndroid Build Coastguard Worker 1834*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1835*8d67ca89SAndroid Build Coastguard WorkerL(Fill11): 1836*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1837*8d67ca89SAndroid Build Coastguard Worker movl %edx, 7(%edi) 1838*8d67ca89SAndroid Build Coastguard Worker RETURN 1839*8d67ca89SAndroid Build Coastguard Worker 1840*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1841*8d67ca89SAndroid Build Coastguard WorkerL(Fill12): 1842*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1843*8d67ca89SAndroid Build Coastguard Worker movl %edx, 8(%edi) 1844*8d67ca89SAndroid Build Coastguard Worker RETURN 1845*8d67ca89SAndroid Build Coastguard Worker 1846*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1847*8d67ca89SAndroid Build Coastguard WorkerL(Fill13): 1848*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1849*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 5(%edi) 1850*8d67ca89SAndroid Build Coastguard Worker RETURN 1851*8d67ca89SAndroid Build Coastguard Worker 1852*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1853*8d67ca89SAndroid Build Coastguard WorkerL(Fill14): 1854*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, (%edi) 1855*8d67ca89SAndroid Build Coastguard Worker movlpd %xmm0, 6(%edi) 1856*8d67ca89SAndroid Build Coastguard Worker RETURN 1857*8d67ca89SAndroid Build Coastguard Worker 1858*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1859*8d67ca89SAndroid Build Coastguard WorkerL(Fill15): 1860*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, -1(%edi) 1861*8d67ca89SAndroid Build Coastguard Worker RETURN 1862*8d67ca89SAndroid Build Coastguard Worker 1863*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1864*8d67ca89SAndroid Build Coastguard WorkerL(Fill16): 1865*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1866*8d67ca89SAndroid Build Coastguard Worker RETURN 1867*8d67ca89SAndroid Build Coastguard Worker 1868*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1869*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesUnalignedXmm2): 1870*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm2, (%edi, %ecx) 1871*8d67ca89SAndroid Build Coastguard Worker 1872*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1873*8d67ca89SAndroid Build Coastguard WorkerL(CopyFrom1To16BytesXmmExit): 1874*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 1875*8d67ca89SAndroid Build Coastguard Worker add $15, %ebx 1876*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 1877*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1878*8d67ca89SAndroid Build Coastguard Worker lea (%edi, %edx), %eax 1879*8d67ca89SAndroid Build Coastguard Worker#endif 1880*8d67ca89SAndroid Build Coastguard Worker sub %edx, %ebx 1881*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi, %edx), %edi 1882*8d67ca89SAndroid Build Coastguard Worker 1883*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1884*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillTailWithZero): 1885*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 1886*8d67ca89SAndroid Build Coastguard Worker xor %edx, %edx 1887*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1888*8d67ca89SAndroid Build Coastguard Worker jbe L(StrncpyFillExit) 1889*8d67ca89SAndroid Build Coastguard Worker 1890*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm0, (%edi) 1891*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 1892*8d67ca89SAndroid Build Coastguard Worker 1893*8d67ca89SAndroid Build Coastguard Worker mov %edi, %esi 1894*8d67ca89SAndroid Build Coastguard Worker and $0xf, %esi 1895*8d67ca89SAndroid Build Coastguard Worker sub %esi, %edi 1896*8d67ca89SAndroid Build Coastguard Worker add %esi, %ebx 1897*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1898*8d67ca89SAndroid Build Coastguard Worker jb L(StrncpyFillLess64) 1899*8d67ca89SAndroid Build Coastguard Worker 1900*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLoopMovdqa): 1901*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%edi) 1902*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 16(%edi) 1903*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 32(%edi) 1904*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 48(%edi) 1905*8d67ca89SAndroid Build Coastguard Worker add $64, %edi 1906*8d67ca89SAndroid Build Coastguard Worker sub $64, %ebx 1907*8d67ca89SAndroid Build Coastguard Worker jae L(StrncpyFillLoopMovdqa) 1908*8d67ca89SAndroid Build Coastguard Worker 1909*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess64): 1910*8d67ca89SAndroid Build Coastguard Worker add $32, %ebx 1911*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillLess32) 1912*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%edi) 1913*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, 16(%edi) 1914*8d67ca89SAndroid Build Coastguard Worker add $32, %edi 1915*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1916*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillExit) 1917*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%edi) 1918*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 1919*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) 1920*8d67ca89SAndroid Build Coastguard Worker 1921*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillLess32): 1922*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 1923*8d67ca89SAndroid Build Coastguard Worker jl L(StrncpyFillExit) 1924*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, (%edi) 1925*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 1926*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) 1927*8d67ca89SAndroid Build Coastguard Worker 1928*8d67ca89SAndroid Build Coastguard WorkerL(StrncpyFillExit): 1929*8d67ca89SAndroid Build Coastguard Worker add $16, %ebx 1930*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(FillTable), %ebx, 4) 1931*8d67ca89SAndroid Build Coastguard Worker 1932*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1933*8d67ca89SAndroid Build Coastguard WorkerL(AlignedLeaveCase2OrCase3): 1934*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1935*8d67ca89SAndroid Build Coastguard Worker jnz L(Aligned64LeaveCase2) 1936*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase3): 1937*8d67ca89SAndroid Build Coastguard Worker lea 64(%ebx), %ecx 1938*8d67ca89SAndroid Build Coastguard Worker and $-16, %ecx 1939*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 1940*8d67ca89SAndroid Build Coastguard Worker jl L(CopyFrom1To16BytesCase3) 1941*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 1942*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1943*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 1944*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, 16(%edi) 1945*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1946*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 1947*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm6, 32(%edi) 1948*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1949*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 1950*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm7, 48(%edi) 1951*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 1952*8d67ca89SAndroid Build Coastguard Worker lea 64(%edi), %eax 1953*8d67ca89SAndroid Build Coastguard Worker#endif 1954*8d67ca89SAndroid Build Coastguard Worker RETURN 1955*8d67ca89SAndroid Build Coastguard Worker 1956*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1957*8d67ca89SAndroid Build Coastguard WorkerL(Aligned64LeaveCase2): 1958*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 1959*8d67ca89SAndroid Build Coastguard Worker xor %ecx, %ecx 1960*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 1961*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 1962*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 1963*8d67ca89SAndroid Build Coastguard Worker jle L(CopyFrom1To16BytesCase2OrCase3) 1964*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1965*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm4) 1966*8d67ca89SAndroid Build Coastguard Worker 1967*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm0 1968*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 1969*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm4, (%edi) 1970*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 1971*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1972*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 1973*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1974*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm5) 1975*8d67ca89SAndroid Build Coastguard Worker 1976*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 1977*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 1978*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm5, 16(%edi) 1979*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 1980*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 1981*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 1982*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1983*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesXmm6) 1984*8d67ca89SAndroid Build Coastguard Worker 1985*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm0 1986*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 1987*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm6, 32(%edi) 1988*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi, %ecx), %edi 1989*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi, %ecx), %esi 1990*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 1991*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 1992*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 1993*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 1994*8d67ca89SAndroid Build Coastguard Worker 1995*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1996*8d67ca89SAndroid Build Coastguard WorkerL(UnalignedLeaveCase2OrCase3): 1997*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1998*8d67ca89SAndroid Build Coastguard Worker jnz L(Unaligned64LeaveCase2) 1999*8d67ca89SAndroid Build Coastguard WorkerL(Unaligned64LeaveCase3): 2000*8d67ca89SAndroid Build Coastguard Worker lea 64(%ebx), %ecx 2001*8d67ca89SAndroid Build Coastguard Worker and $-16, %ecx 2002*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 2003*8d67ca89SAndroid Build Coastguard Worker jl L(CopyFrom1To16BytesCase3) 2004*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 2005*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2006*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 2007*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, 16(%edi) 2008*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2009*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 2010*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, 32(%edi) 2011*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2012*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesCase3) 2013*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm7, 48(%edi) 2014*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STPCPY 2015*8d67ca89SAndroid Build Coastguard Worker lea 64(%edi), %eax 2016*8d67ca89SAndroid Build Coastguard Worker#endif 2017*8d67ca89SAndroid Build Coastguard Worker RETURN 2018*8d67ca89SAndroid Build Coastguard Worker 2019*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2020*8d67ca89SAndroid Build Coastguard WorkerL(Unaligned64LeaveCase2): 2021*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 2022*8d67ca89SAndroid Build Coastguard Worker xor %ecx, %ecx 2023*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm4, %xmm0 2024*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 2025*8d67ca89SAndroid Build Coastguard Worker add $48, %ebx 2026*8d67ca89SAndroid Build Coastguard Worker jle L(CopyFrom1To16BytesCase2OrCase3) 2027*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 2028*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm4) 2029*8d67ca89SAndroid Build Coastguard Worker 2030*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm5, %xmm0 2031*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 2032*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm4, (%edi) 2033*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 2034*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2035*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 2036*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 2037*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm5) 2038*8d67ca89SAndroid Build Coastguard Worker 2039*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm6, %xmm0 2040*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 2041*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm5, 16(%edi) 2042*8d67ca89SAndroid Build Coastguard Worker add $16, %ecx 2043*8d67ca89SAndroid Build Coastguard Worker sub $16, %ebx 2044*8d67ca89SAndroid Build Coastguard Worker jbe L(CopyFrom1To16BytesCase2OrCase3) 2045*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 2046*8d67ca89SAndroid Build Coastguard Worker jnz L(CopyFrom1To16BytesUnalignedXmm6) 2047*8d67ca89SAndroid Build Coastguard Worker 2048*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm7, %xmm0 2049*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %edx 2050*8d67ca89SAndroid Build Coastguard Worker movdqu %xmm6, 32(%edi) 2051*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi, %ecx), %edi 2052*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi, %ecx), %esi 2053*8d67ca89SAndroid Build Coastguard Worker bsf %edx, %edx 2054*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %edx 2055*8d67ca89SAndroid Build Coastguard Worker jb L(CopyFrom1To16BytesExit) 2056*8d67ca89SAndroid Build Coastguard Worker BRANCH_TO_JMPTBL_ENTRY (L(ExitStrncpyTable), %ebx, 4) 2057*8d67ca89SAndroid Build Coastguard Worker 2058*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2059*8d67ca89SAndroid Build Coastguard WorkerL(ExitZero): 2060*8d67ca89SAndroid Build Coastguard Worker movl %edi, %eax 2061*8d67ca89SAndroid Build Coastguard Worker RETURN 2062*8d67ca89SAndroid Build Coastguard Worker#endif 2063*8d67ca89SAndroid Build Coastguard Worker 2064*8d67ca89SAndroid Build Coastguard WorkerEND (STRCPY) 2065*8d67ca89SAndroid Build Coastguard Worker 2066*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2067*8d67ca89SAndroid Build Coastguard Worker .section .rodata 2068*8d67ca89SAndroid Build Coastguard WorkerL(ExitTable): 2069*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit1), L(ExitTable)) 2070*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit2), L(ExitTable)) 2071*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit3), L(ExitTable)) 2072*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit4), L(ExitTable)) 2073*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit5), L(ExitTable)) 2074*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit6), L(ExitTable)) 2075*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit7), L(ExitTable)) 2076*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit8), L(ExitTable)) 2077*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit9), L(ExitTable)) 2078*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit10), L(ExitTable)) 2079*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit11), L(ExitTable)) 2080*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit12), L(ExitTable)) 2081*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit13), L(ExitTable)) 2082*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit14), L(ExitTable)) 2083*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit15), L(ExitTable)) 2084*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit16), L(ExitTable)) 2085*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit17), L(ExitTable)) 2086*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit18), L(ExitTable)) 2087*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit19), L(ExitTable)) 2088*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit20), L(ExitTable)) 2089*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit21), L(ExitTable)) 2090*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit22), L(ExitTable)) 2091*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit23), L(ExitTable)) 2092*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit24), L(ExitTable)) 2093*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit25), L(ExitTable)) 2094*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit26), L(ExitTable)) 2095*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit27), L(ExitTable)) 2096*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit28), L(ExitTable)) 2097*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit29), L(ExitTable)) 2098*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit30), L(ExitTable)) 2099*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit31), L(ExitTable)) 2100*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit32), L(ExitTable)) 2101*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_AS_STRNCPY 2102*8d67ca89SAndroid Build Coastguard WorkerL(ExitStrncpyTable): 2103*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Exit0), L(ExitStrncpyTable)) 2104*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit1), L(ExitStrncpyTable)) 2105*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit2), L(ExitStrncpyTable)) 2106*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit3), L(ExitStrncpyTable)) 2107*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit4), L(ExitStrncpyTable)) 2108*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit5), L(ExitStrncpyTable)) 2109*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit6), L(ExitStrncpyTable)) 2110*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit7), L(ExitStrncpyTable)) 2111*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit8), L(ExitStrncpyTable)) 2112*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit9), L(ExitStrncpyTable)) 2113*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit10), L(ExitStrncpyTable)) 2114*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit11), L(ExitStrncpyTable)) 2115*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit12), L(ExitStrncpyTable)) 2116*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit13), L(ExitStrncpyTable)) 2117*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit14), L(ExitStrncpyTable)) 2118*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit15), L(ExitStrncpyTable)) 2119*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit16), L(ExitStrncpyTable)) 2120*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit17), L(ExitStrncpyTable)) 2121*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit18), L(ExitStrncpyTable)) 2122*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit19), L(ExitStrncpyTable)) 2123*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit20), L(ExitStrncpyTable)) 2124*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit21), L(ExitStrncpyTable)) 2125*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit22), L(ExitStrncpyTable)) 2126*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit23), L(ExitStrncpyTable)) 2127*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit24), L(ExitStrncpyTable)) 2128*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit25), L(ExitStrncpyTable)) 2129*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit26), L(ExitStrncpyTable)) 2130*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit27), L(ExitStrncpyTable)) 2131*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit28), L(ExitStrncpyTable)) 2132*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit29), L(ExitStrncpyTable)) 2133*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit30), L(ExitStrncpyTable)) 2134*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit31), L(ExitStrncpyTable)) 2135*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit32), L(ExitStrncpyTable)) 2136*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(StrncpyExit33), L(ExitStrncpyTable)) 2137*8d67ca89SAndroid Build Coastguard Worker 2138*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2139*8d67ca89SAndroid Build Coastguard WorkerL(FillTable): 2140*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill0), L(FillTable)) 2141*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill1), L(FillTable)) 2142*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill2), L(FillTable)) 2143*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill3), L(FillTable)) 2144*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill4), L(FillTable)) 2145*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill5), L(FillTable)) 2146*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill6), L(FillTable)) 2147*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill7), L(FillTable)) 2148*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill8), L(FillTable)) 2149*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill9), L(FillTable)) 2150*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill10), L(FillTable)) 2151*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill11), L(FillTable)) 2152*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill12), L(FillTable)) 2153*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill13), L(FillTable)) 2154*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill14), L(FillTable)) 2155*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill15), L(FillTable)) 2156*8d67ca89SAndroid Build Coastguard Worker .int JMPTBL(L(Fill16), L(FillTable)) 2157*8d67ca89SAndroid Build Coastguard Worker#endif 2158