aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/multiarch/strstr-c.c
diff options
context:
space:
mode:
authorOndřej Bílka <neleai@seznam.cz>2013-12-14 19:33:56 +0100
committerOndřej Bílka <neleai@seznam.cz>2013-12-14 20:08:13 +0100
commit584b18eb4df61ccd447db2dfe8c8a7901f8c8598 (patch)
tree8240dbf408eadda74685f951e36f8885f77c2f77 /sysdeps/x86_64/multiarch/strstr-c.c
parent8a5c7897dd1c52ca74b06aaf5a3bacf0919c97aa (diff)
downloadglibc-584b18eb4df61ccd447db2dfe8c8a7901f8c8598.tar
glibc-584b18eb4df61ccd447db2dfe8c8a7901f8c8598.tar.gz
glibc-584b18eb4df61ccd447db2dfe8c8a7901f8c8598.tar.bz2
glibc-584b18eb4df61ccd447db2dfe8c8a7901f8c8598.zip
Add strstr with unaligned loads. Fixes bug 12100.
A sse42 version of strstr used pcmpistr instruction which is quite ineffective. A faster way is look for pairs of characters which is uses sse2, is faster than pcmpistr and for real strings a pairs we look for are relatively rare. For linear time complexity we use buy or rent technique which switches to two-way algorithm when superlinear behaviour is detected.
Diffstat (limited to 'sysdeps/x86_64/multiarch/strstr-c.c')
-rw-r--r--sysdeps/x86_64/multiarch/strstr-c.c47
1 files changed, 0 insertions, 47 deletions
diff --git a/sysdeps/x86_64/multiarch/strstr-c.c b/sysdeps/x86_64/multiarch/strstr-c.c
deleted file mode 100644
index 42bbe48172..0000000000
--- a/sysdeps/x86_64/multiarch/strstr-c.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Multiple versions of strstr.
- All versions must be listed in ifunc-impl-list.c.
- Copyright (C) 2012-2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-/* Redefine strstr so that the compiler won't complain about the type
- mismatch with the IFUNC selector in strong_alias, below. */
-#undef strstr
-#define strstr __redirect_strstr
-#include <string.h>
-#undef strstr
-
-#define STRSTR __strstr_sse2
-#ifdef SHARED
-# undef libc_hidden_builtin_def
-# define libc_hidden_builtin_def(name) \
- __hidden_ver1 (__strstr_sse2, __GI_strstr, __strstr_sse2);
-#endif
-
-#include "string/strstr.c"
-
-extern __typeof (__redirect_strstr) __strstr_sse42 attribute_hidden;
-extern __typeof (__redirect_strstr) __strstr_sse2 attribute_hidden;
-
-#include "init-arch.h"
-
-/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
- ifunc symbol properly. */
-extern __typeof (__redirect_strstr) __libc_strstr;
-libc_ifunc (__libc_strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_sse2)
-
-#undef strstr
-strong_alias (__libc_strstr, strstr)