aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-24 21:08:05 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-08-24 21:08:05 +0000
commitb315ae351ed5ccd7946e1b4cd0f2c0f7805cde55 (patch)
treebfa80eeb59c1e4fde073f12dc44c3301e2faed5c /libcpp
parent93d3ee56e3a680942f8ed6f975da4edf4688bec6 (diff)
PR bootstrap/45376
* configure.ac (HAVE_SSE4): New check. * configure, config.in: Rebuild. * lex.c (search_line_sse42): Omit if !HAVE_SSE4. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/ChangeLog7
-rw-r--r--libcpp/config.in3
-rwxr-xr-xlibcpp/configure21
-rw-r--r--libcpp/configure.ac7
-rw-r--r--libcpp/lex.c6
5 files changed, 44 insertions, 0 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index b2237e6d48f..95918e2f52b 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-24 Richard Henderson <rth@redhat.com>
+
+ PR bootstrap/45376
+ * configure.ac (HAVE_SSE4): New check.
+ * configure, config.in: Rebuild.
+ * lex.c (search_line_sse42): Omit if !HAVE_SSE4.
+
2010-08-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* lex.c [__sun__ && __svr4__]: Disable init_vectorized_lexer
diff --git a/libcpp/config.in b/libcpp/config.in
index 95606c18abf..29d4501821a 100644
--- a/libcpp/config.in
+++ b/libcpp/config.in
@@ -185,6 +185,9 @@
/* Define to 1 if you have the `putc_unlocked' function. */
#undef HAVE_PUTC_UNLOCKED
+/* Define to 1 if you can assemble SSE4 insns. */
+#undef HAVE_SSE4
+
/* Define to 1 if you have the <stddef.h> header file. */
#undef HAVE_STDDEF_H
diff --git a/libcpp/configure b/libcpp/configure
index a2ce1c3a70a..012ee41c819 100755
--- a/libcpp/configure
+++ b/libcpp/configure
@@ -7209,6 +7209,27 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+case $target in
+ i?86-* | x86_64-*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+asm ("pcmpestri %0, %%xmm0, %%xmm1" : : "i"(0))
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_SSE4 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+esac
+
# Output.
ac_config_headers="$ac_config_headers config.h:config.in"
diff --git a/libcpp/configure.ac b/libcpp/configure.ac
index 1250f495a9d..8082117f2d6 100644
--- a/libcpp/configure.ac
+++ b/libcpp/configure.ac
@@ -184,6 +184,13 @@ AC_DEFINE_UNQUOTED(HOST_WIDE_INT, $host_wide_int,
[Define to the widest efficient host integer type at least
as wide as the target's size_t type.])
+case $target in
+ i?86-* | x86_64-*)
+ AC_TRY_COMPILE([], [asm ("pcmpestri %0, %%xmm0, %%xmm1" : : "i"(0))],
+ [AC_DEFINE([HAVE_SSE4], [1],
+ [Define to 1 if you can assemble SSE4 insns.])])
+esac
+
# Output.
AC_CONFIG_HEADERS(config.h:config.in, [echo timestamp > stamp-h1])
diff --git a/libcpp/lex.c b/libcpp/lex.c
index a94e57282d8..2e962a70bb9 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -410,6 +410,7 @@ search_line_sse2 (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
return (const uchar *)p + found;
}
+#ifdef HAVE_SSE4
/* A version of the fast scanner using SSE 4.2 vectorized string insns. */
static const uchar *
@@ -464,6 +465,11 @@ search_line_sse42 (const uchar *s, const uchar *end)
return s + index;
}
+#else
+/* Work around out-dated assemblers without sse4 support. */
+#define search_line_sse42 search_line_sse2
+#endif
+
/* Check the CPU capabilities. */
#include "../gcc/config/i386/cpuid.h"