>From 991c85087796af881057deffa85c0c8e99d76167 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 27 Aug 2019 04:23:44 -0700 Subject: [PATCH] Speed up INT_MULTIPLY_WRAPV on macOS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- ChangeLog | 11 +++++++++++ lib/intprops.h | 13 ++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6f5a096a..9976e1833 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2019-08-27 Paul Eggert + + 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 intprops.h, verify.h: port better to clang diff --git a/lib/intprops.h b/lib/intprops.h index ffd737028..2cb6ada51 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 . */ -# 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 . */ +#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 -- 2.17.1