summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-08-27 04:23:44 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2019-08-27 04:24:09 -0700
commit56663b473535ad7e6259606297a7e1f182deca9a (patch)
tree106e4056aa46284d5fae79537b3a56c0f6551a8a
parent4c352322c5f62a22a8a238071bde26c9f482fea2 (diff)
downloadgnulib-56663b473535ad7e6259606297a7e1f182deca9a.tar.gz
gnulib-56663b473535ad7e6259606297a7e1f182deca9a.tar.bz2
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.
-rw-r--r--ChangeLog11
-rw-r--r--lib/intprops.h13
2 files changed, 19 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index e6f5a096ad..9976e1833b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-08-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ 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.
+
2019-08-25 Paul Eggert <eggert@cs.ucla.edu>
intprops.h, verify.h: port better to clang
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

Return to:

Send suggestions and report system problems to the System administrator.