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#define STR1 PARMS 86*8d67ca89SAndroid Build Coastguard Worker#define STR2 STR1+4 87*8d67ca89SAndroid Build Coastguard Worker 88*8d67ca89SAndroid Build Coastguard Worker .text 89*8d67ca89SAndroid Build Coastguard WorkerENTRY (strrchr) 90*8d67ca89SAndroid Build Coastguard Worker 91*8d67ca89SAndroid Build Coastguard Worker ENTRANCE 92*8d67ca89SAndroid Build Coastguard Worker mov STR1(%esp), %ecx 93*8d67ca89SAndroid Build Coastguard Worker movd STR2(%esp), %xmm1 94*8d67ca89SAndroid Build Coastguard Worker 95*8d67ca89SAndroid Build Coastguard Worker pxor %xmm2, %xmm2 96*8d67ca89SAndroid Build Coastguard Worker mov %ecx, %edi 97*8d67ca89SAndroid Build Coastguard Worker punpcklbw %xmm1, %xmm1 98*8d67ca89SAndroid Build Coastguard Worker punpcklbw %xmm1, %xmm1 99*8d67ca89SAndroid Build Coastguard Worker /* ECX has OFFSET. */ 100*8d67ca89SAndroid Build Coastguard Worker and $63, %ecx 101*8d67ca89SAndroid Build Coastguard Worker pshufd $0, %xmm1, %xmm1 102*8d67ca89SAndroid Build Coastguard Worker cmp $48, %ecx 103*8d67ca89SAndroid Build Coastguard Worker ja L(crosscache) 104*8d67ca89SAndroid Build Coastguard Worker 105*8d67ca89SAndroid Build Coastguard Worker/* unaligned string. */ 106*8d67ca89SAndroid Build Coastguard Worker movdqu (%edi), %xmm0 107*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 108*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 109*8d67ca89SAndroid Build Coastguard Worker /* Find where NULL is. */ 110*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 111*8d67ca89SAndroid Build Coastguard Worker /* Check if there is a match. */ 112*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 113*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 114*8d67ca89SAndroid Build Coastguard Worker 115*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 116*8d67ca89SAndroid Build Coastguard Worker jnz L(unaligned_match1) 117*8d67ca89SAndroid Build Coastguard Worker 118*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 119*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 120*8d67ca89SAndroid Build Coastguard Worker 121*8d67ca89SAndroid Build Coastguard Worker and $-16, %edi 122*8d67ca89SAndroid Build Coastguard Worker 123*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 124*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 125*8d67ca89SAndroid Build Coastguard Worker 126*8d67ca89SAndroid Build Coastguard Worker xor %ebx, %ebx 127*8d67ca89SAndroid Build Coastguard Worker jmp L(loop) 128*8d67ca89SAndroid Build Coastguard Worker 129*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%esi) 130*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%ebx) 131*8d67ca89SAndroid Build Coastguard Worker 132*8d67ca89SAndroid Build Coastguard Worker .p2align 4 133*8d67ca89SAndroid Build Coastguard WorkerL(unaligned_match1): 134*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 135*8d67ca89SAndroid Build Coastguard Worker jnz L(prolog_find_zero_1) 136*8d67ca89SAndroid Build Coastguard Worker 137*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 138*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 139*8d67ca89SAndroid Build Coastguard Worker 140*8d67ca89SAndroid Build Coastguard Worker mov %eax, %ebx 141*8d67ca89SAndroid Build Coastguard Worker mov %edi, %esi 142*8d67ca89SAndroid Build Coastguard Worker and $-16, %edi 143*8d67ca89SAndroid Build Coastguard Worker jmp L(loop) 144*8d67ca89SAndroid Build Coastguard Worker 145*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%esi) 146*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%ebx) 147*8d67ca89SAndroid Build Coastguard Worker 148*8d67ca89SAndroid Build Coastguard Worker .p2align 4 149*8d67ca89SAndroid Build Coastguard WorkerL(crosscache): 150*8d67ca89SAndroid Build Coastguard Worker/* Hancle unaligned string. */ 151*8d67ca89SAndroid Build Coastguard Worker and $15, %ecx 152*8d67ca89SAndroid Build Coastguard Worker and $-16, %edi 153*8d67ca89SAndroid Build Coastguard Worker pxor %xmm3, %xmm3 154*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 155*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm3 156*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 157*8d67ca89SAndroid Build Coastguard Worker /* Find where NULL is. */ 158*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm3, %edx 159*8d67ca89SAndroid Build Coastguard Worker /* Check if there is a match. */ 160*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 161*8d67ca89SAndroid Build Coastguard Worker /* Remove the leading bytes. */ 162*8d67ca89SAndroid Build Coastguard Worker shr %cl, %edx 163*8d67ca89SAndroid Build Coastguard Worker shr %cl, %eax 164*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 165*8d67ca89SAndroid Build Coastguard Worker 166*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 167*8d67ca89SAndroid Build Coastguard Worker jnz L(unaligned_match) 168*8d67ca89SAndroid Build Coastguard Worker 169*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 170*8d67ca89SAndroid Build Coastguard Worker jnz L(return_null) 171*8d67ca89SAndroid Build Coastguard Worker 172*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 173*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 174*8d67ca89SAndroid Build Coastguard Worker 175*8d67ca89SAndroid Build Coastguard Worker xor %ebx, %ebx 176*8d67ca89SAndroid Build Coastguard Worker jmp L(loop) 177*8d67ca89SAndroid Build Coastguard Worker 178*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%esi) 179*8d67ca89SAndroid Build Coastguard Worker CFI_POP (%ebx) 180*8d67ca89SAndroid Build Coastguard Worker 181*8d67ca89SAndroid Build Coastguard Worker .p2align 4 182*8d67ca89SAndroid Build Coastguard WorkerL(unaligned_match): 183*8d67ca89SAndroid Build Coastguard Worker test %edx, %edx 184*8d67ca89SAndroid Build Coastguard Worker jnz L(prolog_find_zero) 185*8d67ca89SAndroid Build Coastguard Worker 186*8d67ca89SAndroid Build Coastguard Worker PUSH (%esi) 187*8d67ca89SAndroid Build Coastguard Worker PUSH (%ebx) 188*8d67ca89SAndroid Build Coastguard Worker 189*8d67ca89SAndroid Build Coastguard Worker mov %eax, %ebx 190*8d67ca89SAndroid Build Coastguard Worker lea (%edi, %ecx), %esi 191*8d67ca89SAndroid Build Coastguard Worker 192*8d67ca89SAndroid Build Coastguard Worker/* Loop start on aligned string. */ 193*8d67ca89SAndroid Build Coastguard Worker .p2align 4 194*8d67ca89SAndroid Build Coastguard WorkerL(loop): 195*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 196*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 197*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 198*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 199*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 200*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 201*8d67ca89SAndroid Build Coastguard Worker or %eax, %ecx 202*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 203*8d67ca89SAndroid Build Coastguard Worker 204*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 205*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 206*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 207*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 208*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 209*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 210*8d67ca89SAndroid Build Coastguard Worker or %eax, %ecx 211*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 212*8d67ca89SAndroid Build Coastguard Worker 213*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 214*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 215*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 216*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 217*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 218*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 219*8d67ca89SAndroid Build Coastguard Worker or %eax, %ecx 220*8d67ca89SAndroid Build Coastguard Worker jnz L(matches) 221*8d67ca89SAndroid Build Coastguard Worker 222*8d67ca89SAndroid Build Coastguard Worker movdqa (%edi), %xmm0 223*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm0, %xmm2 224*8d67ca89SAndroid Build Coastguard Worker add $16, %edi 225*8d67ca89SAndroid Build Coastguard Worker pcmpeqb %xmm1, %xmm0 226*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 227*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm0, %eax 228*8d67ca89SAndroid Build Coastguard Worker or %eax, %ecx 229*8d67ca89SAndroid Build Coastguard Worker jz L(loop) 230*8d67ca89SAndroid Build Coastguard Worker 231*8d67ca89SAndroid Build Coastguard WorkerL(matches): 232*8d67ca89SAndroid Build Coastguard Worker test %eax, %eax 233*8d67ca89SAndroid Build Coastguard Worker jnz L(match) 234*8d67ca89SAndroid Build Coastguard WorkerL(return_value): 235*8d67ca89SAndroid Build Coastguard Worker test %ebx, %ebx 236*8d67ca89SAndroid Build Coastguard Worker jz L(return_null_1) 237*8d67ca89SAndroid Build Coastguard Worker mov %ebx, %eax 238*8d67ca89SAndroid Build Coastguard Worker mov %esi, %edi 239*8d67ca89SAndroid Build Coastguard Worker 240*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 241*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 242*8d67ca89SAndroid Build Coastguard Worker 243*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 244*8d67ca89SAndroid Build Coastguard Worker 245*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 246*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 247*8d67ca89SAndroid Build Coastguard Worker 248*8d67ca89SAndroid Build Coastguard Worker .p2align 4 249*8d67ca89SAndroid Build Coastguard WorkerL(return_null_1): 250*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 251*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 252*8d67ca89SAndroid Build Coastguard Worker 253*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 254*8d67ca89SAndroid Build Coastguard Worker RETURN 255*8d67ca89SAndroid Build Coastguard Worker 256*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 257*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 258*8d67ca89SAndroid Build Coastguard Worker 259*8d67ca89SAndroid Build Coastguard Worker .p2align 4 260*8d67ca89SAndroid Build Coastguard WorkerL(match): 261*8d67ca89SAndroid Build Coastguard Worker pmovmskb %xmm2, %ecx 262*8d67ca89SAndroid Build Coastguard Worker test %ecx, %ecx 263*8d67ca89SAndroid Build Coastguard Worker jnz L(find_zero) 264*8d67ca89SAndroid Build Coastguard Worker mov %eax, %ebx 265*8d67ca89SAndroid Build Coastguard Worker mov %edi, %esi 266*8d67ca89SAndroid Build Coastguard Worker jmp L(loop) 267*8d67ca89SAndroid Build Coastguard Worker 268*8d67ca89SAndroid Build Coastguard Worker .p2align 4 269*8d67ca89SAndroid Build Coastguard WorkerL(find_zero): 270*8d67ca89SAndroid Build Coastguard Worker test %cl, %cl 271*8d67ca89SAndroid Build Coastguard Worker jz L(find_zero_high) 272*8d67ca89SAndroid Build Coastguard Worker mov %cl, %dl 273*8d67ca89SAndroid Build Coastguard Worker and $15, %dl 274*8d67ca89SAndroid Build Coastguard Worker jz L(find_zero_8) 275*8d67ca89SAndroid Build Coastguard Worker test $0x01, %cl 276*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit1) 277*8d67ca89SAndroid Build Coastguard Worker test $0x02, %cl 278*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit2) 279*8d67ca89SAndroid Build Coastguard Worker test $0x04, %cl 280*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit3) 281*8d67ca89SAndroid Build Coastguard Worker and $(1 << 4) - 1, %eax 282*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 283*8d67ca89SAndroid Build Coastguard Worker 284*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 285*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 286*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 287*8d67ca89SAndroid Build Coastguard Worker 288*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 289*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 290*8d67ca89SAndroid Build Coastguard Worker 291*8d67ca89SAndroid Build Coastguard Worker .p2align 4 292*8d67ca89SAndroid Build Coastguard WorkerL(find_zero_8): 293*8d67ca89SAndroid Build Coastguard Worker test $0x10, %cl 294*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit5) 295*8d67ca89SAndroid Build Coastguard Worker test $0x20, %cl 296*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit6) 297*8d67ca89SAndroid Build Coastguard Worker test $0x40, %cl 298*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit7) 299*8d67ca89SAndroid Build Coastguard Worker and $(1 << 8) - 1, %eax 300*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 301*8d67ca89SAndroid Build Coastguard Worker 302*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 303*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 304*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 305*8d67ca89SAndroid Build Coastguard Worker 306*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 307*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 308*8d67ca89SAndroid Build Coastguard Worker 309*8d67ca89SAndroid Build Coastguard Worker .p2align 4 310*8d67ca89SAndroid Build Coastguard WorkerL(find_zero_high): 311*8d67ca89SAndroid Build Coastguard Worker mov %ch, %dh 312*8d67ca89SAndroid Build Coastguard Worker and $15, %dh 313*8d67ca89SAndroid Build Coastguard Worker jz L(find_zero_high_8) 314*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ch 315*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit9) 316*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ch 317*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit10) 318*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ch 319*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit11) 320*8d67ca89SAndroid Build Coastguard Worker and $(1 << 12) - 1, %eax 321*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 322*8d67ca89SAndroid Build Coastguard Worker 323*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 324*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 325*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 326*8d67ca89SAndroid Build Coastguard Worker 327*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 328*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 329*8d67ca89SAndroid Build Coastguard Worker 330*8d67ca89SAndroid Build Coastguard Worker .p2align 4 331*8d67ca89SAndroid Build Coastguard WorkerL(find_zero_high_8): 332*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ch 333*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit13) 334*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ch 335*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit14) 336*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ch 337*8d67ca89SAndroid Build Coastguard Worker jnz L(FindZeroExit15) 338*8d67ca89SAndroid Build Coastguard Worker and $(1 << 16) - 1, %eax 339*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 340*8d67ca89SAndroid Build Coastguard Worker 341*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 342*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 343*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 344*8d67ca89SAndroid Build Coastguard Worker 345*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 346*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 347*8d67ca89SAndroid Build Coastguard Worker 348*8d67ca89SAndroid Build Coastguard Worker .p2align 4 349*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit1): 350*8d67ca89SAndroid Build Coastguard Worker and $1, %eax 351*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 352*8d67ca89SAndroid Build Coastguard Worker 353*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 354*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 355*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 356*8d67ca89SAndroid Build Coastguard Worker 357*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 358*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 359*8d67ca89SAndroid Build Coastguard Worker 360*8d67ca89SAndroid Build Coastguard Worker .p2align 4 361*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit2): 362*8d67ca89SAndroid Build Coastguard Worker and $(1 << 2) - 1, %eax 363*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 364*8d67ca89SAndroid Build Coastguard Worker 365*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 366*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 367*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 368*8d67ca89SAndroid Build Coastguard Worker 369*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 370*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 371*8d67ca89SAndroid Build Coastguard Worker 372*8d67ca89SAndroid Build Coastguard Worker .p2align 4 373*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit3): 374*8d67ca89SAndroid Build Coastguard Worker and $(1 << 3) - 1, %eax 375*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 376*8d67ca89SAndroid Build Coastguard Worker 377*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 378*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 379*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 380*8d67ca89SAndroid Build Coastguard Worker 381*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 382*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 383*8d67ca89SAndroid Build Coastguard Worker 384*8d67ca89SAndroid Build Coastguard Worker .p2align 4 385*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit5): 386*8d67ca89SAndroid Build Coastguard Worker and $(1 << 5) - 1, %eax 387*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 388*8d67ca89SAndroid Build Coastguard Worker 389*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 390*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 391*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 392*8d67ca89SAndroid Build Coastguard Worker 393*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 394*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 395*8d67ca89SAndroid Build Coastguard Worker 396*8d67ca89SAndroid Build Coastguard Worker .p2align 4 397*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit6): 398*8d67ca89SAndroid Build Coastguard Worker and $(1 << 6) - 1, %eax 399*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 400*8d67ca89SAndroid Build Coastguard Worker 401*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 402*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 403*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 404*8d67ca89SAndroid Build Coastguard Worker 405*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 406*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 407*8d67ca89SAndroid Build Coastguard Worker 408*8d67ca89SAndroid Build Coastguard Worker .p2align 4 409*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit7): 410*8d67ca89SAndroid Build Coastguard Worker and $(1 << 7) - 1, %eax 411*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 412*8d67ca89SAndroid Build Coastguard Worker 413*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 414*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 415*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 416*8d67ca89SAndroid Build Coastguard Worker 417*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 418*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 419*8d67ca89SAndroid Build Coastguard Worker 420*8d67ca89SAndroid Build Coastguard Worker .p2align 4 421*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit9): 422*8d67ca89SAndroid Build Coastguard Worker and $(1 << 9) - 1, %eax 423*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 424*8d67ca89SAndroid Build Coastguard Worker 425*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 426*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 427*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 428*8d67ca89SAndroid Build Coastguard Worker 429*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 430*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 431*8d67ca89SAndroid Build Coastguard Worker 432*8d67ca89SAndroid Build Coastguard Worker .p2align 4 433*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit10): 434*8d67ca89SAndroid Build Coastguard Worker and $(1 << 10) - 1, %eax 435*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 436*8d67ca89SAndroid Build Coastguard Worker 437*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 438*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 439*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 440*8d67ca89SAndroid Build Coastguard Worker 441*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 442*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 443*8d67ca89SAndroid Build Coastguard Worker 444*8d67ca89SAndroid Build Coastguard Worker .p2align 4 445*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit11): 446*8d67ca89SAndroid Build Coastguard Worker and $(1 << 11) - 1, %eax 447*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 448*8d67ca89SAndroid Build Coastguard Worker 449*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 450*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 451*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 452*8d67ca89SAndroid Build Coastguard Worker 453*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 454*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 455*8d67ca89SAndroid Build Coastguard Worker 456*8d67ca89SAndroid Build Coastguard Worker .p2align 4 457*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit13): 458*8d67ca89SAndroid Build Coastguard Worker and $(1 << 13) - 1, %eax 459*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 460*8d67ca89SAndroid Build Coastguard Worker 461*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 462*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 463*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 464*8d67ca89SAndroid Build Coastguard Worker 465*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 466*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 467*8d67ca89SAndroid Build Coastguard Worker 468*8d67ca89SAndroid Build Coastguard Worker .p2align 4 469*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit14): 470*8d67ca89SAndroid Build Coastguard Worker and $(1 << 14) - 1, %eax 471*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 472*8d67ca89SAndroid Build Coastguard Worker 473*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 474*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 475*8d67ca89SAndroid Build Coastguard Worker jmp L(match_case1) 476*8d67ca89SAndroid Build Coastguard Worker 477*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%ebx) 478*8d67ca89SAndroid Build Coastguard Worker CFI_PUSH (%esi) 479*8d67ca89SAndroid Build Coastguard Worker 480*8d67ca89SAndroid Build Coastguard Worker .p2align 4 481*8d67ca89SAndroid Build Coastguard WorkerL(FindZeroExit15): 482*8d67ca89SAndroid Build Coastguard Worker and $(1 << 15) - 1, %eax 483*8d67ca89SAndroid Build Coastguard Worker jz L(return_value) 484*8d67ca89SAndroid Build Coastguard Worker 485*8d67ca89SAndroid Build Coastguard Worker POP (%ebx) 486*8d67ca89SAndroid Build Coastguard Worker POP (%esi) 487*8d67ca89SAndroid Build Coastguard Worker 488*8d67ca89SAndroid Build Coastguard Worker .p2align 4 489*8d67ca89SAndroid Build Coastguard WorkerL(match_case1): 490*8d67ca89SAndroid Build Coastguard Worker test %ah, %ah 491*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1_high) 492*8d67ca89SAndroid Build Coastguard Worker mov %al, %dl 493*8d67ca89SAndroid Build Coastguard Worker and $15 << 4, %dl 494*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1_8) 495*8d67ca89SAndroid Build Coastguard Worker test $0x08, %al 496*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit4) 497*8d67ca89SAndroid Build Coastguard Worker test $0x04, %al 498*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit3) 499*8d67ca89SAndroid Build Coastguard Worker test $0x02, %al 500*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit2) 501*8d67ca89SAndroid Build Coastguard Worker lea -16(%edi), %eax 502*8d67ca89SAndroid Build Coastguard Worker RETURN 503*8d67ca89SAndroid Build Coastguard Worker 504*8d67ca89SAndroid Build Coastguard Worker .p2align 4 505*8d67ca89SAndroid Build Coastguard WorkerL(match_case1_8): 506*8d67ca89SAndroid Build Coastguard Worker test $0x80, %al 507*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit8) 508*8d67ca89SAndroid Build Coastguard Worker test $0x40, %al 509*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit7) 510*8d67ca89SAndroid Build Coastguard Worker test $0x20, %al 511*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit6) 512*8d67ca89SAndroid Build Coastguard Worker lea -12(%edi), %eax 513*8d67ca89SAndroid Build Coastguard Worker RETURN 514*8d67ca89SAndroid Build Coastguard Worker 515*8d67ca89SAndroid Build Coastguard Worker .p2align 4 516*8d67ca89SAndroid Build Coastguard WorkerL(match_case1_high): 517*8d67ca89SAndroid Build Coastguard Worker mov %ah, %dh 518*8d67ca89SAndroid Build Coastguard Worker and $15 << 4, %dh 519*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1_high_8) 520*8d67ca89SAndroid Build Coastguard Worker test $0x08, %ah 521*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit12) 522*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ah 523*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit11) 524*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ah 525*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit10) 526*8d67ca89SAndroid Build Coastguard Worker lea -8(%edi), %eax 527*8d67ca89SAndroid Build Coastguard Worker RETURN 528*8d67ca89SAndroid Build Coastguard Worker 529*8d67ca89SAndroid Build Coastguard Worker .p2align 4 530*8d67ca89SAndroid Build Coastguard WorkerL(match_case1_high_8): 531*8d67ca89SAndroid Build Coastguard Worker test $0x80, %ah 532*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit16) 533*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ah 534*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit15) 535*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ah 536*8d67ca89SAndroid Build Coastguard Worker jnz L(Exit14) 537*8d67ca89SAndroid Build Coastguard Worker lea -4(%edi), %eax 538*8d67ca89SAndroid Build Coastguard Worker RETURN 539*8d67ca89SAndroid Build Coastguard Worker 540*8d67ca89SAndroid Build Coastguard Worker .p2align 4 541*8d67ca89SAndroid Build Coastguard WorkerL(Exit2): 542*8d67ca89SAndroid Build Coastguard Worker lea -15(%edi), %eax 543*8d67ca89SAndroid Build Coastguard Worker RETURN 544*8d67ca89SAndroid Build Coastguard Worker 545*8d67ca89SAndroid Build Coastguard Worker .p2align 4 546*8d67ca89SAndroid Build Coastguard WorkerL(Exit3): 547*8d67ca89SAndroid Build Coastguard Worker lea -14(%edi), %eax 548*8d67ca89SAndroid Build Coastguard Worker RETURN 549*8d67ca89SAndroid Build Coastguard Worker 550*8d67ca89SAndroid Build Coastguard Worker .p2align 4 551*8d67ca89SAndroid Build Coastguard WorkerL(Exit4): 552*8d67ca89SAndroid Build Coastguard Worker lea -13(%edi), %eax 553*8d67ca89SAndroid Build Coastguard Worker RETURN 554*8d67ca89SAndroid Build Coastguard Worker 555*8d67ca89SAndroid Build Coastguard Worker .p2align 4 556*8d67ca89SAndroid Build Coastguard WorkerL(Exit6): 557*8d67ca89SAndroid Build Coastguard Worker lea -11(%edi), %eax 558*8d67ca89SAndroid Build Coastguard Worker RETURN 559*8d67ca89SAndroid Build Coastguard Worker 560*8d67ca89SAndroid Build Coastguard Worker .p2align 4 561*8d67ca89SAndroid Build Coastguard WorkerL(Exit7): 562*8d67ca89SAndroid Build Coastguard Worker lea -10(%edi), %eax 563*8d67ca89SAndroid Build Coastguard Worker RETURN 564*8d67ca89SAndroid Build Coastguard Worker 565*8d67ca89SAndroid Build Coastguard Worker .p2align 4 566*8d67ca89SAndroid Build Coastguard WorkerL(Exit8): 567*8d67ca89SAndroid Build Coastguard Worker lea -9(%edi), %eax 568*8d67ca89SAndroid Build Coastguard Worker RETURN 569*8d67ca89SAndroid Build Coastguard Worker 570*8d67ca89SAndroid Build Coastguard Worker .p2align 4 571*8d67ca89SAndroid Build Coastguard WorkerL(Exit10): 572*8d67ca89SAndroid Build Coastguard Worker lea -7(%edi), %eax 573*8d67ca89SAndroid Build Coastguard Worker RETURN 574*8d67ca89SAndroid Build Coastguard Worker 575*8d67ca89SAndroid Build Coastguard Worker .p2align 4 576*8d67ca89SAndroid Build Coastguard WorkerL(Exit11): 577*8d67ca89SAndroid Build Coastguard Worker lea -6(%edi), %eax 578*8d67ca89SAndroid Build Coastguard Worker RETURN 579*8d67ca89SAndroid Build Coastguard Worker 580*8d67ca89SAndroid Build Coastguard Worker .p2align 4 581*8d67ca89SAndroid Build Coastguard WorkerL(Exit12): 582*8d67ca89SAndroid Build Coastguard Worker lea -5(%edi), %eax 583*8d67ca89SAndroid Build Coastguard Worker RETURN 584*8d67ca89SAndroid Build Coastguard Worker 585*8d67ca89SAndroid Build Coastguard Worker .p2align 4 586*8d67ca89SAndroid Build Coastguard WorkerL(Exit14): 587*8d67ca89SAndroid Build Coastguard Worker lea -3(%edi), %eax 588*8d67ca89SAndroid Build Coastguard Worker RETURN 589*8d67ca89SAndroid Build Coastguard Worker 590*8d67ca89SAndroid Build Coastguard Worker .p2align 4 591*8d67ca89SAndroid Build Coastguard WorkerL(Exit15): 592*8d67ca89SAndroid Build Coastguard Worker lea -2(%edi), %eax 593*8d67ca89SAndroid Build Coastguard Worker RETURN 594*8d67ca89SAndroid Build Coastguard Worker 595*8d67ca89SAndroid Build Coastguard Worker .p2align 4 596*8d67ca89SAndroid Build Coastguard WorkerL(Exit16): 597*8d67ca89SAndroid Build Coastguard Worker lea -1(%edi), %eax 598*8d67ca89SAndroid Build Coastguard Worker RETURN 599*8d67ca89SAndroid Build Coastguard Worker 600*8d67ca89SAndroid Build Coastguard Worker/* Return NULL. */ 601*8d67ca89SAndroid Build Coastguard Worker .p2align 4 602*8d67ca89SAndroid Build Coastguard WorkerL(return_null): 603*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 604*8d67ca89SAndroid Build Coastguard Worker RETURN 605*8d67ca89SAndroid Build Coastguard Worker 606*8d67ca89SAndroid Build Coastguard Worker .p2align 4 607*8d67ca89SAndroid Build Coastguard WorkerL(prolog_find_zero): 608*8d67ca89SAndroid Build Coastguard Worker add %ecx, %edi 609*8d67ca89SAndroid Build Coastguard Worker mov %edx, %ecx 610*8d67ca89SAndroid Build Coastguard WorkerL(prolog_find_zero_1): 611*8d67ca89SAndroid Build Coastguard Worker test %cl, %cl 612*8d67ca89SAndroid Build Coastguard Worker jz L(prolog_find_zero_high) 613*8d67ca89SAndroid Build Coastguard Worker mov %cl, %dl 614*8d67ca89SAndroid Build Coastguard Worker and $15, %dl 615*8d67ca89SAndroid Build Coastguard Worker jz L(prolog_find_zero_8) 616*8d67ca89SAndroid Build Coastguard Worker test $0x01, %cl 617*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit1) 618*8d67ca89SAndroid Build Coastguard Worker test $0x02, %cl 619*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit2) 620*8d67ca89SAndroid Build Coastguard Worker test $0x04, %cl 621*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit3) 622*8d67ca89SAndroid Build Coastguard Worker and $(1 << 4) - 1, %eax 623*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 624*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 625*8d67ca89SAndroid Build Coastguard Worker RETURN 626*8d67ca89SAndroid Build Coastguard Worker 627*8d67ca89SAndroid Build Coastguard Worker .p2align 4 628*8d67ca89SAndroid Build Coastguard WorkerL(prolog_find_zero_8): 629*8d67ca89SAndroid Build Coastguard Worker test $0x10, %cl 630*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit5) 631*8d67ca89SAndroid Build Coastguard Worker test $0x20, %cl 632*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit6) 633*8d67ca89SAndroid Build Coastguard Worker test $0x40, %cl 634*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit7) 635*8d67ca89SAndroid Build Coastguard Worker and $(1 << 8) - 1, %eax 636*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 637*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 638*8d67ca89SAndroid Build Coastguard Worker RETURN 639*8d67ca89SAndroid Build Coastguard Worker 640*8d67ca89SAndroid Build Coastguard Worker .p2align 4 641*8d67ca89SAndroid Build Coastguard WorkerL(prolog_find_zero_high): 642*8d67ca89SAndroid Build Coastguard Worker mov %ch, %dh 643*8d67ca89SAndroid Build Coastguard Worker and $15, %dh 644*8d67ca89SAndroid Build Coastguard Worker jz L(prolog_find_zero_high_8) 645*8d67ca89SAndroid Build Coastguard Worker test $0x01, %ch 646*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit9) 647*8d67ca89SAndroid Build Coastguard Worker test $0x02, %ch 648*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit10) 649*8d67ca89SAndroid Build Coastguard Worker test $0x04, %ch 650*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit11) 651*8d67ca89SAndroid Build Coastguard Worker and $(1 << 12) - 1, %eax 652*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 653*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 654*8d67ca89SAndroid Build Coastguard Worker RETURN 655*8d67ca89SAndroid Build Coastguard Worker 656*8d67ca89SAndroid Build Coastguard Worker .p2align 4 657*8d67ca89SAndroid Build Coastguard WorkerL(prolog_find_zero_high_8): 658*8d67ca89SAndroid Build Coastguard Worker test $0x10, %ch 659*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit13) 660*8d67ca89SAndroid Build Coastguard Worker test $0x20, %ch 661*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit14) 662*8d67ca89SAndroid Build Coastguard Worker test $0x40, %ch 663*8d67ca89SAndroid Build Coastguard Worker jnz L(PrologFindZeroExit15) 664*8d67ca89SAndroid Build Coastguard Worker and $(1 << 16) - 1, %eax 665*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 666*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 667*8d67ca89SAndroid Build Coastguard Worker RETURN 668*8d67ca89SAndroid Build Coastguard Worker 669*8d67ca89SAndroid Build Coastguard Worker .p2align 4 670*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit1): 671*8d67ca89SAndroid Build Coastguard Worker and $1, %eax 672*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 673*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 674*8d67ca89SAndroid Build Coastguard Worker RETURN 675*8d67ca89SAndroid Build Coastguard Worker 676*8d67ca89SAndroid Build Coastguard Worker .p2align 4 677*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit2): 678*8d67ca89SAndroid Build Coastguard Worker and $(1 << 2) - 1, %eax 679*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 680*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 681*8d67ca89SAndroid Build Coastguard Worker RETURN 682*8d67ca89SAndroid Build Coastguard Worker 683*8d67ca89SAndroid Build Coastguard Worker .p2align 4 684*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit3): 685*8d67ca89SAndroid Build Coastguard Worker and $(1 << 3) - 1, %eax 686*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 687*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 688*8d67ca89SAndroid Build Coastguard Worker RETURN 689*8d67ca89SAndroid Build Coastguard Worker 690*8d67ca89SAndroid Build Coastguard Worker .p2align 4 691*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit5): 692*8d67ca89SAndroid Build Coastguard Worker and $(1 << 5) - 1, %eax 693*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 694*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 695*8d67ca89SAndroid Build Coastguard Worker RETURN 696*8d67ca89SAndroid Build Coastguard Worker 697*8d67ca89SAndroid Build Coastguard Worker .p2align 4 698*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit6): 699*8d67ca89SAndroid Build Coastguard Worker and $(1 << 6) - 1, %eax 700*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 701*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 702*8d67ca89SAndroid Build Coastguard Worker RETURN 703*8d67ca89SAndroid Build Coastguard Worker 704*8d67ca89SAndroid Build Coastguard Worker .p2align 4 705*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit7): 706*8d67ca89SAndroid Build Coastguard Worker and $(1 << 7) - 1, %eax 707*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 708*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 709*8d67ca89SAndroid Build Coastguard Worker RETURN 710*8d67ca89SAndroid Build Coastguard Worker 711*8d67ca89SAndroid Build Coastguard Worker .p2align 4 712*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit9): 713*8d67ca89SAndroid Build Coastguard Worker and $(1 << 9) - 1, %eax 714*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 715*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 716*8d67ca89SAndroid Build Coastguard Worker RETURN 717*8d67ca89SAndroid Build Coastguard Worker 718*8d67ca89SAndroid Build Coastguard Worker .p2align 4 719*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit10): 720*8d67ca89SAndroid Build Coastguard Worker and $(1 << 10) - 1, %eax 721*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 722*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 723*8d67ca89SAndroid Build Coastguard Worker RETURN 724*8d67ca89SAndroid Build Coastguard Worker 725*8d67ca89SAndroid Build Coastguard Worker .p2align 4 726*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit11): 727*8d67ca89SAndroid Build Coastguard Worker and $(1 << 11) - 1, %eax 728*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 729*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 730*8d67ca89SAndroid Build Coastguard Worker RETURN 731*8d67ca89SAndroid Build Coastguard Worker 732*8d67ca89SAndroid Build Coastguard Worker .p2align 4 733*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit13): 734*8d67ca89SAndroid Build Coastguard Worker and $(1 << 13) - 1, %eax 735*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 736*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 737*8d67ca89SAndroid Build Coastguard Worker RETURN 738*8d67ca89SAndroid Build Coastguard Worker 739*8d67ca89SAndroid Build Coastguard Worker .p2align 4 740*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit14): 741*8d67ca89SAndroid Build Coastguard Worker and $(1 << 14) - 1, %eax 742*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 743*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 744*8d67ca89SAndroid Build Coastguard Worker RETURN 745*8d67ca89SAndroid Build Coastguard Worker 746*8d67ca89SAndroid Build Coastguard Worker .p2align 4 747*8d67ca89SAndroid Build Coastguard WorkerL(PrologFindZeroExit15): 748*8d67ca89SAndroid Build Coastguard Worker and $(1 << 15) - 1, %eax 749*8d67ca89SAndroid Build Coastguard Worker jnz L(match_case1) 750*8d67ca89SAndroid Build Coastguard Worker xor %eax, %eax 751*8d67ca89SAndroid Build Coastguard Worker RETURN 752*8d67ca89SAndroid Build Coastguard Worker 753*8d67ca89SAndroid Build Coastguard WorkerEND (strrchr) 754