提交 d5d6dbcf 编写于 作者: D Daniel P. Berrangé

build: remove all gnulib bit manipulation modules

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.
Reviewed-by: NJán Tomko <jtomko@redhat.com>
Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 5be0d28b
...@@ -22,7 +22,6 @@ accept ...@@ -22,7 +22,6 @@ accept
areadlink areadlink
base64 base64
bind bind
bitrotate
byteswap byteswap
c-ctype c-ctype
c-strcase c-strcase
...@@ -34,8 +33,6 @@ clock-time ...@@ -34,8 +33,6 @@ clock-time
close close
connect connect
configmake configmake
count-leading-zeros
count-one-bits
dirname-lgpl dirname-lgpl
environ environ
execinfo execinfo
...@@ -43,8 +40,6 @@ fclose ...@@ -43,8 +40,6 @@ fclose
fcntl fcntl
fcntl-h fcntl-h
fdatasync fdatasync
ffs
ffsl
fnmatch fnmatch
fsync fsync
getaddrinfo getaddrinfo
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <config.h> #include <config.h>
#include <strings.h>
#include <unistd.h> #include <unistd.h>
#include "capabilities.h" #include "capabilities.h"
...@@ -1152,7 +1151,7 @@ virCapabilitiesFormatHostXML(virCapsHostPtr host, ...@@ -1152,7 +1151,7 @@ virCapabilitiesFormatHostXML(virCapsHostPtr host,
virBufferAddLit(buf, "<power_management>\n"); virBufferAddLit(buf, "<power_management>\n");
virBufferAdjustIndent(buf, 2); virBufferAdjustIndent(buf, 2);
while (pm) { while (pm) {
int bit = ffs(pm) - 1; int bit = __builtin_ffs(pm) - 1;
virBufferAsprintf(buf, "<%s/>\n", virBufferAsprintf(buf, "<%s/>\n",
virCapsHostPMTargetTypeToString(bit)); virCapsHostPMTargetTypeToString(bit));
pm &= ~(1U << bit); pm &= ~(1U << bit);
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
#include "virstoragefile.h" #include "virstoragefile.h"
#include "virfile.h" #include "virfile.h"
#include "virbitmap.h" #include "virbitmap.h"
#include "count-one-bits.h"
#include "secret_conf.h" #include "secret_conf.h"
#include "netdev_vport_profile_conf.h" #include "netdev_vport_profile_conf.h"
#include "netdev_bandwidth_conf.h" #include "netdev_bandwidth_conf.h"
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include "internal.h" #include "internal.h"
#include "virbitmap.h" #include "virbitmap.h"
#include "virbuffer.h" #include "virbuffer.h"
#include "count-one-bits.h"
#include "datatypes.h" #include "datatypes.h"
#include "domain_conf.h" #include "domain_conf.h"
#include "virlog.h" #include "virlog.h"
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
#if STATIC_ANALYSIS #if STATIC_ANALYSIS
# undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble. */ # undef NDEBUG /* Don't let a prior NDEBUG definition cause trouble. */
...@@ -63,7 +64,6 @@ ...@@ -63,7 +64,6 @@
#include "c-strcase.h" #include "c-strcase.h"
#include "ignore-value.h" #include "ignore-value.h"
#include "count-leading-zeros.h"
/* String equality tests, suggested by Jim Meyering. */ /* String equality tests, suggested by Jim Meyering. */
#define STREQ(a, b) (strcmp(a, b) == 0) #define STREQ(a, b) (strcmp(a, b) == 0)
...@@ -493,6 +493,12 @@ ...@@ -493,6 +493,12 @@
} while (0) } while (0)
/* 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)))
/* divide value by size, rounding up */ /* divide value by size, rounding up */
#define VIR_DIV_UP(value, size) (((value) + (size) - 1) / (size)) #define VIR_DIV_UP(value, size) (((value) + (size) - 1) / (size))
...@@ -504,7 +510,7 @@ ...@@ -504,7 +510,7 @@
* for 0 or number more than 2^31 (for 32bit unsigned int). */ * for 0 or number more than 2^31 (for 32bit unsigned int). */
#define VIR_ROUND_UP_POWER_OF_TWO(value) \ #define VIR_ROUND_UP_POWER_OF_TWO(value) \
((value) > 0 && (value) <= 1U << (sizeof(unsigned int) * 8 - 1) ? \ ((value) > 0 && (value) <= 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)
/* Specific error values for use in forwarding programs such as /* Specific error values for use in forwarding programs such as
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include "virconf.h" #include "virconf.h"
#include "viralloc.h" #include "viralloc.h"
#include "viruuid.h" #include "viruuid.h"
#include "count-one-bits.h"
#include "xenxs_private.h" #include "xenxs_private.h"
#include "domain_conf.h" #include "domain_conf.h"
#include "virstring.h" #include "virstring.h"
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "viralloc.h" #include "viralloc.h"
#include "virbuffer.h" #include "virbuffer.h"
#include "c-ctype.h" #include "c-ctype.h"
#include "count-one-bits.h"
#include "virstring.h" #include "virstring.h"
#include "virutil.h" #include "virutil.h"
#include "virerror.h" #include "virerror.h"
...@@ -1028,7 +1027,7 @@ virBitmapNextSetBit(virBitmapPtr bitmap, ...@@ -1028,7 +1027,7 @@ virBitmapNextSetBit(virBitmapPtr bitmap,
if (bits == 0) if (bits == 0)
return -1; return -1;
return ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; return __builtin_ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT;
} }
...@@ -1127,7 +1126,7 @@ virBitmapNextClearBit(virBitmapPtr bitmap, ...@@ -1127,7 +1126,7 @@ virBitmapNextClearBit(virBitmapPtr bitmap,
if (bits == 0) if (bits == 0)
return -1; return -1;
return ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT; return __builtin_ffsl(bits) - 1 + nl * VIR_BITMAP_BITS_PER_UNIT;
} }
...@@ -1144,7 +1143,7 @@ virBitmapCountBits(virBitmapPtr bitmap) ...@@ -1144,7 +1143,7 @@ virBitmapCountBits(virBitmapPtr bitmap)
size_t ret = 0; size_t ret = 0;
for (i = 0; i < bitmap->map_len; i++) for (i = 0; i < bitmap->map_len; i++)
ret += count_one_bits_l(bitmap->map[i]); ret += __builtin_popcountl(bitmap->map[i]);
return ret; return ret;
} }
......
...@@ -339,7 +339,7 @@ static int ...@@ -339,7 +339,7 @@ static int
virCgroupV2GetAnyController(virCgroupPtr group) virCgroupV2GetAnyController(virCgroupPtr group)
{ {
/* The least significant bit is position 1. */ /* The least significant bit is position 1. */
return ffs(group->unified.controllers) - 1; return __builtin_ffs(group->unified.controllers) - 1;
} }
......
...@@ -28,7 +28,11 @@ ...@@ -28,7 +28,11 @@
#include <config.h> #include <config.h>
#include "virhashcode.h" #include "virhashcode.h"
#include "bitrotate.h"
static uint32_t rotl32(uint32_t x, int8_t r)
{
return (x << r) | (x >> (32 - r));
}
/* slower than original but handles platforms that do only aligned reads */ /* slower than original but handles platforms that do only aligned reads */
static inline uint32_t getblock(const uint8_t *p, int i) static inline uint32_t getblock(const uint8_t *p, int i)
......
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
#include "virhostcpupriv.h" #include "virhostcpupriv.h"
#include "physmem.h" #include "physmem.h"
#include "virerror.h" #include "virerror.h"
#include "count-one-bits.h"
#include "intprops.h" #include "intprops.h"
#include "virarch.h" #include "virarch.h"
#include "virfile.h" #include "virfile.h"
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include "virhostmem.h" #include "virhostmem.h"
#include "physmem.h" #include "physmem.h"
#include "virerror.h" #include "virerror.h"
#include "count-one-bits.h"
#include "virarch.h" #include "virarch.h"
#include "virfile.h" #include "virfile.h"
#include "virtypedparam.h" #include "virtypedparam.h"
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <inttypes.h> #include <inttypes.h>
#include <math.h> #include <math.h>
#include <strings.h>
#include <time.h> #include <time.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -32,7 +31,6 @@ ...@@ -32,7 +31,6 @@
#include "virrandom.h" #include "virrandom.h"
#include "virthread.h" #include "virthread.h"
#include "count-one-bits.h"
#include "virutil.h" #include "virutil.h"
#include "virerror.h" #include "virerror.h"
#include "virfile.h" #include "virfile.h"
...@@ -97,7 +95,7 @@ double virRandom(void) ...@@ -97,7 +95,7 @@ double virRandom(void)
uint32_t virRandomInt(uint32_t max) uint32_t virRandomInt(uint32_t max)
{ {
if ((max & (max - 1)) == 0) if ((max & (max - 1)) == 0)
return virRandomBits(ffs(max) - 1); return virRandomBits(__builtin_ffs(max) - 1);
double val = virRandom(); double val = virRandom();
return val * max; return val * max;
......
...@@ -555,7 +555,7 @@ vshCmddefGetData(const vshCmdDef *cmd, uint64_t *opts_need_arg, ...@@ -555,7 +555,7 @@ vshCmddefGetData(const vshCmdDef *cmd, uint64_t *opts_need_arg,
return NULL; return NULL;
/* Grab least-significant set bit */ /* Grab least-significant set bit */
i = ffsl(*opts_need_arg) - 1; i = __builtin_ffsl(*opts_need_arg) - 1;
opt = &cmd->opts[i]; opt = &cmd->opts[i];
if (opt->type != VSH_OT_ARGV) if (opt->type != VSH_OT_ARGV)
*opts_need_arg &= ~(1ULL << i); *opts_need_arg &= ~(1ULL << i);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册