diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-24 21:08:05 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-08-24 21:08:05 +0000 |
commit | b315ae351ed5ccd7946e1b4cd0f2c0f7805cde55 (patch) | |
tree | bfa80eeb59c1e4fde073f12dc44c3301e2faed5c | |
parent | 93d3ee56e3a680942f8ed6f975da4edf4688bec6 (diff) | |
download | gcc-b315ae351ed5ccd7946e1b4cd0f2c0f7805cde55.tar.gz |
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
-rw-r--r-- | libcpp/ChangeLog | 7 | ||||
-rw-r--r-- | libcpp/config.in | 3 | ||||
-rwxr-xr-x | libcpp/configure | 21 | ||||
-rw-r--r-- | libcpp/configure.ac | 7 | ||||
-rw-r--r-- | libcpp/lex.c | 6 |
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" |