diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2019-08-27 04:23:44 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2019-08-27 04:24:09 -0700 |
commit | 56663b473535ad7e6259606297a7e1f182deca9a (patch) | |
tree | 106e4056aa46284d5fae79537b3a56c0f6551a8a /lib | |
parent | 4c352322c5f62a22a8a238071bde26c9f482fea2 (diff) | |
download | gnulib-56663b473535ad7e6259606297a7e1f182deca9a.tar.gz |
Speed up INT_MULTIPLY_WRAPV on macOS
Assume that __builtin_mul_overflow works OK with Clang on macOS.
Mattias Engdegård says it’s safe to assume the relevant library
is always available there.
* lib/intprops.h (_GL_HAS___builtin_mul_overflow):
New temporary internal macro.
(_GL_HAS_BUILTIN_MUL_OVERFLOW):
No need to work around the Clang bug on macOS.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/intprops.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/intprops.h b/lib/intprops.h index ffd7370284..2cb6ada51b 100644 --- a/lib/intprops.h +++ b/lib/intprops.h @@ -31,6 +31,7 @@ # else # define _GL_HAS___builtin_add_overflow 0 # endif +# define _GL_HAS___builtin_mul_overflow _GL_HAS___builtin_add_overflow # define _GL_TEMPDEF___has_builtin #endif @@ -240,12 +241,13 @@ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif -/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ -#ifdef __clang__ -/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ -# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 +/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. + Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ +#if (__has_builtin (__builtin_mul_overflow) \ + && (!defined __clang__ || (defined __APPLE__ && defined __MACH__))) +# define _GL_HAS_BUILTIN_MUL_OVERFLOW 1 #else -# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW +# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for @@ -589,6 +591,7 @@ #ifdef _GL_TEMPDEF___has_builtin # undef __has_builtin # undef _GL_HAS___builtin_add_overflow +# undef _GL_HAS___builtin_mul_overflow # undef _GL_TEMPDEF___has_builtin #endif |