From 5cfa8dd3007d7e953c6a03b0fa2215d97c581b0c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 1 Jan 2012 22:39:59 -0500 Subject: 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. --- src/include/pg_config_manual.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/include/pg_config_manual.h') diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index ac434fabbc4..810be27e813 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -6,6 +6,9 @@ * for developers. If you edit any of these, be sure to do a *full* * rebuild (and an initdb if noted). * + * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * * src/include/pg_config_manual.h *------------------------------------------------------------------------ */ @@ -170,6 +173,21 @@ #define PG_PRINTF_ATTRIBUTE printf #endif +/* + * On PPC machines, decide whether to use the mutex hint bit in LWARX + * instructions. Setting the hint bit will slightly improve spinlock + * performance on POWER6 and later machines, but does nothing before that, + * and will result in illegal-instruction failures on some pre-POWER4 + * machines. By default we use the hint bit when building for 64-bit PPC, + * which should be safe in nearly all cases. You might want to override + * this if you are building 32-bit code for a known-recent PPC machine. + */ +#ifdef HAVE_PPC_LWARX_MUTEX_HINT /* must have assembler support in any case */ +#if defined(__ppc64__) || defined(__powerpc64__) +#define USE_PPC_LWARX_MUTEX_HINT +#endif +#endif + /* *------------------------------------------------------------------------ * The following symbols are for enabling debugging code, not for -- cgit v1.2.3