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_WCSCAT 320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef L 340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define L(label) .L##label 350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_startproc 380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc .cfi_startproc 390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_endproc 420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_endproc .cfi_endproc 430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef ENTRY 460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name) \ 470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .type name, @function; \ 480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .globl name; \ 490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4; \ 500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname: \ 510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_startproc 520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef END 550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name) \ 560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_endproc; \ 570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .size name, .-name 580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif 590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define PARMS 4 610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STR PARMS 620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN ret 630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .text 650a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (wcslen) 660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov STR(%esp), %edx 670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, (%edx) 690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail0) 700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 4(%edx) 710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail1) 720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 8(%edx) 730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail2) 740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 12(%edx) 750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail3) 760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 16(%edx) 770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail4) 780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 20(%edx) 790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail5) 800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 24(%edx) 810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail6) 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $0, 28(%edx) 830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_tail7) 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm0, %xmm0 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 32(%edx), %eax 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%eax), %ecx 890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-16, %eax 900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm0 920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm1, %xmm1 940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm1 990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm2, %xmm2 1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm2 1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pxor %xmm3, %xmm3 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm3 1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm0 1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm1 1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm2 1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm3 1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm0 1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm1 1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm2 1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm3 1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm0 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm0, %edx 1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm1 1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm1, %edx 1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm2 1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd (%eax), %xmm3 1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 16(%eax), %eax 1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $-0x40, %eax 1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(aligned_64_loop): 1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps (%eax), %xmm0 1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 16(%eax), %xmm1 1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 32(%eax), %xmm2 1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movaps 48(%eax), %xmm6 1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm1, %xmm0 2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm6, %xmm2 2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pminub %xmm0, %xmm2 2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd %xmm3, %xmm2 2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm2, %edx 2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 64(%eax), %eax 2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(aligned_64_loop) 2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd -64(%eax), %xmm3 2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 48(%ecx), %ecx 2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd %xmm1, %xmm3 2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd -32(%eax), %xmm3 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pcmpeqd %xmm6, %xmm3 2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva pmovmskb %xmm3, %edx 2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -16(%ecx), %ecx 2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %edx, %edx 2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(exit) 2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jmp L(aligned_64_loop) 2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit): 2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sub %ecx, %eax 2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva shr $2, %eax 2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %dl, %dl 2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_high) 2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dl, %cl 2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %cl 2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_1) 2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_high): 2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %dh, %ch 2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $15, %ch 2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(exit_3) 2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $2, %eax 2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_1): 2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $1, %eax 2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_3): 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $3, %eax 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail0): 2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %eax, %eax 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail1): 2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $1, %eax 2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail2): 2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $2, %eax 2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail3): 2810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $3, %eax 2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail4): 2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $4, %eax 2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail5): 2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $5, %eax 2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail6): 2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $6, %eax 2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(exit_tail7): 3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov $7, %eax 3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_WCSCAT 3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN 3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (wcslen) 3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 307