From nobody Sun Feb 8 01:30:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1570448680; cv=none; d=zoho.com; s=zohoarc; b=oPbf5KAe7xZnvqKzFcCydc8h0tZbz9ZrCcBlrOWuD1fJIlv2dA2uOfSAU5OQC8R2mlbV9X35LnBYOJGTip172vH6e1T15BTT2aoA8zBoFWlT191UOuCe4V7b+SZC7J6PjGfkIVIshzNgJV940ezRdvwYRBGnzDjibDmCZRFxO5E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1570448680; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=jTvkR5JzmsqG1zwIdvTun6vjLFFjYvvh9sdIfJHj6rU=; b=NIU67jc0X2saT0ynBxMpFbS0vEK6TvXwbWfRsY1TcMqWbhkdwrdJ/W27ERs58C/w56V321U2RHghT4n7p2I0dMGTXc4VdU7F/9vgahMuxVJUO454UFcjmkwDMLOrIKMoVziWUDW3GG7JLEkX4OlbL3NPPfy6GbZQuM5i98R3nHc= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1570448680214556.6675770094323; Mon, 7 Oct 2019 04:44:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5502B356D3; Mon, 7 Oct 2019 11:44:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 080115DA8C; Mon, 7 Oct 2019 11:44:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3EFED1803518; Mon, 7 Oct 2019 11:44:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x97BiXuL008740 for ; Mon, 7 Oct 2019 07:44:33 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9CAE9196B2; Mon, 7 Oct 2019 11:44:33 +0000 (UTC) Received: from dhcp-16-231.lcy.redhat.com (unknown [10.42.16.231]) by smtp.corp.redhat.com (Postfix) with ESMTP id ED9C219D70; Mon, 7 Oct 2019 11:44:32 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Mon, 7 Oct 2019 12:44:24 +0100 Message-Id: <20191007114428.4033-2-berrange@redhat.com> In-Reply-To: <20191007114428.4033-1-berrange@redhat.com> References: <20191007114428.4033-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/5] build: remove all gnulib bit manipulation modules X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Mon, 07 Oct 2019 11:44:37 +0000 (UTC) We're using gnulib to get ffs, ffsl, rotl32, count_one_bits, and count_leading_zeros. Except for rotl32 they can all be replaced with gcc/clangs builtins. rotl32 is a one-line trivial function. Signed-off-by: Daniel P. Berrang=C3=A9 --- bootstrap.conf | 5 ----- src/conf/capabilities.c | 3 +-- src/conf/domain_conf.c | 1 - src/conf/snapshot_conf.c | 1 - src/internal.h | 10 ++++++++-- src/libxl/xen_common.c | 1 - src/util/virbitmap.c | 7 +++---- src/util/vircgroupv2.c | 2 +- src/util/virhashcode.c | 6 +++++- src/util/virhostcpu.c | 1 - src/util/virhostmem.c | 1 - src/util/virrandom.c | 4 +--- tools/vsh.c | 2 +- 13 files changed, 20 insertions(+), 24 deletions(-) diff --git a/bootstrap.conf b/bootstrap.conf index fe8f7fc9c3..7b20f1c371 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -22,7 +22,6 @@ accept areadlink base64 bind -bitrotate byteswap c-ctype c-strcase @@ -34,8 +33,6 @@ clock-time close connect configmake -count-leading-zeros -count-one-bits dirname-lgpl environ execinfo @@ -43,8 +40,6 @@ fclose fcntl fcntl-h fdatasync -ffs -ffsl fnmatch fsync getaddrinfo diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c index 1231b9727c..7419d9cfc8 100644 --- a/src/conf/capabilities.c +++ b/src/conf/capabilities.c @@ -21,7 +21,6 @@ =20 #include =20 -#include #include =20 #include "capabilities.h" @@ -1152,7 +1151,7 @@ virCapabilitiesFormatHostXML(virCapsHostPtr host, virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); while (pm) { - int bit =3D ffs(pm) - 1; + int bit =3D __builtin_ffs(pm) - 1; virBufferAsprintf(buf, "<%s/>\n", virCapsHostPMTargetTypeToString(bit)); pm &=3D ~(1U << bit); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5d090876f8..a53cd6a725 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -45,7 +45,6 @@ #include "virstoragefile.h" #include "virfile.h" #include "virbitmap.h" -#include "count-one-bits.h" #include "secret_conf.h" #include "netdev_vport_profile_conf.h" #include "netdev_bandwidth_conf.h" diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index 96ad8ca953..a77f521302 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -29,7 +29,6 @@ #include "internal.h" #include "virbitmap.h" #include "virbuffer.h" -#include "count-one-bits.h" #include "datatypes.h" #include "domain_conf.h" #include "virlog.h" diff --git a/src/internal.h b/src/internal.h index adc1e3f496..fc251067f0 100644 --- a/src/internal.h +++ b/src/internal.h @@ -27,6 +27,7 @@ #include #include #include +#include =20 #if STATIC_ANALYSIS # undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble. */ @@ -63,7 +64,6 @@ =20 #include "c-strcase.h" #include "ignore-value.h" -#include "count-leading-zeros.h" =20 /* String equality tests, suggested by Jim Meyering. */ #define STREQ(a, b) (strcmp(a, b) =3D=3D 0) @@ -493,6 +493,12 @@ } while (0) =20 =20 +/* Count leading zeros in an unsigned int. + * + * Wrapper needed as __builtin_clz is undefined if value is zero + */ +#define VIR_CLZ(value) \ + (value ? __builtin_clz(value) : (8 * sizeof(unsigned))) =20 /* divide value by size, rounding up */ #define VIR_DIV_UP(value, size) (((value) + (size) - 1) / (size)) @@ -504,7 +510,7 @@ * for 0 or number more than 2^31 (for 32bit unsigned int). */ #define VIR_ROUND_UP_POWER_OF_TWO(value) \ ((value) > 0 && (value) <=3D 1U << (sizeof(unsigned int) * 8 - 1) ? \ - 1U << (sizeof(unsigned int) * 8 - count_leading_zeros((value) - 1)) := 0) + 1U << (sizeof(unsigned int) * 8 - VIR_CLZ((value) - 1)) : 0) =20 =20 /* Specific error values for use in forwarding programs such as diff --git a/src/libxl/xen_common.c b/src/libxl/xen_common.c index d327f03d73..2680e88a60 100644 --- a/src/libxl/xen_common.c +++ b/src/libxl/xen_common.c @@ -31,7 +31,6 @@ #include "virconf.h" #include "viralloc.h" #include "viruuid.h" -#include "count-one-bits.h" #include "xenxs_private.h" #include "domain_conf.h" #include "virstring.h" diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index a61f4b2095..ed8f06acc7 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -27,7 +27,6 @@ #include "viralloc.h" #include "virbuffer.h" #include "c-ctype.h" -#include "count-one-bits.h" #include "virstring.h" #include "virutil.h" #include "virerror.h" @@ -1028,7 +1027,7 @@ virBitmapNextSetBit(virBitmapPtr bitmap, if (bits =3D=3D 0) return -1; =20 - return ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; + return __builtin_ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; } =20 =20 @@ -1127,7 +1126,7 @@ virBitmapNextClearBit(virBitmapPtr bitmap, if (bits =3D=3D 0) return -1; =20 - return ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; + return __builtin_ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; } =20 =20 @@ -1144,7 +1143,7 @@ virBitmapCountBits(virBitmapPtr bitmap) size_t ret =3D 0; =20 for (i =3D 0; i < bitmap->map_len; i++) - ret +=3D count_one_bits_l(bitmap->map[i]); + ret +=3D __builtin_popcountl(bitmap->map[i]); =20 return ret; } diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c index 143083e56f..ace04bba04 100644 --- a/src/util/vircgroupv2.c +++ b/src/util/vircgroupv2.c @@ -339,7 +339,7 @@ static int virCgroupV2GetAnyController(virCgroupPtr group) { /* The least significant bit is position 1. */ - return ffs(group->unified.controllers) - 1; + return __builtin_ffs(group->unified.controllers) - 1; } =20 =20 diff --git a/src/util/virhashcode.c b/src/util/virhashcode.c index 310ec891c8..98d5dceeba 100644 --- a/src/util/virhashcode.c +++ b/src/util/virhashcode.c @@ -28,7 +28,11 @@ #include =20 #include "virhashcode.h" -#include "bitrotate.h" + +static uint32_t rotl32(uint32_t x, int8_t r) +{ + return (x << r) | (x >> (32 - r)); +} =20 /* slower than original but handles platforms that do only aligned reads */ static inline uint32_t getblock(const uint8_t *p, int i) diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c index 8c00804b0e..83e4853006 100644 --- a/src/util/virhostcpu.c +++ b/src/util/virhostcpu.c @@ -44,7 +44,6 @@ #include "virhostcpupriv.h" #include "physmem.h" #include "virerror.h" -#include "count-one-bits.h" #include "intprops.h" #include "virarch.h" #include "virfile.h" diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c index 19cd282724..d16e0217e5 100644 --- a/src/util/virhostmem.c +++ b/src/util/virhostmem.c @@ -37,7 +37,6 @@ #include "virhostmem.h" #include "physmem.h" #include "virerror.h" -#include "count-one-bits.h" #include "virarch.h" #include "virfile.h" #include "virtypedparam.h" diff --git a/src/util/virrandom.c b/src/util/virrandom.c index 93c5bf3a2c..8dcab1ac47 100644 --- a/src/util/virrandom.c +++ b/src/util/virrandom.c @@ -20,7 +20,6 @@ =20 #include #include -#include #include #include #include @@ -32,7 +31,6 @@ =20 #include "virrandom.h" #include "virthread.h" -#include "count-one-bits.h" #include "virutil.h" #include "virerror.h" #include "virfile.h" @@ -97,7 +95,7 @@ double virRandom(void) uint32_t virRandomInt(uint32_t max) { if ((max & (max - 1)) =3D=3D 0) - return virRandomBits(ffs(max) - 1); + return virRandomBits(__builtin_ffs(max) - 1); =20 double val =3D virRandom(); return val * max; diff --git a/tools/vsh.c b/tools/vsh.c index 9bdd90e362..bf8b6b412b 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -555,7 +555,7 @@ vshCmddefGetData(const vshCmdDef *cmd, uint64_t *opts_n= eed_arg, return NULL; =20 /* Grab least-significant set bit */ - i =3D ffsl(*opts_need_arg) - 1; + i =3D __builtin_ffsl(*opts_need_arg) - 1; opt =3D &cmd->opts[i]; if (opt->type !=3D VSH_OT_ARGV) *opts_need_arg &=3D ~(1ULL << i); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list