10a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* 20a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaCopyright (c) 2011, Intel Corporation 30a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaAll rights reserved. 40a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 50a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaRedistribution and use in source and binary forms, with or without 60a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievamodification, are permitted provided that the following conditions are met: 70a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 80a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Redistributions of source code must retain the above copyright notice, 90a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * this list of conditions and the following disclaimer. 100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Redistributions in binary form must reproduce the above copyright notice, 120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * this list of conditions and the following disclaimer in the documentation 130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * and/or other materials provided with the distribution. 140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * Neither the name of Intel Corporation nor the names of its contributors 160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * may be used to endorse or promote products derived from this software 170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva * without specific prior written permission. 180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 200a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 230a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 250a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva*/ 300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_STRCAT 320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef STRLEN 340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STRLEN strlen 350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef L 380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define L(label) .L##label 390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_startproc 420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc .cfi_startproc 430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_endproc 460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_endproc .cfi_endproc 470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* calee safe register only for strnlen is required */ 500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifdef USE_AS_STRNLEN 520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_rel_offset 530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_restore 570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore(reg) .cfi_restore reg 580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_adjust_cfa_offset 610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef ENTRY 660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name) \ 670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .type name, @function; \ 680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .globl name; \ 690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4; \ 700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname: \ 71124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cfi_startproc 720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 73124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef END 750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name) \ 760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_endproc; \ 77124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare .size name, .-name 780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define PARMS 4 810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STR PARMS 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN ret 83124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifdef USE_AS_STRNLEN 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define LEN PARMS + 8 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define CFI_PUSH(REG) \ 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (4); \ 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_rel_offset (REG, 0) 89124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define CFI_POP(REG) \ 910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (-4); \ 920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_restore (REG) 93124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define PUSH(REG) pushl REG; CFI_PUSH (REG) 950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define POP(REG) popl REG; CFI_POP (REG) 960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# undef RETURN 970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN POP (%edi); ret; CFI_PUSH(%edi); 980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 99124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 100124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare .text 101124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareENTRY (STRLEN) 102124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare mov STR(%esp), %edx 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifdef USE_AS_STRNLEN 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%edi) 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl LEN(%esp), %edi 1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edi 1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less4_prolog) 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 110124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare xor %eax, %eax 111124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, (%edx) 112124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail0) 113124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 1(%edx) 114124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail1) 115124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 2(%edx) 116124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail2) 117124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 3(%edx) 118124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail3) 1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edi 1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less8_prolog) 1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 125124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 4(%edx) 126124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail4) 127124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 5(%edx) 128124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail5) 129124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 6(%edx) 130124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail6) 131124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 7(%edx) 132124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail7) 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edi 1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less12_prolog) 1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 139124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 8(%edx) 140124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail8) 141124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 9(%edx) 142124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail9) 143124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 10(%edx) 144124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail10) 145124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 11(%edx) 146124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail11) 1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edi 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less16_prolog) 1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 153124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 12(%edx) 154124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail12) 155124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 13(%edx) 156124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail13) 157124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 14(%edx) 158124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail14) 159124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare cmpb $0, 15(%edx) 160124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_tail15) 1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 162124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pxor %xmm0, %xmm0 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%edx), %eax 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %eax, %ecx 165124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare and $-16, %eax 1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %edx 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %edx, %edi 1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less64) 1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 173124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 174124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm0 175124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm0, %edx 176124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pxor %xmm1, %xmm1 177124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 179124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 180124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 181124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm1 182124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm1, %edx 183124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pxor %xmm2, %xmm2 184124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 186124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 187124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 188124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm2 189124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm2, %edx 190124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pxor %xmm3, %xmm3 191124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 193124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 194124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 195124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm3 196124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm3, %edx 197124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 199124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 200124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less64) 2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 206124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm0 207124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm0, %edx 208124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 210124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 211124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 212124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm1 213124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm1, %edx 214124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 216124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 217124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 218124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm2 219124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm2, %edx 220124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 222124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 223124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 224124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm3 225124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm3, %edx 226124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 228124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 229124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less64) 2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 235124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm0 236124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm0, %edx 237124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 239124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 240124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 241124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm1 242124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm1, %edx 243124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 245124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 246124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 247124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm2 248124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm2, %edx 249124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 251124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 252124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 253124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm3 254124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm3, %edx 255124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 257124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 258124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less64) 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 264124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm0 265124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm0, %edx 266124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 268124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 269124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 270124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm1 271124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm1, %edx 272124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 274124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 275124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 276124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm2 277124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm2, %edx 278124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 280124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 281124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 282124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pcmpeqb (%eax), %xmm3 283124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare pmovmskb %xmm3, %edx 284124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 16(%eax), %eax 2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 286124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit) 287124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %eax, %edx 2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $63, %edx 2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %edx, %edi 2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 294124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare and $-0x40, %eax 2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(aligned_64_loop): 2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $64, %edi 3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(len_less64) 3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps (%eax), %xmm0 3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 16(%eax), %xmm1 3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 32(%eax), %xmm2 3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 48(%eax), %xmm6 3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm1, %xmm0 3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm6, %xmm2 3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm0, %xmm2 3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm3, %xmm2 3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 311124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare lea 64(%eax), %eax 312124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test %edx, %edx 3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(aligned_64_loop) 3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb -64(%eax), %xmm3 3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 48(%ecx), %ecx 3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 3200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm1, %xmm3 3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb -32(%eax), %xmm3 3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb %xmm6, %xmm3 3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 336124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit): 337124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare sub %ecx, %eax 338124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test %dl, %dl 339124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jz L(exit_high) 3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dl, %cl 3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %cl 3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_8) 344124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x01, %dl 345124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail0) 346124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x02, %dl 347124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail1) 348124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x04, %dl 349124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail2) 3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $3, %eax 3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 352124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_8): 355124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x10, %dl 356124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail4) 357124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x20, %dl 358124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail5) 359124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x40, %dl 360124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail6) 361124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $7, %eax 362124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 363124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 365124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_high): 3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dh, %ch 3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ch 3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_high_8) 369124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x01, %dh 3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail8) 3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %dh 3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail9) 3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %dh 3740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail10) 3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $11, %eax 3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_high_8): 3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %dh 3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail12) 3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %dh 3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail13) 3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %dh 3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit_tail14) 3860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $15, %eax 3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail0): 3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNLEN 3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(len_less64): 3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm0, %xmm0 3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $64, %edi 3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm0 3980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm1, %xmm1 4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit) 4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edi 4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_start_len) 4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm1 4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 4100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit) 4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edi 4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_start_len) 4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm0 4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit) 4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edi 4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(return_start_len) 4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqb (%eax), %xmm1 4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit) 4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_STRLCAT 4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl LEN(%esp), %eax 4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#else 4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(return_start_len) 4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit): 4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub %ecx, %eax 4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %dl, %dl 4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(strnlen_exit_high) 4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dl, %cl 4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %cl 4460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(strnlen_exit_8) 4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %dl 448124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare jnz L(exit_tail0) 4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %dl 4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail1) 4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %dl 4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail2) 4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $4, %edi 4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 3(%eax), %eax 4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 457124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 4580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_8): 4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %dl 4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail4) 4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %dl 4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail5) 4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %dl 4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail6) 4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $8, %edi 4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%eax), %eax 4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 470124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_high): 4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dh, %ch 4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ch 4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(strnlen_exit_high_8) 4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %dh 4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail8) 4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %dh 4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail9) 480124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x04, %dh 4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail10) 4820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $12, %edi 4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 11(%eax), %eax 4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 486124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_high_8): 489124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x10, %dh 4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail12) 491124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x20, %dh 4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail13) 493124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare test $0x40, %dh 4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(strnlen_exit_tail14) 4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $16, %edi 4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 15(%eax), %eax 4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail1): 5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $2, %edi 5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 1(%eax), %eax 5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail2): 5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $3, %edi 5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 2(%eax), %eax 5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail4): 5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $5, %edi 5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 4(%eax), %eax 5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail5): 5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $6, %edi 5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 5(%eax), %eax 5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail6): 5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $7, %edi 5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 6(%eax), %eax 5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail8): 5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $9, %edi 5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 8(%eax), %eax 5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail9): 5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $10, %edi 5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 9(%eax), %eax 5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail10): 5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $11, %edi 5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 10(%eax), %eax 5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5570a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail12): 5580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $13, %edi 5590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 12(%eax), %eax 5610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5640a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail13): 5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $14, %edi 5660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 13(%eax), %eax 5680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5710a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(strnlen_exit_tail14): 5720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub $15, %edi 5730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(return_start_len) 5740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%eax), %eax 5750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_STRLCAT 5780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5790a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(return_start_len): 5800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl LEN(%esp), %eax 5810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 5820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 5830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* for prolog only */ 5850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(len_less4_prolog): 5880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 5890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $4, %edi 5910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail0) 5920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, (%edx) 5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail0) 5950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %edi 5960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail1) 5970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 1(%edx) 5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail1) 6000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %edi 6010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail2) 6020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 2(%edx) 6040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail2) 6050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %edi 6060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail3) 6070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 3(%edx) 6090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail3) 6100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %edi, %eax 611124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 612124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 613124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare .p2align 4 6140a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(len_less8_prolog): 6150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $4, %edi 6160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 4(%edx) 6180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail4) 6190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %edi 6200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail5) 6210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 5(%edx) 6230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail5) 6240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %edi 6250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail6) 6260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 6(%edx) 6280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail6) 6290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %edi 6300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail7) 6310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 7(%edx) 6330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail7) 6340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $8, %eax 6350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 6360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6390a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(len_less12_prolog): 6400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $4, %edi 6410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 8(%edx) 6430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail8) 6440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %edi 6450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail9) 6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 9(%edx) 6480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail9) 6490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %edi 6500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail10) 6510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 10(%edx) 6530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail10) 6540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %edi 6550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail11) 6560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 11(%edx) 6580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail11) 6590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $12, %eax 6600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 6610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 6630a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(len_less16_prolog): 6640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $4, %edi 6650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 12(%edx) 6670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail12) 6680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %edi 6690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail13) 6700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 13(%edx) 6720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail13) 6730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %edi 6740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail14) 6750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 14(%edx) 6770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail14) 6780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %edi 6790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(exit_tail15) 6800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 15(%edx) 6820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail15) 6830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $16, %eax 6840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 6850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 6860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 688124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail1): 689124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $1, %eax 690124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 691124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 692124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail2): 693124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $2, %eax 694124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 695124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 696124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail3): 697124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $3, %eax 698124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 699124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 700124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail4): 701124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $4, %eax 702124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 703124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 704124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail5): 705124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $5, %eax 706124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 707124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 708124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail6): 709124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $6, %eax 710124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 711124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 712124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail7): 713124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $7, %eax 714124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 715124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 716124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail8): 717124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $8, %eax 718124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 719124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 720124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail9): 721124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $9, %eax 722124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 723124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 724124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail10): 725124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $10, %eax 726124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 727124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 728124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail11): 729124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $11, %eax 730124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 731124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 732124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail12): 733124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $12, %eax 734124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 735124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 736124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail13): 737124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $13, %eax 738124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 739124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 740124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail14): 741124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $14, %eax 742124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare RETURN 743124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare 744124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareL(exit_tail15): 745124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare add $15, %eax 7460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_STRCAT 7470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 748124a542aa4d78040176f65b28f4958540b5d89aaBruce BeareEND (STRLEN) 7490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 750