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 L 320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define L(label) .L##label 330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_startproc 360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc .cfi_startproc 370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_endproc 400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_endproc .cfi_endproc 410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_rel_offset 440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off 450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_restore 480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore(reg) .cfi_restore reg 490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_adjust_cfa_offset 520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off 530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_remember_state 560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_remember_state .cfi_remember_state 570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef cfi_restore_state 600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore_state .cfi_restore_state 610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef ENTRY 640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name) \ 650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .type name, @function; \ 660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .globl name; \ 670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4; \ 680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname: \ 690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_startproc 700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef END 730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name) \ 740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_endproc; \ 750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .size name, .-name 760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_PUSH(REG) \ 790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (4); \ 800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_rel_offset (REG, 0) 810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_POP(REG) \ 830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_adjust_cfa_offset (-4); \ 840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cfi_restore (REG) 850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define PUSH(REG) pushl REG; CFI_PUSH (REG) 870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define POP(REG) popl REG; CFI_POP (REG) 880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef STRCAT 900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STRCAT strcat 910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define PARMS 4 940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR1 PARMS+4 950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define STR2 STR1+4 960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNCAT 980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define LEN STR2+8 990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define USE_AS_STRCAT 1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .section .text.ssse3,"ax",@progbits 1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (STRCAT) 1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%edi) 1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov STR1(%esp), %edi 1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov %edi, %edx 1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define RETURN jmp L(StrcpyAtom) 1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#include "sse2-strlen-atom.S" 1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrcpyAtom): 1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov STR2(%esp), %ecx 1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea (%edi, %eax), %edx 1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNCAT 1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva PUSH (%ebx) 1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva mov LEN(%esp), %ebx 1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %ebx, %ebx 1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(StrncatExit0) 1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $8, %ebx 1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jbe L(StrncpyExit8Bytes) 1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, (%ecx) 1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit1) 1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 1(%ecx) 1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit2) 1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 2(%ecx) 1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit3) 1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 3(%ecx) 1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit4) 1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 4(%ecx) 1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit5) 1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 5(%ecx) 1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit6) 1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 6(%ecx) 1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit7) 1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 7(%ecx) 1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit8) 1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 8(%ecx) 1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit9) 1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNCAT 1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $16, %ebx 1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jb L(StrncpyExit15Bytes) 1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 9(%ecx) 1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit10) 1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 10(%ecx) 1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit11) 1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 11(%ecx) 1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit12) 1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 12(%ecx) 1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit13) 1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 13(%ecx) 1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit14) 1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 14(%ecx) 1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit15) 1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 15(%ecx) 1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit16) 1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNCAT 1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $16, %ebx 1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit16) 1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN1 POP (%ebx); POP (%edi); ret; \ 1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH (%ebx); CFI_PUSH (%edi) 1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define USE_AS_STRNCPY 1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#else 1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN1 POP(%edi); ret; CFI_PUSH(%edi) 1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#include "ssse3-strcpy-atom.S" 1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(CopyFrom1To16Bytes): 1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %esi, %edx 1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %esi, %ecx 1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %al, %al 1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(ExitHigh) 1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %al 1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit1) 1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit2) 1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit3) 1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit4) 1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %al 1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit5) 1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit6) 1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit7) 1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitHigh): 2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %ah 2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit9) 2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit10) 2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit11) 2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %ah 2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit12) 2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %ah 2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit13) 2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit14) 2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit15) 2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 8(%ecx), %xmm1 2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm1, 8(%edx) 2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit1): 2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 1(%edx) 2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit1): 2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb (%ecx), %al 2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %al, (%edx) 2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit2): 2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 2(%edx) 2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit2): 2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw (%ecx), %ax 2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw %ax, (%edx) 2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit3): 2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 3(%edx) 2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit3): 2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw (%ecx), %ax 2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw %ax, (%edx) 2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb 2(%ecx), %al 2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %al, 2(%edx) 2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit4): 2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 4(%edx) 2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit4): 2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl (%ecx), %eax 2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, (%edx) 2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit5): 2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 5(%edx) 2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit5): 2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl (%ecx), %eax 2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, (%edx) 2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb 4(%ecx), %al 2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %al, 4(%edx) 2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit6): 2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 6(%edx) 2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit6): 2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl (%ecx), %eax 2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, (%edx) 2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw 4(%ecx), %ax 2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw %ax, 4(%edx) 2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit7): 2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 7(%edx) 2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit7): 2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl (%ecx), %eax 2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, (%edx) 2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl 3(%ecx), %eax 2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, 3(%edx) 2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit8): 2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 8(%edx) 2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit8): 2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit9): 3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 9(%edx) 3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit9): 3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb 8(%ecx), %al 3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %al, 8(%edx) 3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit10): 3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 10(%edx) 3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit10): 3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw 8(%ecx), %ax 3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movw %ax, 8(%edx) 3200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit11): 3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 11(%edx) 3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit11): 3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl 7(%ecx), %eax 3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, 7(%edx) 3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit12): 3360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 12(%edx) 3370a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit12): 3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl 8(%ecx), %eax 3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %eax, 8(%edx) 3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3460a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit13): 3470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 13(%edx) 3480a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit13): 3490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 5(%ecx), %xmm0 3520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, 5(%edx) 3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3570a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit14): 3580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 14(%edx) 3590a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit14): 3600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 6(%ecx), %xmm0 3630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, 6(%edx) 3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit15): 3690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 15(%edx) 3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit15): 3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 7(%ecx), %xmm0 3740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, 7(%edx) 3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit16): 3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 16(%edx) 3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit16): 3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 8(%ecx), %xmm1 3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm1, 8(%edx) 3860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifdef USE_AS_STRNCPY 3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH(%esi) 3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(CopyFrom1To16BytesCase2): 3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $16, %ebx 3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %esi, %ecx 3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea (%esi, %edx), %esi 3980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea -9(%ebx), %edx 3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva and $1<<7, %dh 4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva or %al, %dh 4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea (%esi), %edx 4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(ExitHighCase2) 4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %al 4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit1) 4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %ebx 4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit1) 4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %al 4100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit2) 4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %ebx 4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit2) 4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %al 4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit3) 4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %ebx 4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit3) 4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x08, %al 4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit4) 4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $4, %ebx 4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit4) 4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %al 4220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit5) 4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $5, %ebx 4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit5) 4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %al 4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit6) 4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $6, %ebx 4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit6) 4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %al 4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit7) 4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $7, %ebx 4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit7) 4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 4340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%edx), %eax 4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $1, (%eax) 4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sbb $-1, %eax 4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva xor %cl, %cl 4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %cl, (%eax) 4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitHighCase2): 4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x01, %ah 4460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit9) 4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $9, %ebx 4480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit9) 4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x02, %ah 4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit10) 4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $10, %ebx 4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit10) 4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x04, %ah 4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit11) 4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $11, %ebx 4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit11) 4570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x8, %ah 4580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit12) 4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $12, %ebx 4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit12) 4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x10, %ah 4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit13) 4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $13, %ebx 4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit13) 4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x20, %ah 4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit14) 4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $14, %ebx 4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit14) 4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test $0x40, %ah 4700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(Exit15) 4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $15, %ebx 4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit15) 4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 8(%ecx), %xmm1 4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm1, 8(%edx) 4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva CFI_PUSH(%esi) 4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4820a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(CopyFrom1To16BytesCase2OrCase3): 4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva test %eax, %eax 4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jnz L(CopyFrom1To16BytesCase2) 4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(CopyFrom1To16BytesCase3): 4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add $16, %ebx 4890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %esi, %edx 4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva add %esi, %ecx 4910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva POP (%esi) 4930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $8, %ebx 4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva ja L(ExitHighCase3) 4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %ebx 4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit1) 4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %ebx 4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit2) 5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %ebx 5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit3) 5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $4, %ebx 5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit4) 5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $5, %ebx 5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit5) 5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $6, %ebx 5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit6) 5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $7, %ebx 5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit7) 5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 8(%edx) 5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitHighCase3): 5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $9, %ebx 5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit9) 5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $10, %ebx 5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit10) 5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $11, %ebx 5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit11) 5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $12, %ebx 5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit12) 5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $13, %ebx 5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit13) 5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $14, %ebx 5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit14) 5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $15, %ebx 5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit15) 5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 8(%ecx), %xmm1 5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm1, 8(%edx) 5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, 16(%edx) 5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncatExit0): 5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncpyExit15Bytes): 5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $9, %ebx 5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit9) 5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 9(%ecx) 5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit10) 5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $10, %ebx 5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit10) 5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 10(%ecx) 5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit11) 5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $11, %ebx 5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit11) 5570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 11(%ecx) 5580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit12) 5590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $12, %ebx 5600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit12) 5610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 12(%ecx) 5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit13) 5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $13, %ebx 5640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit13) 5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 13(%ecx) 5660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit14) 5670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $14, %ebx 5680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit14) 5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 5700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 5710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd 7(%ecx), %xmm0 5720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, 7(%edx) 5730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 14(%edx), %eax 5740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $1, (%eax) 5750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sbb $-1, %eax 5760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, (%eax) 5770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 5780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 5790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 5800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva .p2align 4 5810a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(StrncpyExit8Bytes): 5820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, (%ecx) 5830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit1) 5840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $1, %ebx 5850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit1) 5860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 1(%ecx) 5870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit2) 5880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $2, %ebx 5890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit2) 5900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 2(%ecx) 5910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit3) 5920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $3, %ebx 5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit3) 5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 3(%ecx) 5950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit4) 5960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $4, %ebx 5970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit4) 5980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 4(%ecx) 5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit5) 6000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $5, %ebx 6010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit5) 6020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 5(%ecx) 6030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit6) 6040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $6, %ebx 6050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit6) 6060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $0, 6(%ecx) 6070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva jz L(Exit7) 6080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmp $7, %ebx 6090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva je L(StrncatExit7) 6100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd (%ecx), %xmm0 6110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movlpd %xmm0, (%edx) 6120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva lea 7(%edx), %eax 6130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva cmpb $1, (%eax) 6140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva sbb $-1, %eax 6150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movb %bh, (%eax) 6160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva movl %edi, %eax 6170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva RETURN1 6180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva 6190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif 6200a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (STRCAT) 621