From 092b6d4a98ea7950eb5d3631bb0d02cd761f62d8 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 9 Jun 2022 16:04:11 -0400 Subject: [PATCH] libroot: Replace custom ffs implementation with musl's. It already has a per-arch implementation or a fallback in musl's own arch_atomic.h, which we already imported so we might as well leverage it. --- src/system/libroot/posix/musl/misc/Jamfile | 2 ++ src/system/libroot/posix/musl/misc/ffs.c | 6 ++++++ src/system/libroot/posix/string/Jamfile | 1 - src/system/libroot/posix/string/ffs.cpp | 24 ---------------------- 4 files changed, 8 insertions(+), 25 deletions(-) create mode 100644 src/system/libroot/posix/musl/misc/ffs.c delete mode 100644 src/system/libroot/posix/string/ffs.cpp diff --git a/src/system/libroot/posix/musl/misc/Jamfile b/src/system/libroot/posix/musl/misc/Jamfile index 18e9124faf..739adabb61 100644 --- a/src/system/libroot/posix/musl/misc/Jamfile +++ b/src/system/libroot/posix/musl/misc/Jamfile @@ -2,6 +2,7 @@ SubDir HAIKU_TOP src system libroot posix musl misc ; SubDirSysHdrs [ FDirName $(SUBDIR) .. include ] ; UseHeaders [ FDirName $(SUBDIR) .. internal ] ; +UseHeaders [ FDirName $(SUBDIR) .. arch $(TARGET_KERNEL_ARCH_DIR) ] ; local architectureObject ; for architectureObject in [ MultiArchSubDirSetup ] { @@ -10,6 +11,7 @@ for architectureObject in [ MultiArchSubDirSetup ] { MergeObject <$(architecture)>posix_musl_misc.o : a64l.c + ffs.c ; } } diff --git a/src/system/libroot/posix/musl/misc/ffs.c b/src/system/libroot/posix/musl/misc/ffs.c new file mode 100644 index 0000000000..240b3a101d --- /dev/null +++ b/src/system/libroot/posix/musl/misc/ffs.c @@ -0,0 +1,6 @@ +#include "atomic.h" + +int ffs(int i) +{ + return i ? a_ctz_l(i)+1 : 0; +} diff --git a/src/system/libroot/posix/string/Jamfile b/src/system/libroot/posix/string/Jamfile index 609c0fdb4c..105ff21c63 100644 --- a/src/system/libroot/posix/string/Jamfile +++ b/src/system/libroot/posix/string/Jamfile @@ -20,7 +20,6 @@ for architectureObject in [ MultiArchSubDirSetup ] { bcmp.c bcopy.c bzero.c - ffs.cpp memccpy.c memchr.c memcmp.c diff --git a/src/system/libroot/posix/string/ffs.cpp b/src/system/libroot/posix/string/ffs.cpp deleted file mode 100644 index 0005f34afe..0000000000 --- a/src/system/libroot/posix/string/ffs.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2020, Adrien Destugues . - * Distributed under the terms of the MIT License. - */ - - -// find first (least significant) set bit -extern "C" int -ffs(int value) -{ -#ifdef __riscv - // TODO: As of this writing, gcc 8.x seems - // to have an issue with infinite recursion. - // Re-examine in future GCC updates - int bit; - if (value == 0) - return 0; - for (bit = 1; !(value & 1); bit++) - value >>= 1; - return bit; -#else - return __builtin_ffs(value); -#endif -}