1*8d67ca89SAndroid Build Coastguard Worker/* 2*8d67ca89SAndroid Build Coastguard WorkerCopyright (c) 2011, Intel Corporation 3*8d67ca89SAndroid Build Coastguard WorkerAll rights reserved. 4*8d67ca89SAndroid Build Coastguard Worker 5*8d67ca89SAndroid Build Coastguard WorkerRedistribution and use in source and binary forms, with or without 6*8d67ca89SAndroid Build Coastguard Workermodification, are permitted provided that the following conditions are met: 7*8d67ca89SAndroid Build Coastguard Worker 8*8d67ca89SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright notice, 9*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer. 10*8d67ca89SAndroid Build Coastguard Worker 11*8d67ca89SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above copyright notice, 12*8d67ca89SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 13*8d67ca89SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 14*8d67ca89SAndroid Build Coastguard Worker 15*8d67ca89SAndroid Build Coastguard Worker * Neither the name of Intel Corporation nor the names of its contributors 16*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 17*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 18*8d67ca89SAndroid Build Coastguard Worker 19*8d67ca89SAndroid Build Coastguard WorkerTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20*8d67ca89SAndroid Build Coastguard WorkerANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21*8d67ca89SAndroid Build Coastguard WorkerWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22*8d67ca89SAndroid Build Coastguard WorkerDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 23*8d67ca89SAndroid Build Coastguard WorkerANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24*8d67ca89SAndroid Build Coastguard Worker(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*8d67ca89SAndroid Build Coastguard WorkerLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26*8d67ca89SAndroid Build Coastguard WorkerANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27*8d67ca89SAndroid Build Coastguard Worker(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28*8d67ca89SAndroid Build Coastguard WorkerSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*8d67ca89SAndroid Build Coastguard Worker*/ 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker#ifndef L 32*8d67ca89SAndroid Build Coastguard Worker# define L(label) .L##label 33*8d67ca89SAndroid Build Coastguard Worker#endif 34*8d67ca89SAndroid Build Coastguard Worker 35*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_startproc 36*8d67ca89SAndroid Build Coastguard Worker# define cfi_startproc .cfi_startproc 37*8d67ca89SAndroid Build Coastguard Worker#endif 38*8d67ca89SAndroid Build Coastguard Worker 39*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_endproc 40*8d67ca89SAndroid Build Coastguard Worker# define cfi_endproc .cfi_endproc 41*8d67ca89SAndroid Build Coastguard Worker#endif 42*8d67ca89SAndroid Build Coastguard Worker 43*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_rel_offset 44*8d67ca89SAndroid Build Coastguard Worker# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 45*8d67ca89SAndroid Build Coastguard Worker#endif 46*8d67ca89SAndroid Build Coastguard Worker 47*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_restore 48*8d67ca89SAndroid Build Coastguard Worker# define cfi_restore(reg) .cfi_restore reg 49*8d67ca89SAndroid Build Coastguard Worker#endif 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker#ifndef cfi_adjust_cfa_offset 52*8d67ca89SAndroid Build Coastguard Worker# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 53*8d67ca89SAndroid Build Coastguard Worker#endif 54*8d67ca89SAndroid Build Coastguard Worker 55*8d67ca89SAndroid Build Coastguard Worker#ifndef ENTRY 56*8d67ca89SAndroid Build Coastguard Worker# define ENTRY(name) \ 57*8d67ca89SAndroid Build Coastguard Worker .type name, @function; \ 58*8d67ca89SAndroid Build Coastguard Worker .globl name; \ 59*8d67ca89SAndroid Build Coastguard Worker .p2align 4; \ 60*8d67ca89SAndroid Build Coastguard Workername: \ 61*8d67ca89SAndroid Build Coastguard Worker cfi_startproc 62*8d67ca89SAndroid Build Coastguard Worker#endif 63*8d67ca89SAndroid Build Coastguard Worker 64*8d67ca89SAndroid Build Coastguard Worker#ifndef END 65*8d67ca89SAndroid Build Coastguard Worker# define END(name) \ 66*8d67ca89SAndroid Build Coastguard Worker cfi_endproc; \ 67*8d67ca89SAndroid Build Coastguard Worker .size name, .-name 68*8d67ca89SAndroid Build Coastguard Worker#endif 69*8d67ca89SAndroid Build Coastguard Worker 70*8d67ca89SAndroid Build Coastguard Worker#define CFI_PUSH(REG) \ 71*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (4); \ 72*8d67ca89SAndroid Build Coastguard Worker cfi_rel_offset (REG, 0) 73*8d67ca89SAndroid Build Coastguard Worker 74*8d67ca89SAndroid Build Coastguard Worker#define CFI_POP(REG) \ 75*8d67ca89SAndroid Build Coastguard Worker cfi_adjust_cfa_offset (-4); \ 76*8d67ca89SAndroid Build Coastguard Worker cfi_restore (REG) 77*8d67ca89SAndroid Build Coastguard Worker 78*8d67ca89SAndroid Build Coastguard Worker#define PUSH(REG) pushl REG; CFI_PUSH (REG) 79*8d67ca89SAndroid Build Coastguard Worker#define POP(REG) popl REG; CFI_POP (REG) 80*8d67ca89SAndroid Build Coastguard Worker 81*8d67ca89SAndroid Build Coastguard Worker#define PARMS 8 82*8d67ca89SAndroid Build Coastguard Worker#define ENTRANCE PUSH(%edi) 83*8d67ca89SAndroid Build Coastguard Worker#define RETURN POP (%edi); ret; CFI_PUSH (%edi); 84*8d67ca89SAndroid Build Coastguard Worker 85*8d67ca89SAndroid Build Coastguard Worker 86*8d67ca89SAndroid Build Coastguard Worker#define STR1 PARMS 87*8d67ca89SAndroid Build Coastguard Worker#define STR2 STR1+4 88*8d67ca89SAndroid Build Coastguard Worker 89*8d67ca89SAndroid Build Coastguard Worker .text 90*8d67ca89SAndroid Build Coastguard WorkerENTRY (strchr) 91*8d67ca89SAndroid Build Coastguard Worker 92*8d67ca89SAndroid Build Coastguard Worker ENTRANCE 93*8d67ca89SAndroid Build Coastguard Worker mov STR1(%esp), %ecx 94*8d67ca89SAndroid Build Coastguard Worker movd STR2(%esp), %xmm1 95*8d67ca89SAndroid Build Coastguard Worker 96*8d67ca89SAndroid Build Coastguard Worker pxor %xmm2, %xmm2 97*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %edi 98*8d67ca89SAndroid Build Coastguard Worker punpcklbw %xmm1, %xmm1 99*8d67ca89SAndroid Build Coastguard Worker punpcklbw %xmm1, %xmm1 100*8d67ca89SAndroid Build Coastguard Worker /* ECX has OFFSET. */ 101*8d67ca89SAndroid Build Coastguard Worker and $15, %ecx 102*8d67ca89SAndroid Build Coastguard Worker pshufd $0, %xmm1, %xmm1 103*8d67ca89SAndroid Build Coastguard Worker je L(loop) 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker/* Handle unaligned string. */ 106*8d67ca89SAndroid Build Coastguard Worker and $-16, %edi 107*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 108*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 109*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 110*8d67ca89SAndroid Build Coastguard Worker /* Find where NULL is. */ 111*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 112*8d67ca89SAndroid Build Coastguard Worker /* Check if there is a match. */ 113*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 114*8d67ca89SAndroid Build Coastguard Worker /* Remove the leading bytes. */ 115*8d67ca89SAndroid Build Coastguard Worker sarl %cl, %edx 116*8d67ca89SAndroid Build Coastguard Worker sarl %cl, %eax 117*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 118*8d67ca89SAndroid Build Coastguard Worker jz L(unaligned_no_match) 119*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 120*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 121*8d67ca89SAndroid Build Coastguard Worker jz L(match_case1) 122*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case2) 123*8d67ca89SAndroid Build Coastguard Worker 124*8d67ca89SAndroid Build Coastguard Worker .p2align 4 125*8d67ca89SAndroid Build Coastguard WorkerL(unaligned_no_match): 126*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 127*8d67ca89SAndroid Build Coastguard Worker jne L(return_null) 128*8d67ca89SAndroid Build Coastguard Worker 129*8d67ca89SAndroid Build Coastguard Worker pxor %xmm2, %xmm2 130*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 131*8d67ca89SAndroid Build Coastguard Worker 132*8d67ca89SAndroid Build Coastguard Worker .p2align 4 133*8d67ca89SAndroid Build Coastguard Worker/* Loop start on aligned string. */ 134*8d67ca89SAndroid Build Coastguard WorkerL(loop): 135*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 136*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 137*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 138*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 139*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 140*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 141*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 142*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 143*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 144*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 145*8d67ca89SAndroid Build Coastguard Worker 146*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 147*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 148*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 149*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 150*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 151*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 152*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 153*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 154*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 155*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 156*8d67ca89SAndroid Build Coastguard Worker 157*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 158*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 159*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 160*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 161*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 162*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 163*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 164*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 165*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 166*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 167*8d67ca89SAndroid Build Coastguard Worker 168*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 169*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 170*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 171*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %edx 172*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 173*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 174*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 175*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 176*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 177*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 178*8d67ca89SAndroid Build Coastguard Worker jmp L(loop) 179*8d67ca89SAndroid Build Coastguard Worker 180*8d67ca89SAndroid Build Coastguard WorkerL(matches): 181*8d67ca89SAndroid Build Coastguard Worker /* There is a match. First find where NULL is. */ 182*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 183*8d67ca89SAndroid Build Coastguard Worker jz L(match_case1) 184*8d67ca89SAndroid Build Coastguard Worker 185*8d67ca89SAndroid Build Coastguard Worker .p2align 4 186*8d67ca89SAndroid Build Coastguard WorkerL(match_case2): 187*8d67ca89SAndroid Build Coastguard Worker test %al, %al 188*8d67ca89SAndroid Build Coastguard Worker jz L(match_higth_case2) 189*8d67ca89SAndroid Build Coastguard Worker 190*8d67ca89SAndroid Build Coastguard Worker mov %al, %cl 191*8d67ca89SAndroid Build Coastguard Worker and $15, %cl 192*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case2_4) 193*8d67ca89SAndroid Build Coastguard Worker 194*8d67ca89SAndroid Build Coastguard Worker mov %dl, %ch 195*8d67ca89SAndroid Build Coastguard Worker and $15, %ch 196*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 197*8d67ca89SAndroid Build Coastguard Worker 198*8d67ca89SAndroid Build Coastguard Worker test $0x10, %al 199*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit5) 200*8d67ca89SAndroid Build Coastguard Worker test $0x10, %dl 201*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 202*8d67ca89SAndroid Build Coastguard Worker test $0x20, %al 203*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit6) 204*8d67ca89SAndroid Build Coastguard Worker test $0x20, %dl 205*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 206*8d67ca89SAndroid Build Coastguard Worker test $0x40, %al 207*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit7) 208*8d67ca89SAndroid Build Coastguard Worker test $0x40, %dl 209*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 210*8d67ca89SAndroid Build Coastguard Worker lea 7(%edi), %eax 211*8d67ca89SAndroid Build Coastguard Worker RETURN 212*8d67ca89SAndroid Build Coastguard Worker 213*8d67ca89SAndroid Build Coastguard Worker .p2align 4 214*8d67ca89SAndroid Build Coastguard WorkerL(match_case2_4): 215*8d67ca89SAndroid Build Coastguard Worker test $0x01, %al 216*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit1) 217*8d67ca89SAndroid Build Coastguard Worker test $0x01, %dl 218*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 219*8d67ca89SAndroid Build Coastguard Worker test $0x02, %al 220*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit2) 221*8d67ca89SAndroid Build Coastguard Worker test $0x02, %dl 222*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 223*8d67ca89SAndroid Build Coastguard Worker test $0x04, %al 224*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit3) 225*8d67ca89SAndroid Build Coastguard Worker test $0x04, %dl 226*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 227*8d67ca89SAndroid Build Coastguard Worker lea 3(%edi), %eax 228*8d67ca89SAndroid Build Coastguard Worker RETURN 229*8d67ca89SAndroid Build Coastguard Worker 230*8d67ca89SAndroid Build Coastguard Worker .p2align 4 231*8d67ca89SAndroid Build Coastguard WorkerL(match_higth_case2): 232*8d67ca89SAndroid Build Coastguard Worker test %dl, %dl 233*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 234*8d67ca89SAndroid Build Coastguard Worker 235*8d67ca89SAndroid Build Coastguard Worker mov %ah, %cl 236*8d67ca89SAndroid Build Coastguard Worker and $15, %cl 237*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case2_12) 238*8d67ca89SAndroid Build Coastguard Worker 239*8d67ca89SAndroid Build Coastguard Worker mov %dh, %ch 240*8d67ca89SAndroid Build Coastguard Worker and $15, %ch 241*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 242*8d67ca89SAndroid Build Coastguard Worker 243*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ah 244*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit13) 245*8d67ca89SAndroid Build Coastguard Worker test $0x10, %dh 246*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 247*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ah 248*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit14) 249*8d67ca89SAndroid Build Coastguard Worker test $0x20, %dh 250*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 251*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ah 252*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit15) 253*8d67ca89SAndroid Build Coastguard Worker test $0x40, %dh 254*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 255*8d67ca89SAndroid Build Coastguard Worker lea 15(%edi), %eax 256*8d67ca89SAndroid Build Coastguard Worker RETURN 257*8d67ca89SAndroid Build Coastguard Worker 258*8d67ca89SAndroid Build Coastguard Worker .p2align 4 259*8d67ca89SAndroid Build Coastguard WorkerL(match_case2_12): 260*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ah 261*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit9) 262*8d67ca89SAndroid Build Coastguard Worker test $0x01, %dh 263*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 264*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ah 265*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit10) 266*8d67ca89SAndroid Build Coastguard Worker test $0x02, %dh 267*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 268*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ah 269*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit11) 270*8d67ca89SAndroid Build Coastguard Worker test $0x04, %dh 271*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 272*8d67ca89SAndroid Build Coastguard Worker lea 11(%edi), %eax 273*8d67ca89SAndroid Build Coastguard Worker RETURN 274*8d67ca89SAndroid Build Coastguard Worker 275*8d67ca89SAndroid Build Coastguard Worker .p2align 4 276*8d67ca89SAndroid Build Coastguard WorkerL(match_case1): 277*8d67ca89SAndroid Build Coastguard Worker test %al, %al 278*8d67ca89SAndroid Build Coastguard Worker jz L(match_higth_case1) 279*8d67ca89SAndroid Build Coastguard Worker 280*8d67ca89SAndroid Build Coastguard Worker test $0x01, %al 281*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit1) 282*8d67ca89SAndroid Build Coastguard Worker test $0x02, %al 283*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit2) 284*8d67ca89SAndroid Build Coastguard Worker test $0x04, %al 285*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit3) 286*8d67ca89SAndroid Build Coastguard Worker test $0x08, %al 287*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit4) 288*8d67ca89SAndroid Build Coastguard Worker test $0x10, %al 289*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit5) 290*8d67ca89SAndroid Build Coastguard Worker test $0x20, %al 291*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit6) 292*8d67ca89SAndroid Build Coastguard Worker test $0x40, %al 293*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit7) 294*8d67ca89SAndroid Build Coastguard Worker lea 7(%edi), %eax 295*8d67ca89SAndroid Build Coastguard Worker RETURN 296*8d67ca89SAndroid Build Coastguard Worker 297*8d67ca89SAndroid Build Coastguard Worker .p2align 4 298*8d67ca89SAndroid Build Coastguard WorkerL(match_higth_case1): 299*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ah 300*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit9) 301*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ah 302*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit10) 303*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ah 304*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit11) 305*8d67ca89SAndroid Build Coastguard Worker test $0x08, %ah 306*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit12) 307*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ah 308*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit13) 309*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ah 310*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit14) 311*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ah 312*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit15) 313*8d67ca89SAndroid Build Coastguard Worker lea 15(%edi), %eax 314*8d67ca89SAndroid Build Coastguard Worker RETURN 315*8d67ca89SAndroid Build Coastguard Worker 316*8d67ca89SAndroid Build Coastguard Worker .p2align 4 317*8d67ca89SAndroid Build Coastguard WorkerL(Exit1): 318*8d67ca89SAndroid Build Coastguard Worker lea (%edi), %eax 319*8d67ca89SAndroid Build Coastguard Worker RETURN 320*8d67ca89SAndroid Build Coastguard Worker 321*8d67ca89SAndroid Build Coastguard Worker .p2align 4 322*8d67ca89SAndroid Build Coastguard WorkerL(Exit2): 323*8d67ca89SAndroid Build Coastguard Worker lea 1(%edi), %eax 324*8d67ca89SAndroid Build Coastguard Worker RETURN 325*8d67ca89SAndroid Build Coastguard Worker 326*8d67ca89SAndroid Build Coastguard Worker .p2align 4 327*8d67ca89SAndroid Build Coastguard WorkerL(Exit3): 328*8d67ca89SAndroid Build Coastguard Worker lea 2(%edi), %eax 329*8d67ca89SAndroid Build Coastguard Worker RETURN 330*8d67ca89SAndroid Build Coastguard Worker 331*8d67ca89SAndroid Build Coastguard Worker .p2align 4 332*8d67ca89SAndroid Build Coastguard WorkerL(Exit4): 333*8d67ca89SAndroid Build Coastguard Worker lea 3(%edi), %eax 334*8d67ca89SAndroid Build Coastguard Worker RETURN 335*8d67ca89SAndroid Build Coastguard Worker 336*8d67ca89SAndroid Build Coastguard Worker .p2align 4 337*8d67ca89SAndroid Build Coastguard WorkerL(Exit5): 338*8d67ca89SAndroid Build Coastguard Worker lea 4(%edi), %eax 339*8d67ca89SAndroid Build Coastguard Worker RETURN 340*8d67ca89SAndroid Build Coastguard Worker 341*8d67ca89SAndroid Build Coastguard Worker .p2align 4 342*8d67ca89SAndroid Build Coastguard WorkerL(Exit6): 343*8d67ca89SAndroid Build Coastguard Worker lea 5(%edi), %eax 344*8d67ca89SAndroid Build Coastguard Worker RETURN 345*8d67ca89SAndroid Build Coastguard Worker 346*8d67ca89SAndroid Build Coastguard Worker .p2align 4 347*8d67ca89SAndroid Build Coastguard WorkerL(Exit7): 348*8d67ca89SAndroid Build Coastguard Worker lea 6(%edi), %eax 349*8d67ca89SAndroid Build Coastguard Worker RETURN 350*8d67ca89SAndroid Build Coastguard Worker 351*8d67ca89SAndroid Build Coastguard Worker .p2align 4 352*8d67ca89SAndroid Build Coastguard WorkerL(Exit9): 353*8d67ca89SAndroid Build Coastguard Worker lea 8(%edi), %eax 354*8d67ca89SAndroid Build Coastguard Worker RETURN 355*8d67ca89SAndroid Build Coastguard Worker 356*8d67ca89SAndroid Build Coastguard Worker .p2align 4 357*8d67ca89SAndroid Build Coastguard WorkerL(Exit10): 358*8d67ca89SAndroid Build Coastguard Worker lea 9(%edi), %eax 359*8d67ca89SAndroid Build Coastguard Worker RETURN 360*8d67ca89SAndroid Build Coastguard Worker 361*8d67ca89SAndroid Build Coastguard Worker .p2align 4 362*8d67ca89SAndroid Build Coastguard WorkerL(Exit11): 363*8d67ca89SAndroid Build Coastguard Worker lea 10(%edi), %eax 364*8d67ca89SAndroid Build Coastguard Worker RETURN 365*8d67ca89SAndroid Build Coastguard Worker 366*8d67ca89SAndroid Build Coastguard Worker .p2align 4 367*8d67ca89SAndroid Build Coastguard WorkerL(Exit12): 368*8d67ca89SAndroid Build Coastguard Worker lea 11(%edi), %eax 369*8d67ca89SAndroid Build Coastguard Worker RETURN 370*8d67ca89SAndroid Build Coastguard Worker 371*8d67ca89SAndroid Build Coastguard Worker .p2align 4 372*8d67ca89SAndroid Build Coastguard WorkerL(Exit13): 373*8d67ca89SAndroid Build Coastguard Worker lea 12(%edi), %eax 374*8d67ca89SAndroid Build Coastguard Worker RETURN 375*8d67ca89SAndroid Build Coastguard Worker 376*8d67ca89SAndroid Build Coastguard Worker .p2align 4 377*8d67ca89SAndroid Build Coastguard WorkerL(Exit14): 378*8d67ca89SAndroid Build Coastguard Worker lea 13(%edi), %eax 379*8d67ca89SAndroid Build Coastguard Worker RETURN 380*8d67ca89SAndroid Build Coastguard Worker 381*8d67ca89SAndroid Build Coastguard Worker .p2align 4 382*8d67ca89SAndroid Build Coastguard WorkerL(Exit15): 383*8d67ca89SAndroid Build Coastguard Worker lea 14(%edi), %eax 384*8d67ca89SAndroid Build Coastguard Worker RETURN 385*8d67ca89SAndroid Build Coastguard Worker 386*8d67ca89SAndroid Build Coastguard Worker .p2align 4 387*8d67ca89SAndroid Build Coastguard WorkerL(return_null): 388*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 389*8d67ca89SAndroid Build Coastguard Worker RETURN 390*8d67ca89SAndroid Build Coastguard Worker 391*8d67ca89SAndroid Build Coastguard WorkerEND (strchr) 392