summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2020-04-17 12:10:00 +0200
committerStephan Bergmann <sbergman@redhat.com>2020-04-17 15:24:07 +0200
commit870ab3b8492fa7d42c56ca09884811fef1695d28 (patch)
tree6d5bc07f7e443709eeb36652141b733f848794ce /sal
parent0a0c10c0502906bebf9ea8c732d63809d5080dd6 (diff)
Just use __builtin_ffs on GCC and Clang
GCC appears to support it at least since <https://gcc.gnu.org/git/ ?p=gcc.git;a=commit;h=51e2940139d5e3e86590f6e6802ffc3f3010be5b> "Initial revision" in 1992, and Clang appears to support it since <https://github.com/ llvm/llvm-project/commit/d93abc3bb0acdd430839abdd67bd3920fee87bbc> "Implement ffs, parity, and popcount builtins" in Clang 2.4. (And if a build used a compiler that does not support it, there would be no guarantee that it would support strings.h function ffs from X/Open System Interfaces, either.) Introducing HAVE_GCC_BUILTIN_FFS in 334a9f16cd1d1f9694f885c759903a41aa3d4833 "tdf#113211: fix calculations with big integers" appears to be due to a misguided recommendation at <https://gerrit.libreoffice.org/c/core/+/43477/4# message-899806c724fbdcece0ea9438514a6a5db6a2e645>. Change-Id: Ib6ee6de548172b3aae25483d03efb86620133933 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92421 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'sal')
-rw-r--r--sal/rtl/math.cxx11
1 files changed, 2 insertions, 9 deletions
diff --git a/sal/rtl/math.cxx b/sal/rtl/math.cxx
index 099cd3d60578..981009aa036c 100644
--- a/sal/rtl/math.cxx
+++ b/sal/rtl/math.cxx
@@ -19,7 +19,6 @@
#include <rtl/math.h>
-#include <config_global.h>
#include <o3tl/safeint.hxx>
#include <osl/diagnose.h>
#include <rtl/alloc.h>
@@ -43,10 +42,6 @@
#include <dtoa.h>
-#if !HAVE_GCC_BUILTIN_FFS && !defined _WIN32
- #include <strings.h>
-#endif
-
static int const n10Count = 16;
static double const n10s[2][n10Count] = {
{ 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8,
@@ -183,14 +178,12 @@ bool isRepresentableInteger(double fAbsValue)
// Returns 1-based index of least significant bit in a number, or zero if number is zero
int findFirstSetBit(unsigned n)
{
-#if HAVE_GCC_BUILTIN_FFS
- return __builtin_ffs(n);
-#elif defined _WIN32
+#if defined _WIN32
unsigned long pos;
unsigned char bNonZero = _BitScanForward(&pos, n);
return (bNonZero == 0) ? 0 : pos + 1;
#else
- return ffs(n);
+ return __builtin_ffs(n);
#endif
}