1*8d67ca89SAndroid Build Coastguard Worker/* 2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2014, Intel Corporation 3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker 5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met: 7*8d67ca89SAndroid Build Coastguard Worker 8*8d67ca89SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright notice, 9*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker 11*8d67ca89SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright notice, 12*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 13*8d67ca89SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 14*8d67ca89SAndroid Build Coastguard Worker 15*8d67ca89SAndroid Build Coastguard Worker * Neither the name of Intel Corporation nor the names of its contributors 16*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 17*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 18*8d67ca89SAndroid Build Coastguard Worker 19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*8d67ca89SAndroid Build Coastguard Worker*/ 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker#ifndef STRLEN 32*8d67ca89SAndroid Build Coastguard Worker# define STRLEN strlen 33*8d67ca89SAndroid Build Coastguard Worker#endif 34*8d67ca89SAndroid Build Coastguard Worker 35*8d67ca89SAndroid Build Coastguard Worker#ifndef L 36*8d67ca89SAndroid Build Coastguard Worker# define L(label) .L##label 37*8d67ca89SAndroid Build Coastguard Worker#endif 38*8d67ca89SAndroid Build Coastguard Worker 39*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc 40*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc .cfi_startproc 41*8d67ca89SAndroid Build Coastguard Worker#endif 42*8d67ca89SAndroid Build Coastguard Worker 43*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc 44*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc .cfi_endproc 45*8d67ca89SAndroid Build Coastguard Worker#endif 46*8d67ca89SAndroid Build Coastguard Worker 47*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_rel_offset 48*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 49*8d67ca89SAndroid Build Coastguard Worker#endif 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore 52*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg) .cfi_restore reg 53*8d67ca89SAndroid Build Coastguard Worker#endif 54*8d67ca89SAndroid Build Coastguard Worker 55*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_adjust_cfa_offset 56*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 57*8d67ca89SAndroid Build Coastguard Worker#endif 58*8d67ca89SAndroid Build Coastguard Worker 59*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY 60*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name) \ 61*8d67ca89SAndroid Build Coastguard Worker .type name, @function; \ 62*8d67ca89SAndroid Build Coastguard Worker .globl name; \ 63*8d67ca89SAndroid Build Coastguard Worker .p2align 4; \ 64*8d67ca89SAndroid Build Coastguard Workername: \ 65*8d67ca89SAndroid Build Coastguard Worker cfi_startproc 66*8d67ca89SAndroid Build Coastguard Worker#endif 67*8d67ca89SAndroid Build Coastguard Worker 68*8d67ca89SAndroid Build Coastguard Worker#ifndef END 69*8d67ca89SAndroid Build Coastguard Worker# define END(name) \ 70*8d67ca89SAndroid Build Coastguard Worker cfi_endproc; \ 71*8d67ca89SAndroid Build Coastguard Worker .size name, .-name 72*8d67ca89SAndroid Build Coastguard Worker#endif 73*8d67ca89SAndroid Build Coastguard Worker 74*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG) \ 75*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (4); \ 76*8d67ca89SAndroid Build Coastguard Worker cfi_rel_offset (REG, 0) 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG) \ 79*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (-4); \ 80*8d67ca89SAndroid Build Coastguard Worker cfi_restore (REG) 81*8d67ca89SAndroid Build Coastguard Worker 82*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG) pushl REG; CFI_PUSH (REG) 83*8d67ca89SAndroid Build Coastguard Worker#define POP(REG) popl REG; CFI_POP (REG) 84*8d67ca89SAndroid Build Coastguard Worker 85*8d67ca89SAndroid Build Coastguard Worker .section .text.sse2,"ax",@progbits 86*8d67ca89SAndroid Build Coastguard WorkerENTRY (STRLEN) 87*8d67ca89SAndroid Build Coastguard Worker mov 4(%esp), %edx 88*8d67ca89SAndroid Build Coastguard Worker mov %edx, %ecx 89*8d67ca89SAndroid Build Coastguard Worker and $0x3f, %ecx 90*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 91*8d67ca89SAndroid Build Coastguard Worker cmp $0x30, %ecx 92*8d67ca89SAndroid Build Coastguard Worker ja L(next) 93*8d67ca89SAndroid Build Coastguard Worker movdqu (%edx), %xmm1 94*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 95*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 96*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 97*8d67ca89SAndroid Build Coastguard Worker jnz L(exit_less16) 98*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 99*8d67ca89SAndroid Build Coastguard Worker and $-16, %eax 100*8d67ca89SAndroid Build Coastguard Worker jmp L(align16_start) 101*8d67ca89SAndroid Build Coastguard WorkerL(next): 102*8d67ca89SAndroid Build Coastguard Worker mov %edx, %eax 103*8d67ca89SAndroid Build Coastguard Worker and $-16, %eax 104*8d67ca89SAndroid Build Coastguard Worker PUSH (%edi) 105*8d67ca89SAndroid Build Coastguard Worker pcmpeqb (%eax), %xmm0 106*8d67ca89SAndroid Build Coastguard Worker mov $-1, %edi 107*8d67ca89SAndroid Build Coastguard Worker sub %eax, %ecx 108*8d67ca89SAndroid Build Coastguard Worker shl %cl, %edi 109*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 110*8d67ca89SAndroid Build Coastguard Worker and %edi, %ecx 111*8d67ca89SAndroid Build Coastguard Worker POP (%edi) 112*8d67ca89SAndroid Build Coastguard Worker jnz L(exit_unaligned) 113*8d67ca89SAndroid Build Coastguard Worker pxor %xmm0, %xmm0 114*8d67ca89SAndroid Build Coastguard WorkerL(align16_start): 115*8d67ca89SAndroid Build Coastguard Worker pxor %xmm1, %xmm1 116*8d67ca89SAndroid Build Coastguard Worker pxor %xmm2, %xmm2 117*8d67ca89SAndroid Build Coastguard Worker pxor %xmm3, %xmm3 118*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%eax), %xmm0 119*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 120*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 121*8d67ca89SAndroid Build Coastguard Worker jnz L(exit16) 122*8d67ca89SAndroid Build Coastguard Worker 123*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%eax), %xmm1 124*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 125*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 126*8d67ca89SAndroid Build Coastguard Worker jnz L(exit32) 127*8d67ca89SAndroid Build Coastguard Worker 128*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%eax), %xmm2 129*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 130*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 131*8d67ca89SAndroid Build Coastguard Worker jnz L(exit48) 132*8d67ca89SAndroid Build Coastguard Worker 133*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 64(%eax), %xmm3 134*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 135*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 136*8d67ca89SAndroid Build Coastguard Worker jnz L(exit64) 137*8d67ca89SAndroid Build Coastguard Worker 138*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 80(%eax), %xmm0 139*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 140*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 141*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 142*8d67ca89SAndroid Build Coastguard Worker jnz L(exit16) 143*8d67ca89SAndroid Build Coastguard Worker 144*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%eax), %xmm1 145*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 146*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 147*8d67ca89SAndroid Build Coastguard Worker jnz L(exit32) 148*8d67ca89SAndroid Build Coastguard Worker 149*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%eax), %xmm2 150*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 151*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 152*8d67ca89SAndroid Build Coastguard Worker jnz L(exit48) 153*8d67ca89SAndroid Build Coastguard Worker 154*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 64(%eax), %xmm3 155*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 156*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 157*8d67ca89SAndroid Build Coastguard Worker jnz L(exit64) 158*8d67ca89SAndroid Build Coastguard Worker 159*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 80(%eax), %xmm0 160*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 161*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 162*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 163*8d67ca89SAndroid Build Coastguard Worker jnz L(exit16) 164*8d67ca89SAndroid Build Coastguard Worker 165*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%eax), %xmm1 166*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 167*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 168*8d67ca89SAndroid Build Coastguard Worker jnz L(exit32) 169*8d67ca89SAndroid Build Coastguard Worker 170*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%eax), %xmm2 171*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 172*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 173*8d67ca89SAndroid Build Coastguard Worker jnz L(exit48) 174*8d67ca89SAndroid Build Coastguard Worker 175*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 64(%eax), %xmm3 176*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 177*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 178*8d67ca89SAndroid Build Coastguard Worker jnz L(exit64) 179*8d67ca89SAndroid Build Coastguard Worker 180*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 80(%eax), %xmm0 181*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 182*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 183*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 184*8d67ca89SAndroid Build Coastguard Worker jnz L(exit16) 185*8d67ca89SAndroid Build Coastguard Worker 186*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%eax), %xmm1 187*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 188*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 189*8d67ca89SAndroid Build Coastguard Worker jnz L(exit32) 190*8d67ca89SAndroid Build Coastguard Worker 191*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%eax), %xmm2 192*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 193*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 194*8d67ca89SAndroid Build Coastguard Worker jnz L(exit48) 195*8d67ca89SAndroid Build Coastguard Worker 196*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 64(%eax), %xmm3 197*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 198*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 199*8d67ca89SAndroid Build Coastguard Worker jnz L(exit64) 200*8d67ca89SAndroid Build Coastguard Worker 201*8d67ca89SAndroid Build Coastguard Worker 202*8d67ca89SAndroid Build Coastguard Worker test $0x3f, %eax 203*8d67ca89SAndroid Build Coastguard Worker jz L(align64_loop) 204*8d67ca89SAndroid Build Coastguard Worker 205*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 80(%eax), %xmm0 206*8d67ca89SAndroid Build Coastguard Worker add $80, %eax 207*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 208*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 209*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 210*8d67ca89SAndroid Build Coastguard Worker 211*8d67ca89SAndroid Build Coastguard Worker test $0x3f, %eax 212*8d67ca89SAndroid Build Coastguard Worker jz L(align64_loop) 213*8d67ca89SAndroid Build Coastguard Worker 214*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%eax), %xmm1 215*8d67ca89SAndroid Build Coastguard Worker add $16, %eax 216*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 217*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 218*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 219*8d67ca89SAndroid Build Coastguard Worker 220*8d67ca89SAndroid Build Coastguard Worker test $0x3f, %eax 221*8d67ca89SAndroid Build Coastguard Worker jz L(align64_loop) 222*8d67ca89SAndroid Build Coastguard Worker 223*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%eax), %xmm2 224*8d67ca89SAndroid Build Coastguard Worker add $16, %eax 225*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 226*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 227*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 228*8d67ca89SAndroid Build Coastguard Worker 229*8d67ca89SAndroid Build Coastguard Worker test $0x3f, %eax 230*8d67ca89SAndroid Build Coastguard Worker jz L(align64_loop) 231*8d67ca89SAndroid Build Coastguard Worker 232*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 16(%eax), %xmm3 233*8d67ca89SAndroid Build Coastguard Worker add $16, %eax 234*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 235*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 236*8d67ca89SAndroid Build Coastguard Worker jnz L(exit) 237*8d67ca89SAndroid Build Coastguard Worker 238*8d67ca89SAndroid Build Coastguard Worker add $16, %eax 239*8d67ca89SAndroid Build Coastguard Worker .p2align 4 240*8d67ca89SAndroid Build Coastguard WorkerL(align64_loop): 241*8d67ca89SAndroid Build Coastguard Worker movaps (%eax), %xmm4 242*8d67ca89SAndroid Build Coastguard Worker pminub 16(%eax), %xmm4 243*8d67ca89SAndroid Build Coastguard Worker movaps 32(%eax), %xmm5 244*8d67ca89SAndroid Build Coastguard Worker pminub 48(%eax), %xmm5 245*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 246*8d67ca89SAndroid Build Coastguard Worker pminub %xmm4, %xmm5 247*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm5 248*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm5, %ecx 249*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 250*8d67ca89SAndroid Build Coastguard Worker jz L(align64_loop) 251*8d67ca89SAndroid Build Coastguard Worker 252*8d67ca89SAndroid Build Coastguard Worker 253*8d67ca89SAndroid Build Coastguard Worker pcmpeqb -64(%eax), %xmm0 254*8d67ca89SAndroid Build Coastguard Worker sub $80, %eax 255*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %ecx 256*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 257*8d67ca89SAndroid Build Coastguard Worker jnz L(exit16) 258*8d67ca89SAndroid Build Coastguard Worker 259*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 32(%eax), %xmm1 260*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm1, %ecx 261*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 262*8d67ca89SAndroid Build Coastguard Worker jnz L(exit32) 263*8d67ca89SAndroid Build Coastguard Worker 264*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 48(%eax), %xmm2 265*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 266*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 267*8d67ca89SAndroid Build Coastguard Worker jnz L(exit48) 268*8d67ca89SAndroid Build Coastguard Worker 269*8d67ca89SAndroid Build Coastguard Worker pcmpeqb 64(%eax), %xmm3 270*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %ecx 271*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 272*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 273*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 274*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 275*8d67ca89SAndroid Build Coastguard Worker ret 276*8d67ca89SAndroid Build Coastguard Worker 277*8d67ca89SAndroid Build Coastguard Worker .p2align 4 278*8d67ca89SAndroid Build Coastguard WorkerL(exit): 279*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 280*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 281*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 282*8d67ca89SAndroid Build Coastguard Worker ret 283*8d67ca89SAndroid Build Coastguard Worker 284*8d67ca89SAndroid Build Coastguard WorkerL(exit_less16): 285*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %eax 286*8d67ca89SAndroid Build Coastguard Worker ret 287*8d67ca89SAndroid Build Coastguard Worker 288*8d67ca89SAndroid Build Coastguard Worker .p2align 4 289*8d67ca89SAndroid Build Coastguard WorkerL(exit_unaligned): 290*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 291*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 292*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 293*8d67ca89SAndroid Build Coastguard Worker ret 294*8d67ca89SAndroid Build Coastguard Worker 295*8d67ca89SAndroid Build Coastguard Worker .p2align 4 296*8d67ca89SAndroid Build Coastguard WorkerL(exit16): 297*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 298*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 299*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 300*8d67ca89SAndroid Build Coastguard Worker add $16, %eax 301*8d67ca89SAndroid Build Coastguard Worker ret 302*8d67ca89SAndroid Build Coastguard Worker 303*8d67ca89SAndroid Build Coastguard Worker .p2align 4 304*8d67ca89SAndroid Build Coastguard WorkerL(exit32): 305*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 306*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 307*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 308*8d67ca89SAndroid Build Coastguard Worker add $32, %eax 309*8d67ca89SAndroid Build Coastguard Worker ret 310*8d67ca89SAndroid Build Coastguard Worker 311*8d67ca89SAndroid Build Coastguard Worker .p2align 4 312*8d67ca89SAndroid Build Coastguard WorkerL(exit48): 313*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 314*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 315*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 316*8d67ca89SAndroid Build Coastguard Worker add $48, %eax 317*8d67ca89SAndroid Build Coastguard Worker ret 318*8d67ca89SAndroid Build Coastguard Worker 319*8d67ca89SAndroid Build Coastguard Worker .p2align 4 320*8d67ca89SAndroid Build Coastguard WorkerL(exit64): 321*8d67ca89SAndroid Build Coastguard Worker sub %edx, %eax 322*8d67ca89SAndroid Build Coastguard Worker bsf %ecx, %ecx 323*8d67ca89SAndroid Build Coastguard Worker add %ecx, %eax 324*8d67ca89SAndroid Build Coastguard Worker add $64, %eax 325*8d67ca89SAndroid Build Coastguard Worker ret 326*8d67ca89SAndroid Build Coastguard Worker 327*8d67ca89SAndroid Build Coastguard WorkerEND (STRLEN) 328*8d67ca89SAndroid Build Coastguard Worker 329