From a8eab8b1402ceff505b0cdee440c02a72cc4307d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 26 Oct 1998 17:59:59 +0000 Subject: Update. * include/libc-symbols.h: If HAVE_BUILTIN_EXPECT is not defined define __builtin_expect as a macro substituting to the first argument. * config.h.in: Define HAVE_BUILTIN_EXPECT. * configure.in: Add test for __builtin_expect. --- ChangeLog | 6 ++++++ config.h.in | 3 +++ configure | 40 +++++++++++++++++++++++++++++++++++----- configure.in | 22 ++++++++++++++++++++++ include/libc-symbols.h | 5 +++++ 5 files changed, 71 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5c35704456..a63aaeea85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 1998-10-26 Ulrich Drepper + * include/libc-symbols.h: If HAVE_BUILTIN_EXPECT is not defined + define __builtin_expect as a macro substituting to the first + argument. + * config.h.in: Define HAVE_BUILTIN_EXPECT. + * configure.in: Add test for __builtin_expect. + * sysdeps/unix/sysv/linux/bits/types.h: Include bits/pthreadtypes.h only not for POSIX 199506. * sysdeps/unix/sysv/linux/alpha/bits/types.h: Likewise. diff --git a/config.h.in b/config.h.in index f15e5c7b06..dc1d5bc846 100644 --- a/config.h.in +++ b/config.h.in @@ -59,6 +59,9 @@ with static variable. */ #undef HAVE_DWARF2_UNWIND_INFO_STATIC +/* Define if the compiler supports __builtin_expect. */ +#undef HAVE_BUILTIN_EXPECT + /* Define if the regparm attribute shall be used for local functions (gcc on ix86 only). */ #undef USE_REGPARMS diff --git a/configure b/configure index 24a2d7f753..b06bb24084 100755 --- a/configure +++ b/configure @@ -2683,6 +2683,36 @@ EOF ;; esac +echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 +echo "configure:2688: checking for __builtin_expect" >&5 +if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + libc_cv_gcc_builtin_expect=yes +else + libc_cv_gcc_builtin_expect=no +fi +rm -f conftest* +fi + +echo "$ac_t""$libc_cv_gcc_builtin_expect" 1>&6 +if test "$libc_cv_gcc_builtin_expect" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_BUILTIN_EXPECT 1 +EOF + +fi + ### End of automated tests. ### Now run sysdeps configure fragments. @@ -2728,7 +2758,7 @@ if test "$uname" = "sysdeps/generic"; then fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:2732: checking OS release for uname" >&5 +echo "configure:2762: checking OS release for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2750,7 +2780,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6 uname_release="$libc_cv_uname_release" echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 -echo "configure:2754: checking OS version for uname" >&5 +echo "configure:2784: checking OS version for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2772,7 +2802,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:2776: checking stdio selection" >&5 +echo "configure:2806: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -2786,7 +2816,7 @@ echo "$ac_t""$stdio" 1>&6 # Test for old glibc 2.0.x headers so that they can be removed properly # Search only in includedir. echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 -echo "configure:2790: checking for old glibc 2.0.x headers" >&5 +echo "configure:2820: checking for old glibc 2.0.x headers" >&5 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" then old_glibc_headers=yes @@ -2840,7 +2870,7 @@ if test $shared = default; then fi echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 -echo "configure:2844: checking whether -fPIC is default" >&5 +echo "configure:2874: checking whether -fPIC is default" >&5 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else diff --git a/configure.in b/configure.in index d256af08da..40d9f55a16 100644 --- a/configure.in +++ b/configure.in @@ -987,6 +987,28 @@ static) ;; esac +dnl Check whether compiler understands __builtin_expect. +AC_CACHE_CHECK(for __builtin_expect, libc_cv_gcc_builtin_expect, +[cat > conftest.c <&AC_FD_CC]); then + libc_cv_gcc_builtin_expect=yes +else + libc_cv_gcc_builtin_expect=no +fi +rm -f conftest*]) +if test "$libc_cv_gcc_builtin_expect" = yes; then + AC_DEFINE(HAVE_BUILTIN_EXPECT) +fi + ### End of automated tests. ### Now run sysdeps configure fragments. diff --git a/include/libc-symbols.h b/include/libc-symbols.h index 4684cb7f4a..5d15791fda 100644 --- a/include/libc-symbols.h +++ b/include/libc-symbols.h @@ -226,6 +226,11 @@ extern const char _libc_intl_domainname[]; # define internal_function /* empty */ #endif +/* Prepare for the case that `__builtin_expect' is not available. */ +#ifndef HAVE_BUILTIN_EXPECT +# define __builtin_expect(expr, val) (expr) +#endif + /* When a reference to SYMBOL is encountered, the linker will emit a warning message MSG. */ #ifdef HAVE_GNU_LD -- cgit v1.2.3