1*8d67ca89SAndroid Build Coastguard Worker/* 2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2010, 2011, 2012, 2013 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 cfi_remember_state 56*8d67ca89SAndroid Build Coastguard Worker# define cfi_remember_state .cfi_remember_state 57*8d67ca89SAndroid Build Coastguard Worker#endif 58*8d67ca89SAndroid Build Coastguard Worker 59*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore_state 60*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore_state .cfi_restore_state 61*8d67ca89SAndroid Build Coastguard Worker#endif 62*8d67ca89SAndroid Build Coastguard Worker 63*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY 64*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name) \ 65*8d67ca89SAndroid Build Coastguard Worker .type name, @function; \ 66*8d67ca89SAndroid Build Coastguard Worker .globl name; \ 67*8d67ca89SAndroid Build Coastguard Worker .p2align 4; \ 68*8d67ca89SAndroid Build Coastguard Workername: \ 69*8d67ca89SAndroid Build Coastguard Worker cfi_startproc 70*8d67ca89SAndroid Build Coastguard Worker#endif 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker#ifndef END 73*8d67ca89SAndroid Build Coastguard Worker# define END(name) \ 74*8d67ca89SAndroid Build Coastguard Worker cfi_endproc; \ 75*8d67ca89SAndroid Build Coastguard Worker .size name, .-name 76*8d67ca89SAndroid Build Coastguard Worker#endif 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker#ifndef MEMCMP 79*8d67ca89SAndroid Build Coastguard Worker# define MEMCMP memcmp_atom 80*8d67ca89SAndroid Build Coastguard Worker#endif 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG) \ 83*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (4); \ 84*8d67ca89SAndroid Build Coastguard Worker cfi_rel_offset (REG, 0) 85*8d67ca89SAndroid Build Coastguard Worker 86*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG) \ 87*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (-4); \ 88*8d67ca89SAndroid Build Coastguard Worker cfi_restore (REG) 89*8d67ca89SAndroid Build Coastguard Worker 90*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG) pushl REG; CFI_PUSH (REG) 91*8d67ca89SAndroid Build Coastguard Worker#define POP(REG) popl REG; CFI_POP (REG) 92*8d67ca89SAndroid Build Coastguard Worker 93*8d67ca89SAndroid Build Coastguard Worker#define PARMS 4 94*8d67ca89SAndroid Build Coastguard Worker#define BLK1 PARMS 95*8d67ca89SAndroid Build Coastguard Worker#define BLK2 BLK1+4 96*8d67ca89SAndroid Build Coastguard Worker#define LEN BLK2+4 97*8d67ca89SAndroid Build Coastguard Worker#define RETURN_END POP (%edi); POP (%esi); POP (%ebx); ret 98*8d67ca89SAndroid Build Coastguard Worker#define RETURN RETURN_END; cfi_restore_state; cfi_remember_state 99*8d67ca89SAndroid Build Coastguard Worker 100*8d67ca89SAndroid Build Coastguard Worker/* Warning! 101*8d67ca89SAndroid Build Coastguard Worker wmemcmp has to use SIGNED comparison for elements. 102*8d67ca89SAndroid Build Coastguard Worker memcmp has to use UNSIGNED comparison for elemnts. 103*8d67ca89SAndroid Build Coastguard Worker*/ 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker .text 106*8d67ca89SAndroid Build Coastguard WorkerENTRY (MEMCMP) 107*8d67ca89SAndroid Build Coastguard Worker movl LEN(%esp), %ecx 108*8d67ca89SAndroid Build Coastguard Worker 109*8d67ca89SAndroid Build Coastguard Worker#ifdef USE_WCHAR 110*8d67ca89SAndroid Build Coastguard Worker shl $2, %ecx 111*8d67ca89SAndroid Build Coastguard Worker jz L(zero) 112*8d67ca89SAndroid Build Coastguard Worker#elif defined USE_UTF16 113*8d67ca89SAndroid Build Coastguard Worker shl $1, %ecx 114*8d67ca89SAndroid Build Coastguard Worker jz L(zero) 115*8d67ca89SAndroid Build Coastguard Worker#endif 116*8d67ca89SAndroid Build Coastguard Worker 117*8d67ca89SAndroid Build Coastguard Worker movl BLK1(%esp), %eax 118*8d67ca89SAndroid Build Coastguard Worker cmp $48, %ecx 119*8d67ca89SAndroid Build Coastguard Worker movl BLK2(%esp), %edx 120*8d67ca89SAndroid Build Coastguard Worker jae L(48bytesormore) 121*8d67ca89SAndroid Build Coastguard Worker 122*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 123*8d67ca89SAndroid Build Coastguard Worker cmp $1, %ecx 124*8d67ca89SAndroid Build Coastguard Worker jbe L(less1bytes) 125*8d67ca89SAndroid Build Coastguard Worker#endif 126*8d67ca89SAndroid Build Coastguard Worker 127*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 128*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edx 129*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 130*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 131*8d67ca89SAndroid Build Coastguard Worker 132*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%ebx) 133*8d67ca89SAndroid Build Coastguard Worker 134*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 135*8d67ca89SAndroid Build Coastguard Worker .p2align 4 136*8d67ca89SAndroid Build Coastguard WorkerL(less1bytes): 137*8d67ca89SAndroid Build Coastguard Worker jb L(zero) 138*8d67ca89SAndroid Build Coastguard Worker movb (%eax), %cl 139*8d67ca89SAndroid Build Coastguard Worker cmp (%edx), %cl 140*8d67ca89SAndroid Build Coastguard Worker je L(zero) 141*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 142*8d67ca89SAndroid Build Coastguard Worker ja L(1bytesend) 143*8d67ca89SAndroid Build Coastguard Worker neg %eax 144*8d67ca89SAndroid Build Coastguard WorkerL(1bytesend): 145*8d67ca89SAndroid Build Coastguard Worker ret 146*8d67ca89SAndroid Build Coastguard Worker#endif 147*8d67ca89SAndroid Build Coastguard Worker 148*8d67ca89SAndroid Build Coastguard Worker .p2align 4 149*8d67ca89SAndroid Build Coastguard WorkerL(zero): 150*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 151*8d67ca89SAndroid Build Coastguard Worker ret 152*8d67ca89SAndroid Build Coastguard Worker 153*8d67ca89SAndroid Build Coastguard Worker .p2align 4 154*8d67ca89SAndroid Build Coastguard WorkerL(48bytesormore): 155*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 156*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 157*8d67ca89SAndroid Build Coastguard Worker PUSH (%edi) 158*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 159*8d67ca89SAndroid Build Coastguard Worker movdqu (%eax), %xmm3 160*8d67ca89SAndroid Build Coastguard Worker movdqu (%edx), %xmm0 161*8d67ca89SAndroid Build Coastguard Worker movl %eax, %edi 162*8d67ca89SAndroid Build Coastguard Worker movl %edx, %esi 163*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm3 164*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 165*8d67ca89SAndroid Build Coastguard Worker lea 16(%edi), %edi 166*8d67ca89SAndroid Build Coastguard Worker 167*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 168*8d67ca89SAndroid Build Coastguard Worker lea 16(%esi), %esi 169*8d67ca89SAndroid Build Coastguard Worker jnz L(less16bytes) 170*8d67ca89SAndroid Build Coastguard Worker mov %edi, %edx 171*8d67ca89SAndroid Build Coastguard Worker and $0xf, %edx 172*8d67ca89SAndroid Build Coastguard Worker xor %edx, %edi 173*8d67ca89SAndroid Build Coastguard Worker sub %edx, %esi 174*8d67ca89SAndroid Build Coastguard Worker add %edx, %ecx 175*8d67ca89SAndroid Build Coastguard Worker mov %esi, %edx 176*8d67ca89SAndroid Build Coastguard Worker and $0xf, %edx 177*8d67ca89SAndroid Build Coastguard Worker jz L(shr_0) 178*8d67ca89SAndroid Build Coastguard Worker xor %edx, %esi 179*8d67ca89SAndroid Build Coastguard Worker 180*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 181*8d67ca89SAndroid Build Coastguard Worker cmp $8, %edx 182*8d67ca89SAndroid Build Coastguard Worker jae L(next_unaligned_table) 183*8d67ca89SAndroid Build Coastguard Worker cmp $0, %edx 184*8d67ca89SAndroid Build Coastguard Worker je L(shr_0) 185*8d67ca89SAndroid Build Coastguard Worker cmp $1, %edx 186*8d67ca89SAndroid Build Coastguard Worker je L(shr_1) 187*8d67ca89SAndroid Build Coastguard Worker cmp $2, %edx 188*8d67ca89SAndroid Build Coastguard Worker je L(shr_2) 189*8d67ca89SAndroid Build Coastguard Worker cmp $3, %edx 190*8d67ca89SAndroid Build Coastguard Worker je L(shr_3) 191*8d67ca89SAndroid Build Coastguard Worker cmp $4, %edx 192*8d67ca89SAndroid Build Coastguard Worker je L(shr_4) 193*8d67ca89SAndroid Build Coastguard Worker cmp $5, %edx 194*8d67ca89SAndroid Build Coastguard Worker je L(shr_5) 195*8d67ca89SAndroid Build Coastguard Worker cmp $6, %edx 196*8d67ca89SAndroid Build Coastguard Worker je L(shr_6) 197*8d67ca89SAndroid Build Coastguard Worker jmp L(shr_7) 198*8d67ca89SAndroid Build Coastguard Worker 199*8d67ca89SAndroid Build Coastguard Worker .p2align 2 200*8d67ca89SAndroid Build Coastguard WorkerL(next_unaligned_table): 201*8d67ca89SAndroid Build Coastguard Worker cmp $8, %edx 202*8d67ca89SAndroid Build Coastguard Worker je L(shr_8) 203*8d67ca89SAndroid Build Coastguard Worker cmp $9, %edx 204*8d67ca89SAndroid Build Coastguard Worker je L(shr_9) 205*8d67ca89SAndroid Build Coastguard Worker cmp $10, %edx 206*8d67ca89SAndroid Build Coastguard Worker je L(shr_10) 207*8d67ca89SAndroid Build Coastguard Worker cmp $11, %edx 208*8d67ca89SAndroid Build Coastguard Worker je L(shr_11) 209*8d67ca89SAndroid Build Coastguard Worker cmp $12, %edx 210*8d67ca89SAndroid Build Coastguard Worker je L(shr_12) 211*8d67ca89SAndroid Build Coastguard Worker cmp $13, %edx 212*8d67ca89SAndroid Build Coastguard Worker je L(shr_13) 213*8d67ca89SAndroid Build Coastguard Worker cmp $14, %edx 214*8d67ca89SAndroid Build Coastguard Worker je L(shr_14) 215*8d67ca89SAndroid Build Coastguard Worker jmp L(shr_15) 216*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) 217*8d67ca89SAndroid Build Coastguard Worker cmp $0, %edx 218*8d67ca89SAndroid Build Coastguard Worker je L(shr_0) 219*8d67ca89SAndroid Build Coastguard Worker cmp $4, %edx 220*8d67ca89SAndroid Build Coastguard Worker je L(shr_4) 221*8d67ca89SAndroid Build Coastguard Worker cmp $8, %edx 222*8d67ca89SAndroid Build Coastguard Worker je L(shr_8) 223*8d67ca89SAndroid Build Coastguard Worker jmp L(shr_12) 224*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) 225*8d67ca89SAndroid Build Coastguard Worker cmp $0, %edx 226*8d67ca89SAndroid Build Coastguard Worker je L(shr_0) 227*8d67ca89SAndroid Build Coastguard Worker cmp $2, %edx 228*8d67ca89SAndroid Build Coastguard Worker je L(shr_2) 229*8d67ca89SAndroid Build Coastguard Worker cmp $4, %edx 230*8d67ca89SAndroid Build Coastguard Worker je L(shr_4) 231*8d67ca89SAndroid Build Coastguard Worker cmp $6, %edx 232*8d67ca89SAndroid Build Coastguard Worker je L(shr_6) 233*8d67ca89SAndroid Build Coastguard Worker cmp $8, %edx 234*8d67ca89SAndroid Build Coastguard Worker je L(shr_8) 235*8d67ca89SAndroid Build Coastguard Worker cmp $10, %edx 236*8d67ca89SAndroid Build Coastguard Worker je L(shr_10) 237*8d67ca89SAndroid Build Coastguard Worker cmp $12, %edx 238*8d67ca89SAndroid Build Coastguard Worker je L(shr_12) 239*8d67ca89SAndroid Build Coastguard Worker jmp L(shr_14) 240*8d67ca89SAndroid Build Coastguard Worker#endif 241*8d67ca89SAndroid Build Coastguard Worker 242*8d67ca89SAndroid Build Coastguard Worker .p2align 4 243*8d67ca89SAndroid Build Coastguard WorkerL(shr_0): 244*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 245*8d67ca89SAndroid Build Coastguard Worker jae L(shr_0_gobble) 246*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 247*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 248*8d67ca89SAndroid Build Coastguard Worker movaps (%esi), %xmm1 249*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 250*8d67ca89SAndroid Build Coastguard Worker movaps 16(%esi), %xmm2 251*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm2 252*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm2 253*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 254*8d67ca89SAndroid Build Coastguard Worker add $32, %edi 255*8d67ca89SAndroid Build Coastguard Worker add $32, %esi 256*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 257*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 258*8d67ca89SAndroid Build Coastguard Worker 259*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 260*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %esi,1), %edx 261*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 262*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 263*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 264*8d67ca89SAndroid Build Coastguard Worker 265*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 266*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 267*8d67ca89SAndroid Build Coastguard Worker .p2align 4 268*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble): 269*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 270*8d67ca89SAndroid Build Coastguard Worker movdqa (%esi), %xmm0 271*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 272*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 273*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 274*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm2 275*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm2 276*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble_loop): 277*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm2 278*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 279*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 280*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 281*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm0 282*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm2 283*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 284*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 285*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm2 286*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 287*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 288*8d67ca89SAndroid Build Coastguard Worker jz L(shr_0_gobble_loop) 289*8d67ca89SAndroid Build Coastguard Worker 290*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm2 291*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 292*8d67ca89SAndroid Build Coastguard Worker jge L(shr_0_gobble_loop_next) 293*8d67ca89SAndroid Build Coastguard Worker inc %edx 294*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 295*8d67ca89SAndroid Build Coastguard WorkerL(shr_0_gobble_loop_next): 296*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 297*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 298*8d67ca89SAndroid Build Coastguard Worker 299*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 300*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 301*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 302*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 303*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 304*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 305*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 306*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %esi,1), %edx 307*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 308*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 309*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 310*8d67ca89SAndroid Build Coastguard Worker 311*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 312*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 313*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 314*8d67ca89SAndroid Build Coastguard Worker .p2align 4 315*8d67ca89SAndroid Build Coastguard WorkerL(shr_1): 316*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 317*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 318*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 319*8d67ca89SAndroid Build Coastguard Worker jae L(shr_1_gobble) 320*8d67ca89SAndroid Build Coastguard Worker 321*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 322*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 323*8d67ca89SAndroid Build Coastguard Worker palignr $1,(%esi), %xmm1 324*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 325*8d67ca89SAndroid Build Coastguard Worker 326*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 327*8d67ca89SAndroid Build Coastguard Worker palignr $1,%xmm2, %xmm3 328*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 329*8d67ca89SAndroid Build Coastguard Worker 330*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 331*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 332*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 333*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 334*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 335*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 336*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 337*8d67ca89SAndroid Build Coastguard Worker lea 1(%ecx, %esi,1), %edx 338*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 339*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 340*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 341*8d67ca89SAndroid Build Coastguard Worker 342*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 343*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 344*8d67ca89SAndroid Build Coastguard Worker .p2align 4 345*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble): 346*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 347*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 348*8d67ca89SAndroid Build Coastguard Worker palignr $1,(%esi), %xmm0 349*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 350*8d67ca89SAndroid Build Coastguard Worker 351*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 352*8d67ca89SAndroid Build Coastguard Worker palignr $1,16(%esi), %xmm3 353*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 354*8d67ca89SAndroid Build Coastguard Worker 355*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble_loop): 356*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 357*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 358*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 359*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 360*8d67ca89SAndroid Build Coastguard Worker 361*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 362*8d67ca89SAndroid Build Coastguard Worker palignr $1,48(%esi), %xmm3 363*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 364*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 365*8d67ca89SAndroid Build Coastguard Worker palignr $1,32(%esi), %xmm0 366*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 367*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 368*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 369*8d67ca89SAndroid Build Coastguard Worker 370*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 371*8d67ca89SAndroid Build Coastguard Worker jz L(shr_1_gobble_loop) 372*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 373*8d67ca89SAndroid Build Coastguard Worker 374*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 375*8d67ca89SAndroid Build Coastguard Worker jge L(shr_1_gobble_next) 376*8d67ca89SAndroid Build Coastguard Worker inc %edx 377*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 378*8d67ca89SAndroid Build Coastguard WorkerL(shr_1_gobble_next): 379*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 380*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 381*8d67ca89SAndroid Build Coastguard Worker 382*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 383*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 384*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 385*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 386*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 387*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 388*8d67ca89SAndroid Build Coastguard Worker 389*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 390*8d67ca89SAndroid Build Coastguard Worker lea 1(%ecx, %esi,1), %edx 391*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 392*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 393*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 394*8d67ca89SAndroid Build Coastguard Worker#endif 395*8d67ca89SAndroid Build Coastguard Worker 396*8d67ca89SAndroid Build Coastguard Worker 397*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) 398*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 399*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 400*8d67ca89SAndroid Build Coastguard Worker .p2align 4 401*8d67ca89SAndroid Build Coastguard WorkerL(shr_2): 402*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 403*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 404*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 405*8d67ca89SAndroid Build Coastguard Worker jae L(shr_2_gobble) 406*8d67ca89SAndroid Build Coastguard Worker 407*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 408*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 409*8d67ca89SAndroid Build Coastguard Worker palignr $2,(%esi), %xmm1 410*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 411*8d67ca89SAndroid Build Coastguard Worker 412*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 413*8d67ca89SAndroid Build Coastguard Worker palignr $2,%xmm2, %xmm3 414*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 415*8d67ca89SAndroid Build Coastguard Worker 416*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 417*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 418*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 419*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 420*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 421*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 422*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 423*8d67ca89SAndroid Build Coastguard Worker lea 2(%ecx, %esi,1), %edx 424*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 425*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 426*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 427*8d67ca89SAndroid Build Coastguard Worker 428*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 429*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 430*8d67ca89SAndroid Build Coastguard Worker .p2align 4 431*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble): 432*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 433*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 434*8d67ca89SAndroid Build Coastguard Worker palignr $2,(%esi), %xmm0 435*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 436*8d67ca89SAndroid Build Coastguard Worker 437*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 438*8d67ca89SAndroid Build Coastguard Worker palignr $2,16(%esi), %xmm3 439*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 440*8d67ca89SAndroid Build Coastguard Worker 441*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble_loop): 442*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 443*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 444*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 445*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 446*8d67ca89SAndroid Build Coastguard Worker 447*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 448*8d67ca89SAndroid Build Coastguard Worker palignr $2,48(%esi), %xmm3 449*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 450*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 451*8d67ca89SAndroid Build Coastguard Worker palignr $2,32(%esi), %xmm0 452*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 453*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 454*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 455*8d67ca89SAndroid Build Coastguard Worker 456*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 457*8d67ca89SAndroid Build Coastguard Worker jz L(shr_2_gobble_loop) 458*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 459*8d67ca89SAndroid Build Coastguard Worker 460*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 461*8d67ca89SAndroid Build Coastguard Worker jge L(shr_2_gobble_next) 462*8d67ca89SAndroid Build Coastguard Worker inc %edx 463*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 464*8d67ca89SAndroid Build Coastguard WorkerL(shr_2_gobble_next): 465*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 466*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 467*8d67ca89SAndroid Build Coastguard Worker 468*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 469*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 470*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 471*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 472*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 473*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 474*8d67ca89SAndroid Build Coastguard Worker 475*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 476*8d67ca89SAndroid Build Coastguard Worker lea 2(%ecx, %esi,1), %edx 477*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 478*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 479*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 480*8d67ca89SAndroid Build Coastguard Worker#endif 481*8d67ca89SAndroid Build Coastguard Worker 482*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 483*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 484*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 485*8d67ca89SAndroid Build Coastguard Worker .p2align 4 486*8d67ca89SAndroid Build Coastguard WorkerL(shr_3): 487*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 488*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 489*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 490*8d67ca89SAndroid Build Coastguard Worker jae L(shr_3_gobble) 491*8d67ca89SAndroid Build Coastguard Worker 492*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 493*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 494*8d67ca89SAndroid Build Coastguard Worker palignr $3,(%esi), %xmm1 495*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 496*8d67ca89SAndroid Build Coastguard Worker 497*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 498*8d67ca89SAndroid Build Coastguard Worker palignr $3,%xmm2, %xmm3 499*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 500*8d67ca89SAndroid Build Coastguard Worker 501*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 502*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 503*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 504*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 505*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 506*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 507*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 508*8d67ca89SAndroid Build Coastguard Worker lea 3(%ecx, %esi,1), %edx 509*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 510*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 511*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 512*8d67ca89SAndroid Build Coastguard Worker 513*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 514*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 515*8d67ca89SAndroid Build Coastguard Worker .p2align 4 516*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble): 517*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 518*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 519*8d67ca89SAndroid Build Coastguard Worker palignr $3,(%esi), %xmm0 520*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 521*8d67ca89SAndroid Build Coastguard Worker 522*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 523*8d67ca89SAndroid Build Coastguard Worker palignr $3,16(%esi), %xmm3 524*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 525*8d67ca89SAndroid Build Coastguard Worker 526*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble_loop): 527*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 528*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 529*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 530*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 531*8d67ca89SAndroid Build Coastguard Worker 532*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 533*8d67ca89SAndroid Build Coastguard Worker palignr $3,48(%esi), %xmm3 534*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 535*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 536*8d67ca89SAndroid Build Coastguard Worker palignr $3,32(%esi), %xmm0 537*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 538*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 539*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 540*8d67ca89SAndroid Build Coastguard Worker 541*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 542*8d67ca89SAndroid Build Coastguard Worker jz L(shr_3_gobble_loop) 543*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 544*8d67ca89SAndroid Build Coastguard Worker 545*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 546*8d67ca89SAndroid Build Coastguard Worker jge L(shr_3_gobble_next) 547*8d67ca89SAndroid Build Coastguard Worker inc %edx 548*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 549*8d67ca89SAndroid Build Coastguard WorkerL(shr_3_gobble_next): 550*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 551*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 552*8d67ca89SAndroid Build Coastguard Worker 553*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 554*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 555*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 556*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 557*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 558*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 559*8d67ca89SAndroid Build Coastguard Worker 560*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 561*8d67ca89SAndroid Build Coastguard Worker lea 3(%ecx, %esi,1), %edx 562*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 563*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 564*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 565*8d67ca89SAndroid Build Coastguard Worker#endif 566*8d67ca89SAndroid Build Coastguard Worker 567*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 568*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 569*8d67ca89SAndroid Build Coastguard Worker .p2align 4 570*8d67ca89SAndroid Build Coastguard WorkerL(shr_4): 571*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 572*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 573*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 574*8d67ca89SAndroid Build Coastguard Worker jae L(shr_4_gobble) 575*8d67ca89SAndroid Build Coastguard Worker 576*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 577*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 578*8d67ca89SAndroid Build Coastguard Worker palignr $4,(%esi), %xmm1 579*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 580*8d67ca89SAndroid Build Coastguard Worker 581*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 582*8d67ca89SAndroid Build Coastguard Worker palignr $4,%xmm2, %xmm3 583*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 584*8d67ca89SAndroid Build Coastguard Worker 585*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 586*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 587*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 588*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 589*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 590*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 591*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 592*8d67ca89SAndroid Build Coastguard Worker lea 4(%ecx, %esi,1), %edx 593*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 594*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 595*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 596*8d67ca89SAndroid Build Coastguard Worker 597*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 598*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 599*8d67ca89SAndroid Build Coastguard Worker .p2align 4 600*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble): 601*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 602*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 603*8d67ca89SAndroid Build Coastguard Worker palignr $4,(%esi), %xmm0 604*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 605*8d67ca89SAndroid Build Coastguard Worker 606*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 607*8d67ca89SAndroid Build Coastguard Worker palignr $4,16(%esi), %xmm3 608*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 609*8d67ca89SAndroid Build Coastguard Worker 610*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble_loop): 611*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 612*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 613*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 614*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 615*8d67ca89SAndroid Build Coastguard Worker 616*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 617*8d67ca89SAndroid Build Coastguard Worker palignr $4,48(%esi), %xmm3 618*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 619*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 620*8d67ca89SAndroid Build Coastguard Worker palignr $4,32(%esi), %xmm0 621*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 622*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 623*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 624*8d67ca89SAndroid Build Coastguard Worker 625*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 626*8d67ca89SAndroid Build Coastguard Worker jz L(shr_4_gobble_loop) 627*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 628*8d67ca89SAndroid Build Coastguard Worker 629*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 630*8d67ca89SAndroid Build Coastguard Worker jge L(shr_4_gobble_next) 631*8d67ca89SAndroid Build Coastguard Worker inc %edx 632*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 633*8d67ca89SAndroid Build Coastguard WorkerL(shr_4_gobble_next): 634*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 635*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 636*8d67ca89SAndroid Build Coastguard Worker 637*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 638*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 639*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 640*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 641*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 642*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 643*8d67ca89SAndroid Build Coastguard Worker 644*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 645*8d67ca89SAndroid Build Coastguard Worker lea 4(%ecx, %esi,1), %edx 646*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 647*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 648*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 649*8d67ca89SAndroid Build Coastguard Worker 650*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 651*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 652*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 653*8d67ca89SAndroid Build Coastguard Worker .p2align 4 654*8d67ca89SAndroid Build Coastguard WorkerL(shr_5): 655*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 656*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 657*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 658*8d67ca89SAndroid Build Coastguard Worker jae L(shr_5_gobble) 659*8d67ca89SAndroid Build Coastguard Worker 660*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 661*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 662*8d67ca89SAndroid Build Coastguard Worker palignr $5,(%esi), %xmm1 663*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 664*8d67ca89SAndroid Build Coastguard Worker 665*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 666*8d67ca89SAndroid Build Coastguard Worker palignr $5,%xmm2, %xmm3 667*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 668*8d67ca89SAndroid Build Coastguard Worker 669*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 670*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 671*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 672*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 673*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 674*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 675*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 676*8d67ca89SAndroid Build Coastguard Worker lea 5(%ecx, %esi,1), %edx 677*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 678*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 679*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 680*8d67ca89SAndroid Build Coastguard Worker 681*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 682*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 683*8d67ca89SAndroid Build Coastguard Worker .p2align 4 684*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble): 685*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 686*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 687*8d67ca89SAndroid Build Coastguard Worker palignr $5,(%esi), %xmm0 688*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 689*8d67ca89SAndroid Build Coastguard Worker 690*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 691*8d67ca89SAndroid Build Coastguard Worker palignr $5,16(%esi), %xmm3 692*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 693*8d67ca89SAndroid Build Coastguard Worker 694*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble_loop): 695*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 696*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 697*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 698*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 699*8d67ca89SAndroid Build Coastguard Worker 700*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 701*8d67ca89SAndroid Build Coastguard Worker palignr $5,48(%esi), %xmm3 702*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 703*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 704*8d67ca89SAndroid Build Coastguard Worker palignr $5,32(%esi), %xmm0 705*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 706*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 707*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 708*8d67ca89SAndroid Build Coastguard Worker 709*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 710*8d67ca89SAndroid Build Coastguard Worker jz L(shr_5_gobble_loop) 711*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 712*8d67ca89SAndroid Build Coastguard Worker 713*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 714*8d67ca89SAndroid Build Coastguard Worker jge L(shr_5_gobble_next) 715*8d67ca89SAndroid Build Coastguard Worker inc %edx 716*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 717*8d67ca89SAndroid Build Coastguard WorkerL(shr_5_gobble_next): 718*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 719*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 720*8d67ca89SAndroid Build Coastguard Worker 721*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 722*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 723*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 724*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 725*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 726*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 727*8d67ca89SAndroid Build Coastguard Worker 728*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 729*8d67ca89SAndroid Build Coastguard Worker lea 5(%ecx, %esi,1), %edx 730*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 731*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 732*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 733*8d67ca89SAndroid Build Coastguard Worker#endif 734*8d67ca89SAndroid Build Coastguard Worker 735*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) 736*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 737*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 738*8d67ca89SAndroid Build Coastguard Worker .p2align 4 739*8d67ca89SAndroid Build Coastguard WorkerL(shr_6): 740*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 741*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 742*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 743*8d67ca89SAndroid Build Coastguard Worker jae L(shr_6_gobble) 744*8d67ca89SAndroid Build Coastguard Worker 745*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 746*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 747*8d67ca89SAndroid Build Coastguard Worker palignr $6,(%esi), %xmm1 748*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 749*8d67ca89SAndroid Build Coastguard Worker 750*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 751*8d67ca89SAndroid Build Coastguard Worker palignr $6,%xmm2, %xmm3 752*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 753*8d67ca89SAndroid Build Coastguard Worker 754*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 755*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 756*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 757*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 758*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 759*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 760*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 761*8d67ca89SAndroid Build Coastguard Worker lea 6(%ecx, %esi,1), %edx 762*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 763*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 764*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 765*8d67ca89SAndroid Build Coastguard Worker 766*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 767*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 768*8d67ca89SAndroid Build Coastguard Worker .p2align 4 769*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble): 770*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 771*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 772*8d67ca89SAndroid Build Coastguard Worker palignr $6,(%esi), %xmm0 773*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 774*8d67ca89SAndroid Build Coastguard Worker 775*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 776*8d67ca89SAndroid Build Coastguard Worker palignr $6,16(%esi), %xmm3 777*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 778*8d67ca89SAndroid Build Coastguard Worker 779*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble_loop): 780*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 781*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 782*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 783*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 784*8d67ca89SAndroid Build Coastguard Worker 785*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 786*8d67ca89SAndroid Build Coastguard Worker palignr $6,48(%esi), %xmm3 787*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 788*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 789*8d67ca89SAndroid Build Coastguard Worker palignr $6,32(%esi), %xmm0 790*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 791*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 792*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 793*8d67ca89SAndroid Build Coastguard Worker 794*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 795*8d67ca89SAndroid Build Coastguard Worker jz L(shr_6_gobble_loop) 796*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 797*8d67ca89SAndroid Build Coastguard Worker 798*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 799*8d67ca89SAndroid Build Coastguard Worker jge L(shr_6_gobble_next) 800*8d67ca89SAndroid Build Coastguard Worker inc %edx 801*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 802*8d67ca89SAndroid Build Coastguard WorkerL(shr_6_gobble_next): 803*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 804*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 805*8d67ca89SAndroid Build Coastguard Worker 806*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 807*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 808*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 809*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 810*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 811*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 812*8d67ca89SAndroid Build Coastguard Worker 813*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 814*8d67ca89SAndroid Build Coastguard Worker lea 6(%ecx, %esi,1), %edx 815*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 816*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 817*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 818*8d67ca89SAndroid Build Coastguard Worker#endif 819*8d67ca89SAndroid Build Coastguard Worker 820*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 821*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 822*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 823*8d67ca89SAndroid Build Coastguard Worker .p2align 4 824*8d67ca89SAndroid Build Coastguard WorkerL(shr_7): 825*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 826*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 827*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 828*8d67ca89SAndroid Build Coastguard Worker jae L(shr_7_gobble) 829*8d67ca89SAndroid Build Coastguard Worker 830*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 831*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 832*8d67ca89SAndroid Build Coastguard Worker palignr $7,(%esi), %xmm1 833*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 834*8d67ca89SAndroid Build Coastguard Worker 835*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 836*8d67ca89SAndroid Build Coastguard Worker palignr $7,%xmm2, %xmm3 837*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 838*8d67ca89SAndroid Build Coastguard Worker 839*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 840*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 841*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 842*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 843*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 844*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 845*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 846*8d67ca89SAndroid Build Coastguard Worker lea 7(%ecx, %esi,1), %edx 847*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 848*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 849*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 850*8d67ca89SAndroid Build Coastguard Worker 851*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 852*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 853*8d67ca89SAndroid Build Coastguard Worker .p2align 4 854*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble): 855*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 856*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 857*8d67ca89SAndroid Build Coastguard Worker palignr $7,(%esi), %xmm0 858*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 859*8d67ca89SAndroid Build Coastguard Worker 860*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 861*8d67ca89SAndroid Build Coastguard Worker palignr $7,16(%esi), %xmm3 862*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 863*8d67ca89SAndroid Build Coastguard Worker 864*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble_loop): 865*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 866*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 867*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 868*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 869*8d67ca89SAndroid Build Coastguard Worker 870*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 871*8d67ca89SAndroid Build Coastguard Worker palignr $7,48(%esi), %xmm3 872*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 873*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 874*8d67ca89SAndroid Build Coastguard Worker palignr $7,32(%esi), %xmm0 875*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 876*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 877*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 878*8d67ca89SAndroid Build Coastguard Worker 879*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 880*8d67ca89SAndroid Build Coastguard Worker jz L(shr_7_gobble_loop) 881*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 882*8d67ca89SAndroid Build Coastguard Worker 883*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 884*8d67ca89SAndroid Build Coastguard Worker jge L(shr_7_gobble_next) 885*8d67ca89SAndroid Build Coastguard Worker inc %edx 886*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 887*8d67ca89SAndroid Build Coastguard WorkerL(shr_7_gobble_next): 888*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 889*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 890*8d67ca89SAndroid Build Coastguard Worker 891*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 892*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 893*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 894*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 895*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 896*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 897*8d67ca89SAndroid Build Coastguard Worker 898*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 899*8d67ca89SAndroid Build Coastguard Worker lea 7(%ecx, %esi,1), %edx 900*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 901*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 902*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 903*8d67ca89SAndroid Build Coastguard Worker#endif 904*8d67ca89SAndroid Build Coastguard Worker 905*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 906*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 907*8d67ca89SAndroid Build Coastguard Worker .p2align 4 908*8d67ca89SAndroid Build Coastguard WorkerL(shr_8): 909*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 910*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 911*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 912*8d67ca89SAndroid Build Coastguard Worker jae L(shr_8_gobble) 913*8d67ca89SAndroid Build Coastguard Worker 914*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 915*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 916*8d67ca89SAndroid Build Coastguard Worker palignr $8,(%esi), %xmm1 917*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 918*8d67ca89SAndroid Build Coastguard Worker 919*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 920*8d67ca89SAndroid Build Coastguard Worker palignr $8,%xmm2, %xmm3 921*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 922*8d67ca89SAndroid Build Coastguard Worker 923*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 924*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 925*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 926*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 927*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 928*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 929*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 930*8d67ca89SAndroid Build Coastguard Worker lea 8(%ecx, %esi,1), %edx 931*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 932*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 933*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 934*8d67ca89SAndroid Build Coastguard Worker 935*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 936*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 937*8d67ca89SAndroid Build Coastguard Worker .p2align 4 938*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble): 939*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 940*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 941*8d67ca89SAndroid Build Coastguard Worker palignr $8,(%esi), %xmm0 942*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 943*8d67ca89SAndroid Build Coastguard Worker 944*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 945*8d67ca89SAndroid Build Coastguard Worker palignr $8,16(%esi), %xmm3 946*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 947*8d67ca89SAndroid Build Coastguard Worker 948*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble_loop): 949*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 950*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 951*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 952*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 953*8d67ca89SAndroid Build Coastguard Worker 954*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 955*8d67ca89SAndroid Build Coastguard Worker palignr $8,48(%esi), %xmm3 956*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 957*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 958*8d67ca89SAndroid Build Coastguard Worker palignr $8,32(%esi), %xmm0 959*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 960*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 961*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 962*8d67ca89SAndroid Build Coastguard Worker 963*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 964*8d67ca89SAndroid Build Coastguard Worker jz L(shr_8_gobble_loop) 965*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 966*8d67ca89SAndroid Build Coastguard Worker 967*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 968*8d67ca89SAndroid Build Coastguard Worker jge L(shr_8_gobble_next) 969*8d67ca89SAndroid Build Coastguard Worker inc %edx 970*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 971*8d67ca89SAndroid Build Coastguard WorkerL(shr_8_gobble_next): 972*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 973*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 974*8d67ca89SAndroid Build Coastguard Worker 975*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 976*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 977*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 978*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 979*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 980*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 981*8d67ca89SAndroid Build Coastguard Worker 982*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 983*8d67ca89SAndroid Build Coastguard Worker lea 8(%ecx, %esi,1), %edx 984*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 985*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 986*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 987*8d67ca89SAndroid Build Coastguard Worker 988*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 989*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 990*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 991*8d67ca89SAndroid Build Coastguard Worker .p2align 4 992*8d67ca89SAndroid Build Coastguard WorkerL(shr_9): 993*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 994*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 995*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 996*8d67ca89SAndroid Build Coastguard Worker jae L(shr_9_gobble) 997*8d67ca89SAndroid Build Coastguard Worker 998*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 999*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1000*8d67ca89SAndroid Build Coastguard Worker palignr $9,(%esi), %xmm1 1001*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1002*8d67ca89SAndroid Build Coastguard Worker 1003*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1004*8d67ca89SAndroid Build Coastguard Worker palignr $9,%xmm2, %xmm3 1005*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1006*8d67ca89SAndroid Build Coastguard Worker 1007*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1008*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1009*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1010*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1011*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1012*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1013*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1014*8d67ca89SAndroid Build Coastguard Worker lea 9(%ecx, %esi,1), %edx 1015*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1016*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1017*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1018*8d67ca89SAndroid Build Coastguard Worker 1019*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1020*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1021*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1022*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble): 1023*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1024*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1025*8d67ca89SAndroid Build Coastguard Worker palignr $9,(%esi), %xmm0 1026*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1027*8d67ca89SAndroid Build Coastguard Worker 1028*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1029*8d67ca89SAndroid Build Coastguard Worker palignr $9,16(%esi), %xmm3 1030*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1031*8d67ca89SAndroid Build Coastguard Worker 1032*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble_loop): 1033*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1034*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1035*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1036*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1037*8d67ca89SAndroid Build Coastguard Worker 1038*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1039*8d67ca89SAndroid Build Coastguard Worker palignr $9,48(%esi), %xmm3 1040*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1041*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1042*8d67ca89SAndroid Build Coastguard Worker palignr $9,32(%esi), %xmm0 1043*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1044*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1045*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1046*8d67ca89SAndroid Build Coastguard Worker 1047*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1048*8d67ca89SAndroid Build Coastguard Worker jz L(shr_9_gobble_loop) 1049*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1050*8d67ca89SAndroid Build Coastguard Worker 1051*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1052*8d67ca89SAndroid Build Coastguard Worker jge L(shr_9_gobble_next) 1053*8d67ca89SAndroid Build Coastguard Worker inc %edx 1054*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1055*8d67ca89SAndroid Build Coastguard WorkerL(shr_9_gobble_next): 1056*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1057*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1058*8d67ca89SAndroid Build Coastguard Worker 1059*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1060*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1061*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1062*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1063*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1064*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1065*8d67ca89SAndroid Build Coastguard Worker 1066*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1067*8d67ca89SAndroid Build Coastguard Worker lea 9(%ecx, %esi,1), %edx 1068*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1069*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1070*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1071*8d67ca89SAndroid Build Coastguard Worker#endif 1072*8d67ca89SAndroid Build Coastguard Worker 1073*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) 1074*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1075*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1076*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1077*8d67ca89SAndroid Build Coastguard WorkerL(shr_10): 1078*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1079*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1080*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1081*8d67ca89SAndroid Build Coastguard Worker jae L(shr_10_gobble) 1082*8d67ca89SAndroid Build Coastguard Worker 1083*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1084*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1085*8d67ca89SAndroid Build Coastguard Worker palignr $10, (%esi), %xmm1 1086*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1087*8d67ca89SAndroid Build Coastguard Worker 1088*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1089*8d67ca89SAndroid Build Coastguard Worker palignr $10,%xmm2, %xmm3 1090*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1091*8d67ca89SAndroid Build Coastguard Worker 1092*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1093*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1094*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1095*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1096*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1097*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1098*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1099*8d67ca89SAndroid Build Coastguard Worker lea 10(%ecx, %esi,1), %edx 1100*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1101*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1102*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1103*8d67ca89SAndroid Build Coastguard Worker 1104*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1105*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1106*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1107*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble): 1108*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1109*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1110*8d67ca89SAndroid Build Coastguard Worker palignr $10, (%esi), %xmm0 1111*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1112*8d67ca89SAndroid Build Coastguard Worker 1113*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1114*8d67ca89SAndroid Build Coastguard Worker palignr $10, 16(%esi), %xmm3 1115*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1116*8d67ca89SAndroid Build Coastguard Worker 1117*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble_loop): 1118*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1119*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1120*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1121*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1122*8d67ca89SAndroid Build Coastguard Worker 1123*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1124*8d67ca89SAndroid Build Coastguard Worker palignr $10,48(%esi), %xmm3 1125*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1126*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1127*8d67ca89SAndroid Build Coastguard Worker palignr $10,32(%esi), %xmm0 1128*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1129*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1130*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1131*8d67ca89SAndroid Build Coastguard Worker 1132*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1133*8d67ca89SAndroid Build Coastguard Worker jz L(shr_10_gobble_loop) 1134*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1135*8d67ca89SAndroid Build Coastguard Worker 1136*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1137*8d67ca89SAndroid Build Coastguard Worker jge L(shr_10_gobble_next) 1138*8d67ca89SAndroid Build Coastguard Worker inc %edx 1139*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1140*8d67ca89SAndroid Build Coastguard WorkerL(shr_10_gobble_next): 1141*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1142*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1143*8d67ca89SAndroid Build Coastguard Worker 1144*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1145*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1146*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1147*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1148*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1149*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1150*8d67ca89SAndroid Build Coastguard Worker 1151*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1152*8d67ca89SAndroid Build Coastguard Worker lea 10(%ecx, %esi,1), %edx 1153*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1154*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1155*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1156*8d67ca89SAndroid Build Coastguard Worker#endif 1157*8d67ca89SAndroid Build Coastguard Worker 1158*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1159*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1160*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1161*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1162*8d67ca89SAndroid Build Coastguard WorkerL(shr_11): 1163*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1164*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1165*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1166*8d67ca89SAndroid Build Coastguard Worker jae L(shr_11_gobble) 1167*8d67ca89SAndroid Build Coastguard Worker 1168*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1169*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1170*8d67ca89SAndroid Build Coastguard Worker palignr $11, (%esi), %xmm1 1171*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1172*8d67ca89SAndroid Build Coastguard Worker 1173*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1174*8d67ca89SAndroid Build Coastguard Worker palignr $11, %xmm2, %xmm3 1175*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1176*8d67ca89SAndroid Build Coastguard Worker 1177*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1178*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1179*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1180*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1181*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1182*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1183*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1184*8d67ca89SAndroid Build Coastguard Worker lea 11(%ecx, %esi,1), %edx 1185*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1186*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1187*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1188*8d67ca89SAndroid Build Coastguard Worker 1189*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1190*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1191*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1192*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble): 1193*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1194*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1195*8d67ca89SAndroid Build Coastguard Worker palignr $11, (%esi), %xmm0 1196*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1197*8d67ca89SAndroid Build Coastguard Worker 1198*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1199*8d67ca89SAndroid Build Coastguard Worker palignr $11, 16(%esi), %xmm3 1200*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1201*8d67ca89SAndroid Build Coastguard Worker 1202*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble_loop): 1203*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1204*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1205*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1206*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1207*8d67ca89SAndroid Build Coastguard Worker 1208*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1209*8d67ca89SAndroid Build Coastguard Worker palignr $11,48(%esi), %xmm3 1210*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1211*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1212*8d67ca89SAndroid Build Coastguard Worker palignr $11,32(%esi), %xmm0 1213*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1214*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1215*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1216*8d67ca89SAndroid Build Coastguard Worker 1217*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1218*8d67ca89SAndroid Build Coastguard Worker jz L(shr_11_gobble_loop) 1219*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1220*8d67ca89SAndroid Build Coastguard Worker 1221*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1222*8d67ca89SAndroid Build Coastguard Worker jge L(shr_11_gobble_next) 1223*8d67ca89SAndroid Build Coastguard Worker inc %edx 1224*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1225*8d67ca89SAndroid Build Coastguard WorkerL(shr_11_gobble_next): 1226*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1227*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1228*8d67ca89SAndroid Build Coastguard Worker 1229*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1230*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1231*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1232*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1233*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1234*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1235*8d67ca89SAndroid Build Coastguard Worker 1236*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1237*8d67ca89SAndroid Build Coastguard Worker lea 11(%ecx, %esi,1), %edx 1238*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1239*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1240*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1241*8d67ca89SAndroid Build Coastguard Worker#endif 1242*8d67ca89SAndroid Build Coastguard Worker 1243*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1244*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1245*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1246*8d67ca89SAndroid Build Coastguard WorkerL(shr_12): 1247*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1248*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1249*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1250*8d67ca89SAndroid Build Coastguard Worker jae L(shr_12_gobble) 1251*8d67ca89SAndroid Build Coastguard Worker 1252*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1253*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1254*8d67ca89SAndroid Build Coastguard Worker palignr $12, (%esi), %xmm1 1255*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1256*8d67ca89SAndroid Build Coastguard Worker 1257*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1258*8d67ca89SAndroid Build Coastguard Worker palignr $12, %xmm2, %xmm3 1259*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1260*8d67ca89SAndroid Build Coastguard Worker 1261*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1262*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1263*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1264*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1265*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1266*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1267*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1268*8d67ca89SAndroid Build Coastguard Worker lea 12(%ecx, %esi,1), %edx 1269*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1270*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1271*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1272*8d67ca89SAndroid Build Coastguard Worker 1273*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1274*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1275*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1276*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble): 1277*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1278*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1279*8d67ca89SAndroid Build Coastguard Worker palignr $12, (%esi), %xmm0 1280*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1281*8d67ca89SAndroid Build Coastguard Worker 1282*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1283*8d67ca89SAndroid Build Coastguard Worker palignr $12, 16(%esi), %xmm3 1284*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1285*8d67ca89SAndroid Build Coastguard Worker 1286*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble_loop): 1287*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1288*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1289*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1290*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1291*8d67ca89SAndroid Build Coastguard Worker 1292*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1293*8d67ca89SAndroid Build Coastguard Worker palignr $12,48(%esi), %xmm3 1294*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1295*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1296*8d67ca89SAndroid Build Coastguard Worker palignr $12,32(%esi), %xmm0 1297*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1298*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1299*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1300*8d67ca89SAndroid Build Coastguard Worker 1301*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1302*8d67ca89SAndroid Build Coastguard Worker jz L(shr_12_gobble_loop) 1303*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1304*8d67ca89SAndroid Build Coastguard Worker 1305*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1306*8d67ca89SAndroid Build Coastguard Worker jge L(shr_12_gobble_next) 1307*8d67ca89SAndroid Build Coastguard Worker inc %edx 1308*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1309*8d67ca89SAndroid Build Coastguard WorkerL(shr_12_gobble_next): 1310*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1311*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1312*8d67ca89SAndroid Build Coastguard Worker 1313*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1314*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1315*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1316*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1317*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1318*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1319*8d67ca89SAndroid Build Coastguard Worker 1320*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1321*8d67ca89SAndroid Build Coastguard Worker lea 12(%ecx, %esi,1), %edx 1322*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1323*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1324*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1325*8d67ca89SAndroid Build Coastguard Worker 1326*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1327*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1328*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1329*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1330*8d67ca89SAndroid Build Coastguard WorkerL(shr_13): 1331*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1332*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1333*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1334*8d67ca89SAndroid Build Coastguard Worker jae L(shr_13_gobble) 1335*8d67ca89SAndroid Build Coastguard Worker 1336*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1337*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1338*8d67ca89SAndroid Build Coastguard Worker palignr $13, (%esi), %xmm1 1339*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1340*8d67ca89SAndroid Build Coastguard Worker 1341*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1342*8d67ca89SAndroid Build Coastguard Worker palignr $13, %xmm2, %xmm3 1343*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1344*8d67ca89SAndroid Build Coastguard Worker 1345*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1346*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1347*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1348*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1349*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1350*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1351*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1352*8d67ca89SAndroid Build Coastguard Worker lea 13(%ecx, %esi,1), %edx 1353*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1354*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1355*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1356*8d67ca89SAndroid Build Coastguard Worker 1357*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1358*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1359*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1360*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble): 1361*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1362*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1363*8d67ca89SAndroid Build Coastguard Worker palignr $13, (%esi), %xmm0 1364*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1365*8d67ca89SAndroid Build Coastguard Worker 1366*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1367*8d67ca89SAndroid Build Coastguard Worker palignr $13, 16(%esi), %xmm3 1368*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1369*8d67ca89SAndroid Build Coastguard Worker 1370*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble_loop): 1371*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1372*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1373*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1374*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1375*8d67ca89SAndroid Build Coastguard Worker 1376*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1377*8d67ca89SAndroid Build Coastguard Worker palignr $13,48(%esi), %xmm3 1378*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1379*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1380*8d67ca89SAndroid Build Coastguard Worker palignr $13,32(%esi), %xmm0 1381*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1382*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1383*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1384*8d67ca89SAndroid Build Coastguard Worker 1385*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1386*8d67ca89SAndroid Build Coastguard Worker jz L(shr_13_gobble_loop) 1387*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1388*8d67ca89SAndroid Build Coastguard Worker 1389*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1390*8d67ca89SAndroid Build Coastguard Worker jge L(shr_13_gobble_next) 1391*8d67ca89SAndroid Build Coastguard Worker inc %edx 1392*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1393*8d67ca89SAndroid Build Coastguard WorkerL(shr_13_gobble_next): 1394*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1395*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1396*8d67ca89SAndroid Build Coastguard Worker 1397*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1398*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1399*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1400*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1401*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1402*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1403*8d67ca89SAndroid Build Coastguard Worker 1404*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1405*8d67ca89SAndroid Build Coastguard Worker lea 13(%ecx, %esi,1), %edx 1406*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1407*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1408*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1409*8d67ca89SAndroid Build Coastguard Worker#endif 1410*8d67ca89SAndroid Build Coastguard Worker 1411*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) 1412*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1413*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1414*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1415*8d67ca89SAndroid Build Coastguard WorkerL(shr_14): 1416*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1417*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1418*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1419*8d67ca89SAndroid Build Coastguard Worker jae L(shr_14_gobble) 1420*8d67ca89SAndroid Build Coastguard Worker 1421*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1422*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1423*8d67ca89SAndroid Build Coastguard Worker palignr $14, (%esi), %xmm1 1424*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1425*8d67ca89SAndroid Build Coastguard Worker 1426*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1427*8d67ca89SAndroid Build Coastguard Worker palignr $14, %xmm2, %xmm3 1428*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1429*8d67ca89SAndroid Build Coastguard Worker 1430*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1431*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1432*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1433*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1434*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1435*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1436*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1437*8d67ca89SAndroid Build Coastguard Worker lea 14(%ecx, %esi,1), %edx 1438*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1439*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1440*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1441*8d67ca89SAndroid Build Coastguard Worker 1442*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1443*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1444*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1445*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble): 1446*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1447*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1448*8d67ca89SAndroid Build Coastguard Worker palignr $14, (%esi), %xmm0 1449*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1450*8d67ca89SAndroid Build Coastguard Worker 1451*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1452*8d67ca89SAndroid Build Coastguard Worker palignr $14, 16(%esi), %xmm3 1453*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1454*8d67ca89SAndroid Build Coastguard Worker 1455*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble_loop): 1456*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1457*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1458*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1459*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1460*8d67ca89SAndroid Build Coastguard Worker 1461*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1462*8d67ca89SAndroid Build Coastguard Worker palignr $14,48(%esi), %xmm3 1463*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1464*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1465*8d67ca89SAndroid Build Coastguard Worker palignr $14,32(%esi), %xmm0 1466*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1467*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1468*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1469*8d67ca89SAndroid Build Coastguard Worker 1470*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1471*8d67ca89SAndroid Build Coastguard Worker jz L(shr_14_gobble_loop) 1472*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1473*8d67ca89SAndroid Build Coastguard Worker 1474*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1475*8d67ca89SAndroid Build Coastguard Worker jge L(shr_14_gobble_next) 1476*8d67ca89SAndroid Build Coastguard Worker inc %edx 1477*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1478*8d67ca89SAndroid Build Coastguard WorkerL(shr_14_gobble_next): 1479*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1480*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1481*8d67ca89SAndroid Build Coastguard Worker 1482*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1483*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1484*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1485*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1486*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1487*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1488*8d67ca89SAndroid Build Coastguard Worker 1489*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1490*8d67ca89SAndroid Build Coastguard Worker lea 14(%ecx, %esi,1), %edx 1491*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1492*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1493*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1494*8d67ca89SAndroid Build Coastguard Worker#endif 1495*8d67ca89SAndroid Build Coastguard Worker 1496*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1497*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1498*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1499*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1500*8d67ca89SAndroid Build Coastguard WorkerL(shr_15): 1501*8d67ca89SAndroid Build Coastguard Worker cmp $80, %ecx 1502*8d67ca89SAndroid Build Coastguard Worker lea -48(%ecx), %ecx 1503*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 1504*8d67ca89SAndroid Build Coastguard Worker jae L(shr_15_gobble) 1505*8d67ca89SAndroid Build Coastguard Worker 1506*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm1 1507*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm1, %xmm2 1508*8d67ca89SAndroid Build Coastguard Worker palignr $15, (%esi), %xmm1 1509*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm1 1510*8d67ca89SAndroid Build Coastguard Worker 1511*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1512*8d67ca89SAndroid Build Coastguard Worker palignr $15, %xmm2, %xmm3 1513*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1514*8d67ca89SAndroid Build Coastguard Worker 1515*8d67ca89SAndroid Build Coastguard Worker pand %xmm1, %xmm3 1516*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1517*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1518*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1519*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1520*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1521*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1522*8d67ca89SAndroid Build Coastguard Worker lea 15(%ecx, %esi,1), %edx 1523*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1524*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1525*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1526*8d67ca89SAndroid Build Coastguard Worker 1527*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1528*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1529*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1530*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble): 1531*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1532*8d67ca89SAndroid Build Coastguard Worker movdqa 16(%esi), %xmm0 1533*8d67ca89SAndroid Build Coastguard Worker palignr $15, (%esi), %xmm0 1534*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%edi), %xmm0 1535*8d67ca89SAndroid Build Coastguard Worker 1536*8d67ca89SAndroid Build Coastguard Worker movdqa 32(%esi), %xmm3 1537*8d67ca89SAndroid Build Coastguard Worker palignr $15, 16(%esi), %xmm3 1538*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%edi), %xmm3 1539*8d67ca89SAndroid Build Coastguard Worker 1540*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble_loop): 1541*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1542*8d67ca89SAndroid Build Coastguard Worker sub $32, %ecx 1543*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1544*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1545*8d67ca89SAndroid Build Coastguard Worker 1546*8d67ca89SAndroid Build Coastguard Worker movdqa 64(%esi), %xmm3 1547*8d67ca89SAndroid Build Coastguard Worker palignr $15,48(%esi), %xmm3 1548*8d67ca89SAndroid Build Coastguard Worker sbb $0xffff, %edx 1549*8d67ca89SAndroid Build Coastguard Worker movdqa 48(%esi), %xmm0 1550*8d67ca89SAndroid Build Coastguard Worker palignr $15,32(%esi), %xmm0 1551*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%edi), %xmm0 1552*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1553*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%edi), %xmm3 1554*8d67ca89SAndroid Build Coastguard Worker 1555*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1556*8d67ca89SAndroid Build Coastguard Worker jz L(shr_15_gobble_loop) 1557*8d67ca89SAndroid Build Coastguard Worker pand %xmm0, %xmm3 1558*8d67ca89SAndroid Build Coastguard Worker 1559*8d67ca89SAndroid Build Coastguard Worker cmp $0, %ecx 1560*8d67ca89SAndroid Build Coastguard Worker jge L(shr_15_gobble_next) 1561*8d67ca89SAndroid Build Coastguard Worker inc %edx 1562*8d67ca89SAndroid Build Coastguard Worker add $32, %ecx 1563*8d67ca89SAndroid Build Coastguard WorkerL(shr_15_gobble_next): 1564*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 1565*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1566*8d67ca89SAndroid Build Coastguard Worker 1567*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 1568*8d67ca89SAndroid Build Coastguard Worker movdqa %xmm0, %xmm1 1569*8d67ca89SAndroid Build Coastguard Worker lea 32(%edi), %edi 1570*8d67ca89SAndroid Build Coastguard Worker lea 32(%esi), %esi 1571*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %edx 1572*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 1573*8d67ca89SAndroid Build Coastguard Worker 1574*8d67ca89SAndroid Build Coastguard Worker lea (%ecx, %edi,1), %eax 1575*8d67ca89SAndroid Build Coastguard Worker lea 15(%ecx, %esi,1), %edx 1576*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 1577*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 1578*8d67ca89SAndroid Build Coastguard Worker jmp L(less48bytes) 1579*8d67ca89SAndroid Build Coastguard Worker#endif 1580*8d67ca89SAndroid Build Coastguard Worker 1581*8d67ca89SAndroid Build Coastguard Worker cfi_restore_state 1582*8d67ca89SAndroid Build Coastguard Worker cfi_remember_state 1583*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1584*8d67ca89SAndroid Build Coastguard WorkerL(exit): 1585*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ebx 1586*8d67ca89SAndroid Build Coastguard Worker sub $0xffff, %ebx 1587*8d67ca89SAndroid Build Coastguard Worker jz L(first16bytes) 1588*8d67ca89SAndroid Build Coastguard Worker lea -16(%esi), %esi 1589*8d67ca89SAndroid Build Coastguard Worker lea -16(%edi), %edi 1590*8d67ca89SAndroid Build Coastguard Worker mov %ebx, %edx 1591*8d67ca89SAndroid Build Coastguard Worker 1592*8d67ca89SAndroid Build Coastguard WorkerL(first16bytes): 1593*8d67ca89SAndroid Build Coastguard Worker add %eax, %esi 1594*8d67ca89SAndroid Build Coastguard WorkerL(less16bytes): 1595*8d67ca89SAndroid Build Coastguard Worker 1596*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1597*8d67ca89SAndroid Build Coastguard Worker test %dl, %dl 1598*8d67ca89SAndroid Build Coastguard Worker jz L(next_24_bytes) 1599*8d67ca89SAndroid Build Coastguard Worker 1600*8d67ca89SAndroid Build Coastguard Worker test $0x01, %dl 1601*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte16) 1602*8d67ca89SAndroid Build Coastguard Worker 1603*8d67ca89SAndroid Build Coastguard Worker test $0x02, %dl 1604*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte17) 1605*8d67ca89SAndroid Build Coastguard Worker 1606*8d67ca89SAndroid Build Coastguard Worker test $0x04, %dl 1607*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte18) 1608*8d67ca89SAndroid Build Coastguard Worker 1609*8d67ca89SAndroid Build Coastguard Worker test $0x08, %dl 1610*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte19) 1611*8d67ca89SAndroid Build Coastguard Worker 1612*8d67ca89SAndroid Build Coastguard Worker test $0x10, %dl 1613*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte20) 1614*8d67ca89SAndroid Build Coastguard Worker 1615*8d67ca89SAndroid Build Coastguard Worker test $0x20, %dl 1616*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte21) 1617*8d67ca89SAndroid Build Coastguard Worker 1618*8d67ca89SAndroid Build Coastguard Worker test $0x40, %dl 1619*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte22) 1620*8d67ca89SAndroid Build Coastguard WorkerL(Byte23): 1621*8d67ca89SAndroid Build Coastguard Worker movzbl -9(%edi), %eax 1622*8d67ca89SAndroid Build Coastguard Worker movzbl -9(%esi), %edx 1623*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1624*8d67ca89SAndroid Build Coastguard Worker RETURN 1625*8d67ca89SAndroid Build Coastguard Worker 1626*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1627*8d67ca89SAndroid Build Coastguard WorkerL(Byte16): 1628*8d67ca89SAndroid Build Coastguard Worker movzbl -16(%edi), %eax 1629*8d67ca89SAndroid Build Coastguard Worker movzbl -16(%esi), %edx 1630*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1631*8d67ca89SAndroid Build Coastguard Worker RETURN 1632*8d67ca89SAndroid Build Coastguard Worker 1633*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1634*8d67ca89SAndroid Build Coastguard WorkerL(Byte17): 1635*8d67ca89SAndroid Build Coastguard Worker movzbl -15(%edi), %eax 1636*8d67ca89SAndroid Build Coastguard Worker movzbl -15(%esi), %edx 1637*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1638*8d67ca89SAndroid Build Coastguard Worker RETURN 1639*8d67ca89SAndroid Build Coastguard Worker 1640*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1641*8d67ca89SAndroid Build Coastguard WorkerL(Byte18): 1642*8d67ca89SAndroid Build Coastguard Worker movzbl -14(%edi), %eax 1643*8d67ca89SAndroid Build Coastguard Worker movzbl -14(%esi), %edx 1644*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1645*8d67ca89SAndroid Build Coastguard Worker RETURN 1646*8d67ca89SAndroid Build Coastguard Worker 1647*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1648*8d67ca89SAndroid Build Coastguard WorkerL(Byte19): 1649*8d67ca89SAndroid Build Coastguard Worker movzbl -13(%edi), %eax 1650*8d67ca89SAndroid Build Coastguard Worker movzbl -13(%esi), %edx 1651*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1652*8d67ca89SAndroid Build Coastguard Worker RETURN 1653*8d67ca89SAndroid Build Coastguard Worker 1654*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1655*8d67ca89SAndroid Build Coastguard WorkerL(Byte20): 1656*8d67ca89SAndroid Build Coastguard Worker movzbl -12(%edi), %eax 1657*8d67ca89SAndroid Build Coastguard Worker movzbl -12(%esi), %edx 1658*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1659*8d67ca89SAndroid Build Coastguard Worker RETURN 1660*8d67ca89SAndroid Build Coastguard Worker 1661*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1662*8d67ca89SAndroid Build Coastguard WorkerL(Byte21): 1663*8d67ca89SAndroid Build Coastguard Worker movzbl -11(%edi), %eax 1664*8d67ca89SAndroid Build Coastguard Worker movzbl -11(%esi), %edx 1665*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1666*8d67ca89SAndroid Build Coastguard Worker RETURN 1667*8d67ca89SAndroid Build Coastguard Worker 1668*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1669*8d67ca89SAndroid Build Coastguard WorkerL(Byte22): 1670*8d67ca89SAndroid Build Coastguard Worker movzbl -10(%edi), %eax 1671*8d67ca89SAndroid Build Coastguard Worker movzbl -10(%esi), %edx 1672*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1673*8d67ca89SAndroid Build Coastguard Worker RETURN 1674*8d67ca89SAndroid Build Coastguard Worker 1675*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1676*8d67ca89SAndroid Build Coastguard WorkerL(next_24_bytes): 1677*8d67ca89SAndroid Build Coastguard Worker lea 8(%edi), %edi 1678*8d67ca89SAndroid Build Coastguard Worker lea 8(%esi), %esi 1679*8d67ca89SAndroid Build Coastguard Worker test $0x01, %dh 1680*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte16) 1681*8d67ca89SAndroid Build Coastguard Worker 1682*8d67ca89SAndroid Build Coastguard Worker test $0x02, %dh 1683*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte17) 1684*8d67ca89SAndroid Build Coastguard Worker 1685*8d67ca89SAndroid Build Coastguard Worker test $0x04, %dh 1686*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte18) 1687*8d67ca89SAndroid Build Coastguard Worker 1688*8d67ca89SAndroid Build Coastguard Worker test $0x08, %dh 1689*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte19) 1690*8d67ca89SAndroid Build Coastguard Worker 1691*8d67ca89SAndroid Build Coastguard Worker test $0x10, %dh 1692*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte20) 1693*8d67ca89SAndroid Build Coastguard Worker 1694*8d67ca89SAndroid Build Coastguard Worker test $0x20, %dh 1695*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte21) 1696*8d67ca89SAndroid Build Coastguard Worker 1697*8d67ca89SAndroid Build Coastguard Worker test $0x40, %dh 1698*8d67ca89SAndroid Build Coastguard Worker jnz L(Byte22) 1699*8d67ca89SAndroid Build Coastguard Worker 1700*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1701*8d67ca89SAndroid Build Coastguard WorkerL(Byte31): 1702*8d67ca89SAndroid Build Coastguard Worker movzbl -9(%edi), %eax 1703*8d67ca89SAndroid Build Coastguard Worker movzbl -9(%esi), %edx 1704*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 1705*8d67ca89SAndroid Build Coastguard Worker RETURN_END 1706*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP) 1707*8d67ca89SAndroid Build Coastguard Worker 1708*8d67ca89SAndroid Build Coastguard Worker/* special for wmemcmp */ 1709*8d67ca89SAndroid Build Coastguard Worker test %dl, %dl 1710*8d67ca89SAndroid Build Coastguard Worker jz L(next_two_double_words) 1711*8d67ca89SAndroid Build Coastguard Worker and $15, %dl 1712*8d67ca89SAndroid Build Coastguard Worker jz L(second_double_word) 1713*8d67ca89SAndroid Build Coastguard Worker mov -16(%edi), %ecx 1714*8d67ca89SAndroid Build Coastguard Worker cmp -16(%esi), %ecx 1715*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 1716*8d67ca89SAndroid Build Coastguard Worker jg L(nequal_bigger) 1717*8d67ca89SAndroid Build Coastguard Worker neg %eax 1718*8d67ca89SAndroid Build Coastguard Worker RETURN 1719*8d67ca89SAndroid Build Coastguard Worker 1720*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1721*8d67ca89SAndroid Build Coastguard WorkerL(second_double_word): 1722*8d67ca89SAndroid Build Coastguard Worker mov -12(%edi), %ecx 1723*8d67ca89SAndroid Build Coastguard Worker cmp -12(%esi), %ecx 1724*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 1725*8d67ca89SAndroid Build Coastguard Worker jg L(nequal_bigger) 1726*8d67ca89SAndroid Build Coastguard Worker neg %eax 1727*8d67ca89SAndroid Build Coastguard Worker RETURN 1728*8d67ca89SAndroid Build Coastguard Worker 1729*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1730*8d67ca89SAndroid Build Coastguard WorkerL(next_two_double_words): 1731*8d67ca89SAndroid Build Coastguard Worker and $15, %dh 1732*8d67ca89SAndroid Build Coastguard Worker jz L(fourth_double_word) 1733*8d67ca89SAndroid Build Coastguard Worker mov -8(%edi), %ecx 1734*8d67ca89SAndroid Build Coastguard Worker cmp -8(%esi), %ecx 1735*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 1736*8d67ca89SAndroid Build Coastguard Worker jg L(nequal_bigger) 1737*8d67ca89SAndroid Build Coastguard Worker neg %eax 1738*8d67ca89SAndroid Build Coastguard Worker RETURN 1739*8d67ca89SAndroid Build Coastguard Worker 1740*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1741*8d67ca89SAndroid Build Coastguard WorkerL(fourth_double_word): 1742*8d67ca89SAndroid Build Coastguard Worker mov -4(%edi), %ecx 1743*8d67ca89SAndroid Build Coastguard Worker cmp -4(%esi), %ecx 1744*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 1745*8d67ca89SAndroid Build Coastguard Worker jg L(nequal_bigger) 1746*8d67ca89SAndroid Build Coastguard Worker neg %eax 1747*8d67ca89SAndroid Build Coastguard Worker RETURN 1748*8d67ca89SAndroid Build Coastguard Worker 1749*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1750*8d67ca89SAndroid Build Coastguard WorkerL(nequal_bigger): 1751*8d67ca89SAndroid Build Coastguard Worker RETURN_END 1752*8d67ca89SAndroid Build Coastguard Worker 1753*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_MEMCMP16) 1754*8d67ca89SAndroid Build Coastguard Worker 1755*8d67ca89SAndroid Build Coastguard Worker/* special for __memcmp16 */ 1756*8d67ca89SAndroid Build Coastguard Worker test %dl, %dl 1757*8d67ca89SAndroid Build Coastguard Worker jz L(next_four_words) 1758*8d67ca89SAndroid Build Coastguard Worker test $15, %dl 1759*8d67ca89SAndroid Build Coastguard Worker jz L(second_two_words) 1760*8d67ca89SAndroid Build Coastguard Worker test $3, %dl 1761*8d67ca89SAndroid Build Coastguard Worker jz L(second_word) 1762*8d67ca89SAndroid Build Coastguard Worker movzwl -16(%edi), %eax 1763*8d67ca89SAndroid Build Coastguard Worker movzwl -16(%esi), %ebx 1764*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1765*8d67ca89SAndroid Build Coastguard Worker RETURN 1766*8d67ca89SAndroid Build Coastguard Worker 1767*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1768*8d67ca89SAndroid Build Coastguard WorkerL(second_word): 1769*8d67ca89SAndroid Build Coastguard Worker movzwl -14(%edi), %eax 1770*8d67ca89SAndroid Build Coastguard Worker movzwl -14(%esi), %ebx 1771*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1772*8d67ca89SAndroid Build Coastguard Worker RETURN 1773*8d67ca89SAndroid Build Coastguard Worker 1774*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1775*8d67ca89SAndroid Build Coastguard WorkerL(second_two_words): 1776*8d67ca89SAndroid Build Coastguard Worker test $63, %dl 1777*8d67ca89SAndroid Build Coastguard Worker jz L(fourth_word) 1778*8d67ca89SAndroid Build Coastguard Worker movzwl -12(%edi), %eax 1779*8d67ca89SAndroid Build Coastguard Worker movzwl -12(%esi), %ebx 1780*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1781*8d67ca89SAndroid Build Coastguard Worker RETURN 1782*8d67ca89SAndroid Build Coastguard Worker 1783*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1784*8d67ca89SAndroid Build Coastguard WorkerL(fourth_word): 1785*8d67ca89SAndroid Build Coastguard Worker movzwl -10(%edi), %eax 1786*8d67ca89SAndroid Build Coastguard Worker movzwl -10(%esi), %ebx 1787*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1788*8d67ca89SAndroid Build Coastguard Worker RETURN 1789*8d67ca89SAndroid Build Coastguard Worker 1790*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1791*8d67ca89SAndroid Build Coastguard WorkerL(next_four_words): 1792*8d67ca89SAndroid Build Coastguard Worker test $15, %dh 1793*8d67ca89SAndroid Build Coastguard Worker jz L(fourth_two_words) 1794*8d67ca89SAndroid Build Coastguard Worker test $3, %dh 1795*8d67ca89SAndroid Build Coastguard Worker jz L(sixth_word) 1796*8d67ca89SAndroid Build Coastguard Worker movzwl -8(%edi), %eax 1797*8d67ca89SAndroid Build Coastguard Worker movzwl -8(%esi), %ebx 1798*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1799*8d67ca89SAndroid Build Coastguard Worker RETURN 1800*8d67ca89SAndroid Build Coastguard Worker 1801*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1802*8d67ca89SAndroid Build Coastguard WorkerL(sixth_word): 1803*8d67ca89SAndroid Build Coastguard Worker movzwl -6(%edi), %eax 1804*8d67ca89SAndroid Build Coastguard Worker movzwl -6(%esi), %ebx 1805*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1806*8d67ca89SAndroid Build Coastguard Worker RETURN 1807*8d67ca89SAndroid Build Coastguard Worker 1808*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1809*8d67ca89SAndroid Build Coastguard WorkerL(fourth_two_words): 1810*8d67ca89SAndroid Build Coastguard Worker test $63, %dh 1811*8d67ca89SAndroid Build Coastguard Worker jz L(eighth_word) 1812*8d67ca89SAndroid Build Coastguard Worker movzwl -4(%edi), %eax 1813*8d67ca89SAndroid Build Coastguard Worker movzwl -4(%esi), %ebx 1814*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1815*8d67ca89SAndroid Build Coastguard Worker RETURN 1816*8d67ca89SAndroid Build Coastguard Worker 1817*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1818*8d67ca89SAndroid Build Coastguard WorkerL(eighth_word): 1819*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%edi), %eax 1820*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%esi), %ebx 1821*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 1822*8d67ca89SAndroid Build Coastguard Worker RETURN 1823*8d67ca89SAndroid Build Coastguard Worker#else 1824*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1825*8d67ca89SAndroid Build Coastguard Worker#endif 1826*8d67ca89SAndroid Build Coastguard Worker 1827*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 1828*8d67ca89SAndroid Build Coastguard Worker 1829*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1830*8d67ca89SAndroid Build Coastguard WorkerL(more8bytes): 1831*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ecx 1832*8d67ca89SAndroid Build Coastguard Worker jae L(more16bytes) 1833*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ecx 1834*8d67ca89SAndroid Build Coastguard Worker je L(8bytes) 1835*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1836*8d67ca89SAndroid Build Coastguard Worker cmp $9, %ecx 1837*8d67ca89SAndroid Build Coastguard Worker je L(9bytes) 1838*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ecx 1839*8d67ca89SAndroid Build Coastguard Worker je L(10bytes) 1840*8d67ca89SAndroid Build Coastguard Worker cmp $11, %ecx 1841*8d67ca89SAndroid Build Coastguard Worker je L(11bytes) 1842*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ecx 1843*8d67ca89SAndroid Build Coastguard Worker je L(12bytes) 1844*8d67ca89SAndroid Build Coastguard Worker cmp $13, %ecx 1845*8d67ca89SAndroid Build Coastguard Worker je L(13bytes) 1846*8d67ca89SAndroid Build Coastguard Worker cmp $14, %ecx 1847*8d67ca89SAndroid Build Coastguard Worker je L(14bytes) 1848*8d67ca89SAndroid Build Coastguard Worker jmp L(15bytes) 1849*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16) 1850*8d67ca89SAndroid Build Coastguard Worker jmp L(12bytes) 1851*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1852*8d67ca89SAndroid Build Coastguard Worker cmp $10, %ecx 1853*8d67ca89SAndroid Build Coastguard Worker je L(10bytes) 1854*8d67ca89SAndroid Build Coastguard Worker cmp $12, %ecx 1855*8d67ca89SAndroid Build Coastguard Worker je L(12bytes) 1856*8d67ca89SAndroid Build Coastguard Worker jmp L(14bytes) 1857*8d67ca89SAndroid Build Coastguard Worker#else 1858*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1859*8d67ca89SAndroid Build Coastguard Worker#endif 1860*8d67ca89SAndroid Build Coastguard Worker 1861*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1862*8d67ca89SAndroid Build Coastguard WorkerL(more16bytes): 1863*8d67ca89SAndroid Build Coastguard Worker cmp $24, %ecx 1864*8d67ca89SAndroid Build Coastguard Worker jae L(more24bytes) 1865*8d67ca89SAndroid Build Coastguard Worker cmp $16, %ecx 1866*8d67ca89SAndroid Build Coastguard Worker je L(16bytes) 1867*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1868*8d67ca89SAndroid Build Coastguard Worker cmp $17, %ecx 1869*8d67ca89SAndroid Build Coastguard Worker je L(17bytes) 1870*8d67ca89SAndroid Build Coastguard Worker cmp $18, %ecx 1871*8d67ca89SAndroid Build Coastguard Worker je L(18bytes) 1872*8d67ca89SAndroid Build Coastguard Worker cmp $19, %ecx 1873*8d67ca89SAndroid Build Coastguard Worker je L(19bytes) 1874*8d67ca89SAndroid Build Coastguard Worker cmp $20, %ecx 1875*8d67ca89SAndroid Build Coastguard Worker je L(20bytes) 1876*8d67ca89SAndroid Build Coastguard Worker cmp $21, %ecx 1877*8d67ca89SAndroid Build Coastguard Worker je L(21bytes) 1878*8d67ca89SAndroid Build Coastguard Worker cmp $22, %ecx 1879*8d67ca89SAndroid Build Coastguard Worker je L(22bytes) 1880*8d67ca89SAndroid Build Coastguard Worker jmp L(23bytes) 1881*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16) 1882*8d67ca89SAndroid Build Coastguard Worker jmp L(20bytes) 1883*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1884*8d67ca89SAndroid Build Coastguard Worker cmp $18, %ecx 1885*8d67ca89SAndroid Build Coastguard Worker je L(18bytes) 1886*8d67ca89SAndroid Build Coastguard Worker cmp $20, %ecx 1887*8d67ca89SAndroid Build Coastguard Worker je L(20bytes) 1888*8d67ca89SAndroid Build Coastguard Worker jmp L(22bytes) 1889*8d67ca89SAndroid Build Coastguard Worker#else 1890*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1891*8d67ca89SAndroid Build Coastguard Worker#endif 1892*8d67ca89SAndroid Build Coastguard Worker 1893*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1894*8d67ca89SAndroid Build Coastguard WorkerL(more24bytes): 1895*8d67ca89SAndroid Build Coastguard Worker cmp $32, %ecx 1896*8d67ca89SAndroid Build Coastguard Worker jae L(more32bytes) 1897*8d67ca89SAndroid Build Coastguard Worker cmp $24, %ecx 1898*8d67ca89SAndroid Build Coastguard Worker je L(24bytes) 1899*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1900*8d67ca89SAndroid Build Coastguard Worker cmp $25, %ecx 1901*8d67ca89SAndroid Build Coastguard Worker je L(25bytes) 1902*8d67ca89SAndroid Build Coastguard Worker cmp $26, %ecx 1903*8d67ca89SAndroid Build Coastguard Worker je L(26bytes) 1904*8d67ca89SAndroid Build Coastguard Worker cmp $27, %ecx 1905*8d67ca89SAndroid Build Coastguard Worker je L(27bytes) 1906*8d67ca89SAndroid Build Coastguard Worker cmp $28, %ecx 1907*8d67ca89SAndroid Build Coastguard Worker je L(28bytes) 1908*8d67ca89SAndroid Build Coastguard Worker cmp $29, %ecx 1909*8d67ca89SAndroid Build Coastguard Worker je L(29bytes) 1910*8d67ca89SAndroid Build Coastguard Worker cmp $30, %ecx 1911*8d67ca89SAndroid Build Coastguard Worker je L(30bytes) 1912*8d67ca89SAndroid Build Coastguard Worker jmp L(31bytes) 1913*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16) 1914*8d67ca89SAndroid Build Coastguard Worker jmp L(28bytes) 1915*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1916*8d67ca89SAndroid Build Coastguard Worker cmp $26, %ecx 1917*8d67ca89SAndroid Build Coastguard Worker je L(26bytes) 1918*8d67ca89SAndroid Build Coastguard Worker cmp $28, %ecx 1919*8d67ca89SAndroid Build Coastguard Worker je L(28bytes) 1920*8d67ca89SAndroid Build Coastguard Worker jmp L(30bytes) 1921*8d67ca89SAndroid Build Coastguard Worker#else 1922*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1923*8d67ca89SAndroid Build Coastguard Worker#endif 1924*8d67ca89SAndroid Build Coastguard Worker 1925*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1926*8d67ca89SAndroid Build Coastguard WorkerL(more32bytes): 1927*8d67ca89SAndroid Build Coastguard Worker cmp $40, %ecx 1928*8d67ca89SAndroid Build Coastguard Worker jae L(more40bytes) 1929*8d67ca89SAndroid Build Coastguard Worker cmp $32, %ecx 1930*8d67ca89SAndroid Build Coastguard Worker je L(32bytes) 1931*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1932*8d67ca89SAndroid Build Coastguard Worker cmp $33, %ecx 1933*8d67ca89SAndroid Build Coastguard Worker je L(33bytes) 1934*8d67ca89SAndroid Build Coastguard Worker cmp $34, %ecx 1935*8d67ca89SAndroid Build Coastguard Worker je L(34bytes) 1936*8d67ca89SAndroid Build Coastguard Worker cmp $35, %ecx 1937*8d67ca89SAndroid Build Coastguard Worker je L(35bytes) 1938*8d67ca89SAndroid Build Coastguard Worker cmp $36, %ecx 1939*8d67ca89SAndroid Build Coastguard Worker je L(36bytes) 1940*8d67ca89SAndroid Build Coastguard Worker cmp $37, %ecx 1941*8d67ca89SAndroid Build Coastguard Worker je L(37bytes) 1942*8d67ca89SAndroid Build Coastguard Worker cmp $38, %ecx 1943*8d67ca89SAndroid Build Coastguard Worker je L(38bytes) 1944*8d67ca89SAndroid Build Coastguard Worker jmp L(39bytes) 1945*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16) 1946*8d67ca89SAndroid Build Coastguard Worker jmp L(36bytes) 1947*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1948*8d67ca89SAndroid Build Coastguard Worker cmp $34, %ecx 1949*8d67ca89SAndroid Build Coastguard Worker je L(34bytes) 1950*8d67ca89SAndroid Build Coastguard Worker cmp $36, %ecx 1951*8d67ca89SAndroid Build Coastguard Worker je L(36bytes) 1952*8d67ca89SAndroid Build Coastguard Worker jmp L(38bytes) 1953*8d67ca89SAndroid Build Coastguard Worker#else 1954*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1955*8d67ca89SAndroid Build Coastguard Worker#endif 1956*8d67ca89SAndroid Build Coastguard Worker 1957*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1958*8d67ca89SAndroid Build Coastguard WorkerL(less48bytes): 1959*8d67ca89SAndroid Build Coastguard Worker cmp $8, %ecx 1960*8d67ca89SAndroid Build Coastguard Worker jae L(more8bytes) 1961*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1962*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ecx 1963*8d67ca89SAndroid Build Coastguard Worker je L(2bytes) 1964*8d67ca89SAndroid Build Coastguard Worker cmp $3, %ecx 1965*8d67ca89SAndroid Build Coastguard Worker je L(3bytes) 1966*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ecx 1967*8d67ca89SAndroid Build Coastguard Worker je L(4bytes) 1968*8d67ca89SAndroid Build Coastguard Worker cmp $5, %ecx 1969*8d67ca89SAndroid Build Coastguard Worker je L(5bytes) 1970*8d67ca89SAndroid Build Coastguard Worker cmp $6, %ecx 1971*8d67ca89SAndroid Build Coastguard Worker je L(6bytes) 1972*8d67ca89SAndroid Build Coastguard Worker jmp L(7bytes) 1973*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_WCHAR) && !defined(USE_UTF16) 1974*8d67ca89SAndroid Build Coastguard Worker jmp L(4bytes) 1975*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 1976*8d67ca89SAndroid Build Coastguard Worker cmp $2, %ecx 1977*8d67ca89SAndroid Build Coastguard Worker je L(2bytes) 1978*8d67ca89SAndroid Build Coastguard Worker cmp $4, %ecx 1979*8d67ca89SAndroid Build Coastguard Worker je L(4bytes) 1980*8d67ca89SAndroid Build Coastguard Worker jmp L(6bytes) 1981*8d67ca89SAndroid Build Coastguard Worker#else 1982*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 1983*8d67ca89SAndroid Build Coastguard Worker#endif 1984*8d67ca89SAndroid Build Coastguard Worker 1985*8d67ca89SAndroid Build Coastguard Worker .p2align 4 1986*8d67ca89SAndroid Build Coastguard WorkerL(more40bytes): 1987*8d67ca89SAndroid Build Coastguard Worker cmp $40, %ecx 1988*8d67ca89SAndroid Build Coastguard Worker je L(40bytes) 1989*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_WCHAR) && !defined(USE_UTF16) 1990*8d67ca89SAndroid Build Coastguard Worker cmp $41, %ecx 1991*8d67ca89SAndroid Build Coastguard Worker je L(41bytes) 1992*8d67ca89SAndroid Build Coastguard Worker cmp $42, %ecx 1993*8d67ca89SAndroid Build Coastguard Worker je L(42bytes) 1994*8d67ca89SAndroid Build Coastguard Worker cmp $43, %ecx 1995*8d67ca89SAndroid Build Coastguard Worker je L(43bytes) 1996*8d67ca89SAndroid Build Coastguard Worker cmp $44, %ecx 1997*8d67ca89SAndroid Build Coastguard Worker je L(44bytes) 1998*8d67ca89SAndroid Build Coastguard Worker cmp $45, %ecx 1999*8d67ca89SAndroid Build Coastguard Worker je L(45bytes) 2000*8d67ca89SAndroid Build Coastguard Worker cmp $46, %ecx 2001*8d67ca89SAndroid Build Coastguard Worker je L(46bytes) 2002*8d67ca89SAndroid Build Coastguard Worker jmp L(47bytes) 2003*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_UTF16) && !defined(USE_WCHAR) 2004*8d67ca89SAndroid Build Coastguard Worker cmp $42, %ecx 2005*8d67ca89SAndroid Build Coastguard Worker je L(42bytes) 2006*8d67ca89SAndroid Build Coastguard Worker cmp $44, %ecx 2007*8d67ca89SAndroid Build Coastguard Worker je L(44bytes) 2008*8d67ca89SAndroid Build Coastguard Worker jmp L(46bytes) 2009*8d67ca89SAndroid Build Coastguard Worker#endif 2010*8d67ca89SAndroid Build Coastguard Worker 2011*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16) 2012*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2013*8d67ca89SAndroid Build Coastguard WorkerL(44bytes): 2014*8d67ca89SAndroid Build Coastguard Worker mov -44(%eax), %ecx 2015*8d67ca89SAndroid Build Coastguard Worker mov -44(%edx), %ebx 2016*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2017*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2018*8d67ca89SAndroid Build Coastguard WorkerL(40bytes): 2019*8d67ca89SAndroid Build Coastguard Worker mov -40(%eax), %ecx 2020*8d67ca89SAndroid Build Coastguard Worker mov -40(%edx), %ebx 2021*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2022*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2023*8d67ca89SAndroid Build Coastguard WorkerL(36bytes): 2024*8d67ca89SAndroid Build Coastguard Worker mov -36(%eax), %ecx 2025*8d67ca89SAndroid Build Coastguard Worker mov -36(%edx), %ebx 2026*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2027*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2028*8d67ca89SAndroid Build Coastguard WorkerL(32bytes): 2029*8d67ca89SAndroid Build Coastguard Worker mov -32(%eax), %ecx 2030*8d67ca89SAndroid Build Coastguard Worker mov -32(%edx), %ebx 2031*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2032*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2033*8d67ca89SAndroid Build Coastguard WorkerL(28bytes): 2034*8d67ca89SAndroid Build Coastguard Worker mov -28(%eax), %ecx 2035*8d67ca89SAndroid Build Coastguard Worker mov -28(%edx), %ebx 2036*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2037*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2038*8d67ca89SAndroid Build Coastguard WorkerL(24bytes): 2039*8d67ca89SAndroid Build Coastguard Worker mov -24(%eax), %ecx 2040*8d67ca89SAndroid Build Coastguard Worker mov -24(%edx), %ebx 2041*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2042*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2043*8d67ca89SAndroid Build Coastguard WorkerL(20bytes): 2044*8d67ca89SAndroid Build Coastguard Worker mov -20(%eax), %ecx 2045*8d67ca89SAndroid Build Coastguard Worker mov -20(%edx), %ebx 2046*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2047*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2048*8d67ca89SAndroid Build Coastguard WorkerL(16bytes): 2049*8d67ca89SAndroid Build Coastguard Worker mov -16(%eax), %ecx 2050*8d67ca89SAndroid Build Coastguard Worker mov -16(%edx), %ebx 2051*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2052*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2053*8d67ca89SAndroid Build Coastguard WorkerL(12bytes): 2054*8d67ca89SAndroid Build Coastguard Worker mov -12(%eax), %ecx 2055*8d67ca89SAndroid Build Coastguard Worker mov -12(%edx), %ebx 2056*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2057*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2058*8d67ca89SAndroid Build Coastguard WorkerL(8bytes): 2059*8d67ca89SAndroid Build Coastguard Worker mov -8(%eax), %ecx 2060*8d67ca89SAndroid Build Coastguard Worker mov -8(%edx), %ebx 2061*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2062*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2063*8d67ca89SAndroid Build Coastguard WorkerL(4bytes): 2064*8d67ca89SAndroid Build Coastguard Worker mov -4(%eax), %ecx 2065*8d67ca89SAndroid Build Coastguard Worker mov -4(%edx), %ebx 2066*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2067*8d67ca89SAndroid Build Coastguard Worker mov $0, %eax 2068*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2069*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2070*8d67ca89SAndroid Build Coastguard Worker ret 2071*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2072*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP) 2073*8d67ca89SAndroid Build Coastguard Worker 2074*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2075*8d67ca89SAndroid Build Coastguard WorkerL(44bytes): 2076*8d67ca89SAndroid Build Coastguard Worker mov -44(%eax), %ecx 2077*8d67ca89SAndroid Build Coastguard Worker cmp -44(%edx), %ecx 2078*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2079*8d67ca89SAndroid Build Coastguard WorkerL(40bytes): 2080*8d67ca89SAndroid Build Coastguard Worker mov -40(%eax), %ecx 2081*8d67ca89SAndroid Build Coastguard Worker cmp -40(%edx), %ecx 2082*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2083*8d67ca89SAndroid Build Coastguard WorkerL(36bytes): 2084*8d67ca89SAndroid Build Coastguard Worker mov -36(%eax), %ecx 2085*8d67ca89SAndroid Build Coastguard Worker cmp -36(%edx), %ecx 2086*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2087*8d67ca89SAndroid Build Coastguard WorkerL(32bytes): 2088*8d67ca89SAndroid Build Coastguard Worker mov -32(%eax), %ecx 2089*8d67ca89SAndroid Build Coastguard Worker cmp -32(%edx), %ecx 2090*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2091*8d67ca89SAndroid Build Coastguard WorkerL(28bytes): 2092*8d67ca89SAndroid Build Coastguard Worker mov -28(%eax), %ecx 2093*8d67ca89SAndroid Build Coastguard Worker cmp -28(%edx), %ecx 2094*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2095*8d67ca89SAndroid Build Coastguard WorkerL(24bytes): 2096*8d67ca89SAndroid Build Coastguard Worker mov -24(%eax), %ecx 2097*8d67ca89SAndroid Build Coastguard Worker cmp -24(%edx), %ecx 2098*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2099*8d67ca89SAndroid Build Coastguard WorkerL(20bytes): 2100*8d67ca89SAndroid Build Coastguard Worker mov -20(%eax), %ecx 2101*8d67ca89SAndroid Build Coastguard Worker cmp -20(%edx), %ecx 2102*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2103*8d67ca89SAndroid Build Coastguard WorkerL(16bytes): 2104*8d67ca89SAndroid Build Coastguard Worker mov -16(%eax), %ecx 2105*8d67ca89SAndroid Build Coastguard Worker cmp -16(%edx), %ecx 2106*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2107*8d67ca89SAndroid Build Coastguard WorkerL(12bytes): 2108*8d67ca89SAndroid Build Coastguard Worker mov -12(%eax), %ecx 2109*8d67ca89SAndroid Build Coastguard Worker cmp -12(%edx), %ecx 2110*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2111*8d67ca89SAndroid Build Coastguard WorkerL(8bytes): 2112*8d67ca89SAndroid Build Coastguard Worker mov -8(%eax), %ecx 2113*8d67ca89SAndroid Build Coastguard Worker cmp -8(%edx), %ecx 2114*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2115*8d67ca89SAndroid Build Coastguard WorkerL(4bytes): 2116*8d67ca89SAndroid Build Coastguard Worker mov -4(%eax), %ecx 2117*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 2118*8d67ca89SAndroid Build Coastguard Worker cmp -4(%edx), %ecx 2119*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2120*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2121*8d67ca89SAndroid Build Coastguard Worker ret 2122*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2123*8d67ca89SAndroid Build Coastguard Worker#elif defined USE_AS_MEMCMP16 2124*8d67ca89SAndroid Build Coastguard Worker 2125*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2126*8d67ca89SAndroid Build Coastguard WorkerL(46bytes): 2127*8d67ca89SAndroid Build Coastguard Worker movzwl -46(%eax), %ecx 2128*8d67ca89SAndroid Build Coastguard Worker movzwl -46(%edx), %ebx 2129*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2130*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2131*8d67ca89SAndroid Build Coastguard WorkerL(44bytes): 2132*8d67ca89SAndroid Build Coastguard Worker movzwl -44(%eax), %ecx 2133*8d67ca89SAndroid Build Coastguard Worker movzwl -44(%edx), %ebx 2134*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2135*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2136*8d67ca89SAndroid Build Coastguard WorkerL(42bytes): 2137*8d67ca89SAndroid Build Coastguard Worker movzwl -42(%eax), %ecx 2138*8d67ca89SAndroid Build Coastguard Worker movzwl -42(%edx), %ebx 2139*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2140*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2141*8d67ca89SAndroid Build Coastguard WorkerL(40bytes): 2142*8d67ca89SAndroid Build Coastguard Worker movzwl -40(%eax), %ecx 2143*8d67ca89SAndroid Build Coastguard Worker movzwl -40(%edx), %ebx 2144*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2145*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2146*8d67ca89SAndroid Build Coastguard WorkerL(38bytes): 2147*8d67ca89SAndroid Build Coastguard Worker movzwl -38(%eax), %ecx 2148*8d67ca89SAndroid Build Coastguard Worker movzwl -38(%edx), %ebx 2149*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2150*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2151*8d67ca89SAndroid Build Coastguard WorkerL(36bytes): 2152*8d67ca89SAndroid Build Coastguard Worker movzwl -36(%eax), %ecx 2153*8d67ca89SAndroid Build Coastguard Worker movzwl -36(%edx), %ebx 2154*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2155*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2156*8d67ca89SAndroid Build Coastguard WorkerL(34bytes): 2157*8d67ca89SAndroid Build Coastguard Worker movzwl -34(%eax), %ecx 2158*8d67ca89SAndroid Build Coastguard Worker movzwl -34(%edx), %ebx 2159*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2160*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2161*8d67ca89SAndroid Build Coastguard WorkerL(32bytes): 2162*8d67ca89SAndroid Build Coastguard Worker movzwl -32(%eax), %ecx 2163*8d67ca89SAndroid Build Coastguard Worker movzwl -32(%edx), %ebx 2164*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2165*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2166*8d67ca89SAndroid Build Coastguard WorkerL(30bytes): 2167*8d67ca89SAndroid Build Coastguard Worker movzwl -30(%eax), %ecx 2168*8d67ca89SAndroid Build Coastguard Worker movzwl -30(%edx), %ebx 2169*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2170*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2171*8d67ca89SAndroid Build Coastguard WorkerL(28bytes): 2172*8d67ca89SAndroid Build Coastguard Worker movzwl -28(%eax), %ecx 2173*8d67ca89SAndroid Build Coastguard Worker movzwl -28(%edx), %ebx 2174*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2175*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2176*8d67ca89SAndroid Build Coastguard WorkerL(26bytes): 2177*8d67ca89SAndroid Build Coastguard Worker movzwl -26(%eax), %ecx 2178*8d67ca89SAndroid Build Coastguard Worker movzwl -26(%edx), %ebx 2179*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2180*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2181*8d67ca89SAndroid Build Coastguard WorkerL(24bytes): 2182*8d67ca89SAndroid Build Coastguard Worker movzwl -24(%eax), %ecx 2183*8d67ca89SAndroid Build Coastguard Worker movzwl -24(%edx), %ebx 2184*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2185*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2186*8d67ca89SAndroid Build Coastguard WorkerL(22bytes): 2187*8d67ca89SAndroid Build Coastguard Worker movzwl -22(%eax), %ecx 2188*8d67ca89SAndroid Build Coastguard Worker movzwl -22(%edx), %ebx 2189*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2190*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2191*8d67ca89SAndroid Build Coastguard WorkerL(20bytes): 2192*8d67ca89SAndroid Build Coastguard Worker movzwl -20(%eax), %ecx 2193*8d67ca89SAndroid Build Coastguard Worker movzwl -20(%edx), %ebx 2194*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2195*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2196*8d67ca89SAndroid Build Coastguard WorkerL(18bytes): 2197*8d67ca89SAndroid Build Coastguard Worker movzwl -18(%eax), %ecx 2198*8d67ca89SAndroid Build Coastguard Worker movzwl -18(%edx), %ebx 2199*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2200*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2201*8d67ca89SAndroid Build Coastguard WorkerL(16bytes): 2202*8d67ca89SAndroid Build Coastguard Worker movzwl -16(%eax), %ecx 2203*8d67ca89SAndroid Build Coastguard Worker movzwl -16(%edx), %ebx 2204*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2205*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2206*8d67ca89SAndroid Build Coastguard WorkerL(14bytes): 2207*8d67ca89SAndroid Build Coastguard Worker movzwl -14(%eax), %ecx 2208*8d67ca89SAndroid Build Coastguard Worker movzwl -14(%edx), %ebx 2209*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2210*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2211*8d67ca89SAndroid Build Coastguard WorkerL(12bytes): 2212*8d67ca89SAndroid Build Coastguard Worker movzwl -12(%eax), %ecx 2213*8d67ca89SAndroid Build Coastguard Worker movzwl -12(%edx), %ebx 2214*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2215*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2216*8d67ca89SAndroid Build Coastguard WorkerL(10bytes): 2217*8d67ca89SAndroid Build Coastguard Worker movzwl -10(%eax), %ecx 2218*8d67ca89SAndroid Build Coastguard Worker movzwl -10(%edx), %ebx 2219*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2220*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2221*8d67ca89SAndroid Build Coastguard WorkerL(8bytes): 2222*8d67ca89SAndroid Build Coastguard Worker movzwl -8(%eax), %ecx 2223*8d67ca89SAndroid Build Coastguard Worker movzwl -8(%edx), %ebx 2224*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2225*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2226*8d67ca89SAndroid Build Coastguard WorkerL(6bytes): 2227*8d67ca89SAndroid Build Coastguard Worker movzwl -6(%eax), %ecx 2228*8d67ca89SAndroid Build Coastguard Worker movzwl -6(%edx), %ebx 2229*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2230*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2231*8d67ca89SAndroid Build Coastguard WorkerL(4bytes): 2232*8d67ca89SAndroid Build Coastguard Worker movzwl -4(%eax), %ecx 2233*8d67ca89SAndroid Build Coastguard Worker movzwl -4(%edx), %ebx 2234*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %ecx 2235*8d67ca89SAndroid Build Coastguard Worker jne L(memcmp16_exit) 2236*8d67ca89SAndroid Build Coastguard WorkerL(2bytes): 2237*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%eax), %eax 2238*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%edx), %ebx 2239*8d67ca89SAndroid Build Coastguard Worker subl %ebx, %eax 2240*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2241*8d67ca89SAndroid Build Coastguard Worker ret 2242*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2243*8d67ca89SAndroid Build Coastguard Worker#else 2244*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 2245*8d67ca89SAndroid Build Coastguard Worker#endif 2246*8d67ca89SAndroid Build Coastguard Worker 2247*8d67ca89SAndroid Build Coastguard Worker#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16) 2248*8d67ca89SAndroid Build Coastguard Worker 2249*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2250*8d67ca89SAndroid Build Coastguard WorkerL(45bytes): 2251*8d67ca89SAndroid Build Coastguard Worker mov -45(%eax), %ecx 2252*8d67ca89SAndroid Build Coastguard Worker mov -45(%edx), %ebx 2253*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2254*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2255*8d67ca89SAndroid Build Coastguard WorkerL(41bytes): 2256*8d67ca89SAndroid Build Coastguard Worker mov -41(%eax), %ecx 2257*8d67ca89SAndroid Build Coastguard Worker mov -41(%edx), %ebx 2258*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2259*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2260*8d67ca89SAndroid Build Coastguard WorkerL(37bytes): 2261*8d67ca89SAndroid Build Coastguard Worker mov -37(%eax), %ecx 2262*8d67ca89SAndroid Build Coastguard Worker mov -37(%edx), %ebx 2263*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2264*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2265*8d67ca89SAndroid Build Coastguard WorkerL(33bytes): 2266*8d67ca89SAndroid Build Coastguard Worker mov -33(%eax), %ecx 2267*8d67ca89SAndroid Build Coastguard Worker mov -33(%edx), %ebx 2268*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2269*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2270*8d67ca89SAndroid Build Coastguard WorkerL(29bytes): 2271*8d67ca89SAndroid Build Coastguard Worker mov -29(%eax), %ecx 2272*8d67ca89SAndroid Build Coastguard Worker mov -29(%edx), %ebx 2273*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2274*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2275*8d67ca89SAndroid Build Coastguard WorkerL(25bytes): 2276*8d67ca89SAndroid Build Coastguard Worker mov -25(%eax), %ecx 2277*8d67ca89SAndroid Build Coastguard Worker mov -25(%edx), %ebx 2278*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2279*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2280*8d67ca89SAndroid Build Coastguard WorkerL(21bytes): 2281*8d67ca89SAndroid Build Coastguard Worker mov -21(%eax), %ecx 2282*8d67ca89SAndroid Build Coastguard Worker mov -21(%edx), %ebx 2283*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2284*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2285*8d67ca89SAndroid Build Coastguard WorkerL(17bytes): 2286*8d67ca89SAndroid Build Coastguard Worker mov -17(%eax), %ecx 2287*8d67ca89SAndroid Build Coastguard Worker mov -17(%edx), %ebx 2288*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2289*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2290*8d67ca89SAndroid Build Coastguard WorkerL(13bytes): 2291*8d67ca89SAndroid Build Coastguard Worker mov -13(%eax), %ecx 2292*8d67ca89SAndroid Build Coastguard Worker mov -13(%edx), %ebx 2293*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2294*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2295*8d67ca89SAndroid Build Coastguard WorkerL(9bytes): 2296*8d67ca89SAndroid Build Coastguard Worker mov -9(%eax), %ecx 2297*8d67ca89SAndroid Build Coastguard Worker mov -9(%edx), %ebx 2298*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2299*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2300*8d67ca89SAndroid Build Coastguard WorkerL(5bytes): 2301*8d67ca89SAndroid Build Coastguard Worker mov -5(%eax), %ecx 2302*8d67ca89SAndroid Build Coastguard Worker mov -5(%edx), %ebx 2303*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2304*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2305*8d67ca89SAndroid Build Coastguard Worker movzbl -1(%eax), %ecx 2306*8d67ca89SAndroid Build Coastguard Worker cmp -1(%edx), %cl 2307*8d67ca89SAndroid Build Coastguard Worker mov $0, %eax 2308*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2309*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2310*8d67ca89SAndroid Build Coastguard Worker ret 2311*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2312*8d67ca89SAndroid Build Coastguard Worker 2313*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2314*8d67ca89SAndroid Build Coastguard WorkerL(46bytes): 2315*8d67ca89SAndroid Build Coastguard Worker mov -46(%eax), %ecx 2316*8d67ca89SAndroid Build Coastguard Worker mov -46(%edx), %ebx 2317*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2318*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2319*8d67ca89SAndroid Build Coastguard WorkerL(42bytes): 2320*8d67ca89SAndroid Build Coastguard Worker mov -42(%eax), %ecx 2321*8d67ca89SAndroid Build Coastguard Worker mov -42(%edx), %ebx 2322*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2323*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2324*8d67ca89SAndroid Build Coastguard WorkerL(38bytes): 2325*8d67ca89SAndroid Build Coastguard Worker mov -38(%eax), %ecx 2326*8d67ca89SAndroid Build Coastguard Worker mov -38(%edx), %ebx 2327*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2328*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2329*8d67ca89SAndroid Build Coastguard WorkerL(34bytes): 2330*8d67ca89SAndroid Build Coastguard Worker mov -34(%eax), %ecx 2331*8d67ca89SAndroid Build Coastguard Worker mov -34(%edx), %ebx 2332*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2333*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2334*8d67ca89SAndroid Build Coastguard WorkerL(30bytes): 2335*8d67ca89SAndroid Build Coastguard Worker mov -30(%eax), %ecx 2336*8d67ca89SAndroid Build Coastguard Worker mov -30(%edx), %ebx 2337*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2338*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2339*8d67ca89SAndroid Build Coastguard WorkerL(26bytes): 2340*8d67ca89SAndroid Build Coastguard Worker mov -26(%eax), %ecx 2341*8d67ca89SAndroid Build Coastguard Worker mov -26(%edx), %ebx 2342*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2343*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2344*8d67ca89SAndroid Build Coastguard WorkerL(22bytes): 2345*8d67ca89SAndroid Build Coastguard Worker mov -22(%eax), %ecx 2346*8d67ca89SAndroid Build Coastguard Worker mov -22(%edx), %ebx 2347*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2348*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2349*8d67ca89SAndroid Build Coastguard WorkerL(18bytes): 2350*8d67ca89SAndroid Build Coastguard Worker mov -18(%eax), %ecx 2351*8d67ca89SAndroid Build Coastguard Worker mov -18(%edx), %ebx 2352*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2353*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2354*8d67ca89SAndroid Build Coastguard WorkerL(14bytes): 2355*8d67ca89SAndroid Build Coastguard Worker mov -14(%eax), %ecx 2356*8d67ca89SAndroid Build Coastguard Worker mov -14(%edx), %ebx 2357*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2358*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2359*8d67ca89SAndroid Build Coastguard WorkerL(10bytes): 2360*8d67ca89SAndroid Build Coastguard Worker mov -10(%eax), %ecx 2361*8d67ca89SAndroid Build Coastguard Worker mov -10(%edx), %ebx 2362*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2363*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2364*8d67ca89SAndroid Build Coastguard WorkerL(6bytes): 2365*8d67ca89SAndroid Build Coastguard Worker mov -6(%eax), %ecx 2366*8d67ca89SAndroid Build Coastguard Worker mov -6(%edx), %ebx 2367*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2368*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2369*8d67ca89SAndroid Build Coastguard WorkerL(2bytes): 2370*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%eax), %ecx 2371*8d67ca89SAndroid Build Coastguard Worker movzwl -2(%edx), %ebx 2372*8d67ca89SAndroid Build Coastguard Worker cmp %bl, %cl 2373*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2374*8d67ca89SAndroid Build Coastguard Worker cmp %bh, %ch 2375*8d67ca89SAndroid Build Coastguard Worker mov $0, %eax 2376*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2377*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2378*8d67ca89SAndroid Build Coastguard Worker ret 2379*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2380*8d67ca89SAndroid Build Coastguard Worker 2381*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2382*8d67ca89SAndroid Build Coastguard WorkerL(47bytes): 2383*8d67ca89SAndroid Build Coastguard Worker movl -47(%eax), %ecx 2384*8d67ca89SAndroid Build Coastguard Worker movl -47(%edx), %ebx 2385*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2386*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2387*8d67ca89SAndroid Build Coastguard WorkerL(43bytes): 2388*8d67ca89SAndroid Build Coastguard Worker movl -43(%eax), %ecx 2389*8d67ca89SAndroid Build Coastguard Worker movl -43(%edx), %ebx 2390*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2391*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2392*8d67ca89SAndroid Build Coastguard WorkerL(39bytes): 2393*8d67ca89SAndroid Build Coastguard Worker movl -39(%eax), %ecx 2394*8d67ca89SAndroid Build Coastguard Worker movl -39(%edx), %ebx 2395*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2396*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2397*8d67ca89SAndroid Build Coastguard WorkerL(35bytes): 2398*8d67ca89SAndroid Build Coastguard Worker movl -35(%eax), %ecx 2399*8d67ca89SAndroid Build Coastguard Worker movl -35(%edx), %ebx 2400*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2401*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2402*8d67ca89SAndroid Build Coastguard WorkerL(31bytes): 2403*8d67ca89SAndroid Build Coastguard Worker movl -31(%eax), %ecx 2404*8d67ca89SAndroid Build Coastguard Worker movl -31(%edx), %ebx 2405*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2406*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2407*8d67ca89SAndroid Build Coastguard WorkerL(27bytes): 2408*8d67ca89SAndroid Build Coastguard Worker movl -27(%eax), %ecx 2409*8d67ca89SAndroid Build Coastguard Worker movl -27(%edx), %ebx 2410*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2411*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2412*8d67ca89SAndroid Build Coastguard WorkerL(23bytes): 2413*8d67ca89SAndroid Build Coastguard Worker movl -23(%eax), %ecx 2414*8d67ca89SAndroid Build Coastguard Worker movl -23(%edx), %ebx 2415*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2416*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2417*8d67ca89SAndroid Build Coastguard WorkerL(19bytes): 2418*8d67ca89SAndroid Build Coastguard Worker movl -19(%eax), %ecx 2419*8d67ca89SAndroid Build Coastguard Worker movl -19(%edx), %ebx 2420*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2421*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2422*8d67ca89SAndroid Build Coastguard WorkerL(15bytes): 2423*8d67ca89SAndroid Build Coastguard Worker movl -15(%eax), %ecx 2424*8d67ca89SAndroid Build Coastguard Worker movl -15(%edx), %ebx 2425*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2426*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2427*8d67ca89SAndroid Build Coastguard WorkerL(11bytes): 2428*8d67ca89SAndroid Build Coastguard Worker movl -11(%eax), %ecx 2429*8d67ca89SAndroid Build Coastguard Worker movl -11(%edx), %ebx 2430*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2431*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2432*8d67ca89SAndroid Build Coastguard WorkerL(7bytes): 2433*8d67ca89SAndroid Build Coastguard Worker movl -7(%eax), %ecx 2434*8d67ca89SAndroid Build Coastguard Worker movl -7(%edx), %ebx 2435*8d67ca89SAndroid Build Coastguard Worker cmp %ebx, %ecx 2436*8d67ca89SAndroid Build Coastguard Worker jne L(find_diff) 2437*8d67ca89SAndroid Build Coastguard WorkerL(3bytes): 2438*8d67ca89SAndroid Build Coastguard Worker movzwl -3(%eax), %ecx 2439*8d67ca89SAndroid Build Coastguard Worker movzwl -3(%edx), %ebx 2440*8d67ca89SAndroid Build Coastguard Worker cmpb %bl, %cl 2441*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2442*8d67ca89SAndroid Build Coastguard Worker cmp %bx, %cx 2443*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2444*8d67ca89SAndroid Build Coastguard Worker movzbl -1(%eax), %eax 2445*8d67ca89SAndroid Build Coastguard Worker cmpb -1(%edx), %al 2446*8d67ca89SAndroid Build Coastguard Worker mov $0, %eax 2447*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2448*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2449*8d67ca89SAndroid Build Coastguard Worker ret 2450*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 2451*8d67ca89SAndroid Build Coastguard Worker 2452*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2453*8d67ca89SAndroid Build Coastguard WorkerL(find_diff): 2454*8d67ca89SAndroid Build Coastguard Worker cmpb %bl, %cl 2455*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2456*8d67ca89SAndroid Build Coastguard Worker cmp %bx, %cx 2457*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2458*8d67ca89SAndroid Build Coastguard Worker shr $16,%ecx 2459*8d67ca89SAndroid Build Coastguard Worker shr $16,%ebx 2460*8d67ca89SAndroid Build Coastguard Worker cmp %bl, %cl 2461*8d67ca89SAndroid Build Coastguard Worker jne L(end) 2462*8d67ca89SAndroid Build Coastguard Worker cmp %bx, %cx 2463*8d67ca89SAndroid Build Coastguard Worker 2464*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2465*8d67ca89SAndroid Build Coastguard WorkerL(end): 2466*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2467*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 2468*8d67ca89SAndroid Build Coastguard Worker ja L(bigger) 2469*8d67ca89SAndroid Build Coastguard Worker neg %eax 2470*8d67ca89SAndroid Build Coastguard WorkerL(bigger): 2471*8d67ca89SAndroid Build Coastguard Worker ret 2472*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_WMEMCMP) 2473*8d67ca89SAndroid Build Coastguard Worker 2474*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2475*8d67ca89SAndroid Build Coastguard WorkerL(find_diff): 2476*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2477*8d67ca89SAndroid Build Coastguard Worker mov $1, %eax 2478*8d67ca89SAndroid Build Coastguard Worker jg L(find_diff_bigger) 2479*8d67ca89SAndroid Build Coastguard Worker neg %eax 2480*8d67ca89SAndroid Build Coastguard Worker ret 2481*8d67ca89SAndroid Build Coastguard Worker 2482*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2483*8d67ca89SAndroid Build Coastguard WorkerL(find_diff_bigger): 2484*8d67ca89SAndroid Build Coastguard Worker ret 2485*8d67ca89SAndroid Build Coastguard Worker 2486*8d67ca89SAndroid Build Coastguard Worker#elif defined(USE_AS_MEMCMP16) 2487*8d67ca89SAndroid Build Coastguard Worker 2488*8d67ca89SAndroid Build Coastguard Worker .p2align 4 2489*8d67ca89SAndroid Build Coastguard WorkerL(memcmp16_exit): 2490*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 2491*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %eax 2492*8d67ca89SAndroid Build Coastguard Worker ret 2493*8d67ca89SAndroid Build Coastguard Worker#else 2494*8d67ca89SAndroid Build Coastguard Worker# error Unreachable preprocessor case 2495*8d67ca89SAndroid Build Coastguard Worker#endif 2496*8d67ca89SAndroid Build Coastguard WorkerEND (MEMCMP) 2497