summaryrefslogtreecommitdiff
path: root/arch/x86/machine/string.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2014-05-24 15:13:11 +0200
committerRichard Braun <rbraun@sceen.net>2014-05-24 15:13:11 +0200
commit24139594d4a90c62bdc9f50d79a019c134fee876 (patch)
treea6d036d53aca6c9e461000ff8df97ba134cc7caa /arch/x86/machine/string.c
parent7f40de6a91acfaa1451764a15b56a3ddfd4569eb (diff)
x86/string: optimize memcmp
Remove an unneeded branch.
Diffstat (limited to 'arch/x86/machine/string.c')
-rw-r--r--arch/x86/machine/string.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/arch/x86/machine/string.c b/arch/x86/machine/string.c
index 3f347d0..297e9b8 100644
--- a/arch/x86/machine/string.c
+++ b/arch/x86/machine/string.c
@@ -67,19 +67,14 @@ memset(void *s, int c, size_t n)
int
memcmp(const void *s1, const void *s2, size_t n)
{
- unsigned char zf, c1, c2;
+ unsigned char c1, c2;
if (n == 0)
return 0;
asm volatile("cld\n"
"repe cmpsb\n"
- "sete %0\n"
- : "=g" (zf), "+D" (s1), "+S" (s2), "+c" (n));
-
- if (zf)
- return 0;
-
+ : "+D" (s1), "+S" (s2), "+c" (n));
c1 = *(((const unsigned char *)s1) - 1);
c2 = *(((const unsigned char *)s2) - 1);
return (int)c1 - (int)c2;