diff options
| author | Tom Lane | 2012-01-02 03:39:59 +0000 |
|---|---|---|
| committer | Tom Lane | 2012-01-02 05:02:00 +0000 |
| commit | 5cfa8dd3007d7e953c6a03b0fa2215d97c581b0c (patch) | |
| tree | 39ee2902ec30be8467b91a25f3f02c7a89f70507 /configure.in | |
| parent | 6b6137e4efebcd767a349099b3e048fbc7755cca (diff) | |
Use mutex hint bit in PPC LWARX instructions, where possible.
The hint bit makes for a small but measurable performance improvement
in access to contended spinlocks.
On the other hand, some PPC chips give an illegal-instruction failure.
There doesn't seem to be a completely bulletproof way to tell whether the
hint bit will cause an illegal-instruction failure other than by trying
it; but most if not all 64-bit PPC machines should accept it, so follow
the Linux kernel's lead and assume it's okay to use it in 64-bit builds.
Of course we must also check whether the assembler accepts the command,
since even with a recent CPU the toolchain could be old.
Patch by Manabu Ori, significantly modified by me.
Diffstat (limited to 'configure.in')
| -rw-r--r-- | configure.in | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/configure.in b/configure.in index 48db5c39b5..3f195a6511 100644 --- a/configure.in +++ b/configure.in @@ -1170,11 +1170,27 @@ if test "$with_krb5" = yes; then AC_MSG_CHECKING(for krb5_free_unparsed_name) AC_TRY_LINK([#include <krb5.h>], [krb5_free_unparsed_name(NULL,NULL);], - [AC_DEFINE(HAVE_KRB5_FREE_UNPARSED_NAME, 1, [Define to 1 if you have krb5_free_unparsed_name]) + [AC_DEFINE(HAVE_KRB5_FREE_UNPARSED_NAME, 1, [Define to 1 if you have krb5_free_unparsed_name.]) AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)]) fi +# On PPC, check if assembler supports LWARX instruction's mutex hint bit +case $host_cpu in + ppc*|powerpc*) + AC_MSG_CHECKING([whether assembler supports lwarx hint bit]) + AC_TRY_COMPILE([], + [int a = 0; int *p = &a; int r; + __asm__ __volatile__ (" lwarx %0,0,%1,1\n" : "=&r"(r) : "r"(p));], + [pgac_cv_have_ppc_mutex_hint=yes], + [pgac_cv_have_ppc_mutex_hint=no]) + AC_MSG_RESULT([$pgac_cv_have_ppc_mutex_hint]) + if test x"$pgac_cv_have_ppc_mutex_hint" = xyes ; then + AC_DEFINE(HAVE_PPC_LWARX_MUTEX_HINT, 1, [Define to 1 if the assembler supports PPC's LWARX mutex hint bit.]) + fi + ;; +esac + # Check largefile support. You might think this is a system service not a # compiler characteristic, but you'd be wrong. We must check this before # probing existence of related functions such as fseeko, since the largefile |
