aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/i386/i686/multiarch/strcmp-sse4.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2010-02-15 13:04:54 -0800
committerUlrich Drepper <drepper@redhat.com>2010-02-15 13:04:54 -0800
commit6bb74d9f86e543c418f94a7732e8ee47c9e8225f (patch)
treeedadff811d4545e48713f224f8fd172f078a576e /sysdeps/i386/i686/multiarch/strcmp-sse4.S
parent904057bc17fb3e3127a35ebf35fcac8d5bc8269b (diff)
downloadglibc-6bb74d9f86e543c418f94a7732e8ee47c9e8225f.tar
glibc-6bb74d9f86e543c418f94a7732e8ee47c9e8225f.tar.gz
glibc-6bb74d9f86e543c418f94a7732e8ee47c9e8225f.tar.bz2
glibc-6bb74d9f86e543c418f94a7732e8ee47c9e8225f.zip
Fix up new x86 string functions.
Diffstat (limited to 'sysdeps/i386/i686/multiarch/strcmp-sse4.S')
-rw-r--r--sysdeps/i386/i686/multiarch/strcmp-sse4.S14
1 files changed, 14 insertions, 0 deletions
diff --git a/sysdeps/i386/i686/multiarch/strcmp-sse4.S b/sysdeps/i386/i686/multiarch/strcmp-sse4.S
index 977647203f..4b47851ed4 100644
--- a/sysdeps/i386/i686/multiarch/strcmp-sse4.S
+++ b/sysdeps/i386/i686/multiarch/strcmp-sse4.S
@@ -176,6 +176,7 @@ L(first4bytes):
PUSH (%ebx)
PUSH (%edi)
PUSH (%esi)
+ cfi_remember_state
mov %edx, %edi
mov %eax, %esi
xorl %eax, %eax
@@ -241,6 +242,7 @@ L(ret):
#endif
ret
+ cfi_restore_state
#ifdef USE_AS_STRNCMP
L(more16byteseq):
POP (%esi)
@@ -253,6 +255,10 @@ L(eq):
POP (%ebp)
#endif
ret
+
+#ifdef USE_AS_STRNCMP
+ CFI_PUSH (%ebp)
+#endif
L(neq):
mov $1, %eax
ja L(neq_bigger)
@@ -263,6 +269,9 @@ L(neq_bigger):
#endif
ret
.p2align 4
+#ifdef USE_AS_STRNCMP
+ CFI_PUSH (%ebp)
+#endif
L(less16bytes):
add $0xfefefeff, %ecx
jnc L(less4bytes)
@@ -370,8 +379,13 @@ L(more4bytes):
movzbl 7(%eax), %ecx
cmpb %cl, 7(%edx)
jne L(neq)
+#if 0
+ // XXX bug in original code. It had a fallthru without any code
cmpl $0, %ecx
je L(eq)
+#else
+ jmp L(eq)
+#endif
END (STRCMP)