aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/multiarch/strcpy-ssse3.S
diff options
context:
space:
mode:
authorLiubov Dmitrieva <liubov.dmitrieva@gmail.com>2011-07-19 17:11:54 -0400
committerUlrich Drepper <drepper@gmail.com>2011-07-19 17:11:54 -0400
commit99710781cc47002612e609c7dc5f34692b64e9b3 (patch)
treeac3c980ce57d0420fff758faffbd59d111026219 /sysdeps/x86_64/multiarch/strcpy-ssse3.S
parent7dc6bd90c569c49807462b0740b18e32fab4d8b7 (diff)
downloadglibc-99710781cc47002612e609c7dc5f34692b64e9b3.tar
glibc-99710781cc47002612e609c7dc5f34692b64e9b3.tar.gz
glibc-99710781cc47002612e609c7dc5f34692b64e9b3.tar.bz2
glibc-99710781cc47002612e609c7dc5f34692b64e9b3.zip
Improve 64 bit strcat functions with SSE2/SSSE3
Diffstat (limited to 'sysdeps/x86_64/multiarch/strcpy-ssse3.S')
-rw-r--r--sysdeps/x86_64/multiarch/strcpy-ssse3.S280
1 files changed, 142 insertions, 138 deletions
diff --git a/sysdeps/x86_64/multiarch/strcpy-ssse3.S b/sysdeps/x86_64/multiarch/strcpy-ssse3.S
index efbd3bfccb..05faf0dfc2 100644
--- a/sysdeps/x86_64/multiarch/strcpy-ssse3.S
+++ b/sysdeps/x86_64/multiarch/strcpy-ssse3.S
@@ -20,25 +20,26 @@
#ifndef NOT_IN_libc
-# include <sysdep.h>
+# ifndef USE_AS_STRCAT
+# include <sysdep.h>
-# ifndef STRCPY
-# define STRCPY __strcpy_ssse3
-# endif
+# ifndef STRCPY
+# define STRCPY __strcpy_ssse3
+# endif
.section .text.ssse3,"ax",@progbits
ENTRY (STRCPY)
mov %rsi, %rcx
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
mov %rdx, %r8
-# endif
+# endif
mov %rdi, %rdx
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
test %r8, %r8
jz L(Exit0)
cmp $8, %r8
jbe L(StrncpyExit8Bytes)
-# endif
+# endif
cmpb $0, (%rcx)
jz L(Exit1)
cmpb $0, 1(%rcx)
@@ -55,10 +56,10 @@ ENTRY (STRCPY)
jz L(Exit7)
cmpb $0, 7(%rcx)
jz L(Exit8)
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
cmp $16, %r8
jb L(StrncpyExit15Bytes)
-# endif
+# endif
cmpb $0, 8(%rcx)
jz L(Exit9)
cmpb $0, 9(%rcx)
@@ -73,12 +74,13 @@ ENTRY (STRCPY)
jz L(Exit14)
cmpb $0, 14(%rcx)
jz L(Exit15)
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
cmp $16, %r8
je L(Exit16)
-# endif
+# endif
cmpb $0, 15(%rcx)
jz L(Exit16)
+# endif
# ifdef USE_AS_STRNCPY
mov %rcx, %rsi
@@ -2180,12 +2182,12 @@ L(Shl15LoopExit):
jmp L(CopyFrom1To16Bytes)
# endif
-
+# ifndef USE_AS_STRCAT
.p2align 4
L(CopyFrom1To16Bytes):
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
add $16, %r8
-# endif
+# endif
add %rsi, %rdx
add %rsi, %rcx
@@ -2210,20 +2212,20 @@ L(CopyFrom1To16Bytes):
L(Exit8):
mov (%rcx), %rax
mov %rax, (%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 7(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $8, %r8
lea 8(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2249,23 +2251,23 @@ L(Exit16):
mov %rax, (%rdx)
mov 8(%rcx), %rax
mov %rax, 8(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 15(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $16, %r8
lea 16(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
.p2align 4
L(CopyFrom1To16BytesCase2):
@@ -2381,46 +2383,46 @@ L(Less12Case3): /* but more than 8 */
jl L(Exit9)
je L(Exit10)
jg L(Exit11)
-# endif
+# endif
.p2align 4
L(Exit1):
movb (%rcx), %al
movb %al, (%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea (%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $1, %r8
lea 1(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
L(Exit2):
movw (%rcx), %ax
movw %ax, (%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 1(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $2, %r8
lea 2(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2429,40 +2431,40 @@ L(Exit3):
movw %ax, (%rdx)
movb 2(%rcx), %al
movb %al, 2(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 2(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $3, %r8
lea 3(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
L(Exit4):
movl (%rcx), %eax
movl %eax, (%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 3(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $4, %r8
lea 4(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2471,20 +2473,20 @@ L(Exit5):
movl %eax, (%rdx)
movb 4(%rcx), %al
movb %al, 4(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 4(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $5, %r8
lea 5(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2493,20 +2495,20 @@ L(Exit6):
movl %eax, (%rdx)
movw 4(%rcx), %ax
movw %ax, 4(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 5(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $6, %r8
lea 6(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2515,20 +2517,20 @@ L(Exit7):
movl %eax, (%rdx)
movl 3(%rcx), %eax
movl %eax, 3(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 6(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $7, %r8
lea 7(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2537,20 +2539,20 @@ L(Exit9):
mov %rax, (%rdx)
mov 5(%rcx), %eax
mov %eax, 5(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 8(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $9, %r8
lea 9(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2559,20 +2561,20 @@ L(Exit10):
mov %rax, (%rdx)
mov 6(%rcx), %eax
mov %eax, 6(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 9(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $10, %r8
lea 10(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2581,20 +2583,20 @@ L(Exit11):
mov %rax, (%rdx)
mov 7(%rcx), %eax
mov %eax, 7(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 10(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $11, %r8
lea 11(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2603,20 +2605,20 @@ L(Exit12):
mov %rax, (%rdx)
mov 8(%rcx), %eax
mov %eax, 8(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 11(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $12, %r8
lea 12(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2625,20 +2627,20 @@ L(Exit13):
mov %rax, (%rdx)
mov 5(%rcx), %rax
mov %rax, 5(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 12(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $13, %r8
lea 13(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2647,20 +2649,20 @@ L(Exit14):
mov %rax, (%rdx)
mov 6(%rcx), %rax
mov %rax, 6(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 13(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $14, %r8
lea 14(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
.p2align 4
@@ -2669,23 +2671,23 @@ L(Exit15):
mov %rax, (%rdx)
mov 7(%rcx), %rax
mov %rax, 7(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 14(%rdx), %rax
-# else
+# else
mov %rdi, %rax
-# endif
-# ifdef USE_AS_STRNCPY
+# endif
+# ifdef USE_AS_STRNCPY
sub $15, %r8
lea 15(%rdx), %rcx
jnz L(StrncpyFillTailWithZero1)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
cmpb $1, (%rax)
sbb $-1, %rax
-# endif
-# endif
+# endif
+# endif
ret
-# ifdef USE_AS_STRNCPY
+# ifdef USE_AS_STRNCPY
.p2align 4
L(Fill0):
ret
@@ -2902,13 +2904,13 @@ L(StrncpyExit15Bytes):
mov %rax, (%rdx)
mov 7(%rcx), %rax
mov %rax, 7(%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 14(%rdx), %rax
cmpb $1, (%rax)
sbb $-1, %rax
-# else
+# else
mov %rdi, %rax
-# endif
+# endif
ret
.p2align 4
@@ -2943,15 +2945,17 @@ L(StrncpyExit8Bytes):
jz L(Exit7)
mov (%rcx), %rax
mov %rax, (%rdx)
-# ifdef USE_AS_STPCPY
+# ifdef USE_AS_STPCPY
lea 7(%rdx), %rax
cmpb $1, (%rax)
sbb $-1, %rax
-# else
+# else
mov %rdi, %rax
-# endif
+# endif
ret
+# endif
+
# endif
# ifdef USE_AS_STRNCPY
@@ -3715,7 +3719,7 @@ L(StrncpyExit15):
lea 1(%rsi), %rsi
jmp L(CopyFrom1To16BytesCase3)
# endif
-
+# ifndef USE_AS_STRCAT
END (STRCPY)
-
+# endif
#endif