[ET Trac] [Einstein Toolkit] #1379: Rename autoconfigured CCTK_BUILTIN functions to __builtin
Einstein Toolkit
trac-noreply at einsteintoolkit.org
Sun Jun 9 22:05:35 CDT 2013
#1379: Rename autoconfigured CCTK_BUILTIN functions to __builtin
-------------------------+--------------------------------------------------
Reporter: eschnett | Owner:
Type: enhancement | Status: new
Priority: major | Milestone:
Component: Other | Version: development version
Keywords: |
-------------------------+--------------------------------------------------
With autoconf, it is common to define a work-around if a tested feature
does not exist. For example, when the "inline" keyword does not exist,
then there is a #define that allows code to still use "inline", instead of
requiring all code to use CCTK_INLINE. This keeps code more readable.
Cactus tests for various __builtin_* features (__builtin_expect,
__builtin_unreachable). If these are not present, it defines CCTK_BUILTIN
work-around that one can use instead. I suggest to provide instead the
respective __builtin_* functions.
We would keep the current CCTK_BUILTIN_* variants for backward
compatibility (at least for some time), but would not define them for new
builtins that we autoconfigure.
$ svn diff cctk_Config.h.in
Index: cctk_Config.h.in
===================================================================
--- cctk_Config.h.in (revision 5021)
+++ cctk_Config.h.in (working copy)
@@ -376,6 +376,7 @@
# define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
#else
# define CCTK_BUILTIN_EXPECT(x,y) (x)
+# define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
#endif
/* Whether __builtin_unreachable exists. */
@@ -384,8 +385,15 @@
# define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
#else
# define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
+# define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
#endif
/* OpenMP collapse clause */
#if (defined CCTK_DISABLE_OMP_COLLAPSE || \
(defined __IBMC__ && defined _ARCH_450D) || \
@@ -585,6 +593,7 @@
# define CCTK_BUILTIN_EXPECT(x,y) __builtin_expect(x,y)
#else
# define CCTK_BUILTIN_EXPECT(x,y) (x)
+# define __builtin_expect(x,y) CCTK_BUILTIN_EXPECT(x,y)
#endif
/* Whether __builtin_unreachable exists. */
@@ -593,8 +602,15 @@
# define CCTK_BUILTIN_UNREACHABLE() __builtin_unreachable()
#else
# define CCTK_BUILTIN_UNREACHABLE() CCTK_Abort(0, 1)
+# define __builtin_unreachable() CCTK_BUILTIN_UNREACHABLE()
#endif
/* Whether static_assert exists. */
#undef HAVE_CCTK_CXX_STATIC_ASSERT
#ifdef HAVE_CCTK_CXX_STATIC_ASSERT
--
Ticket URL: <https://trac.einsteintoolkit.org/ticket/1379>
Einstein Toolkit <http://einsteintoolkit.org>
The Einstein Toolkit
More information about the Trac
mailing list