mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-01-09 11:07:19 -03:00
whatever i implemented it anyway
This commit is contained in:
parent
f43c3b021e
commit
c9d018a253
3 changed files with 29 additions and 13 deletions
|
@ -399,7 +399,7 @@ ioutil.c.o: types.h ioutil.h
|
|||
keccak.c.o: types.h keccak.h
|
||||
main.c.o: types.h vec.h base32.h cpucount.h keccak.h ioutil.h common.h yaml.h
|
||||
main.c.o: filters.h worker.h filters_inc.inc.h filters_main.inc.h
|
||||
main.c.o: filters_common.inc.h
|
||||
main.c.o: filters_common.inc.h ifilter_bitsum.h
|
||||
test_base16.c.o: types.h base16.h
|
||||
test_base32.c.o: types.h base32.h
|
||||
test_base64.c.o: types.h base64.h
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
#include "filters_common.inc.h"
|
||||
#include "ifilter_bitsum.h"
|
||||
|
||||
#ifdef INTFILTER
|
||||
|
||||
|
@ -80,18 +81,6 @@ static void ifilter_expand(
|
|||
}
|
||||
}
|
||||
|
||||
static IFT ifilter_bitsum(IFT x)
|
||||
{
|
||||
if (sizeof(IFT) == 16)
|
||||
return (((IFT) 1) <<
|
||||
(__builtin_popcountll((unsigned long long) (x >> (sizeof(IFT) * 8 / 2))) +
|
||||
__builtin_popcountll((unsigned long long) x))) - 1;
|
||||
if (sizeof(IFT) == 8)
|
||||
return (((IFT) 1) << __builtin_popcountll((unsigned long long) x)) - 1;
|
||||
|
||||
return (((IFT) 1) << __builtin_popcount((unsigned int) x)) - 1;
|
||||
}
|
||||
|
||||
static inline void ifilter_addflatten(struct intfilter *ifltr,IFT mask)
|
||||
{
|
||||
if (VEC_LENGTH(filters) == 0) {
|
||||
|
|
27
ifilter_bitsum.h
Normal file
27
ifilter_bitsum.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
#ifdef __GNUC__
|
||||
|
||||
static IFT ifilter_bitsum(IFT x)
|
||||
{
|
||||
if (sizeof(IFT) == 16)
|
||||
return (((IFT) 1) <<
|
||||
(__builtin_popcountll((unsigned long long) (x >> (sizeof(IFT) * 8 / 2))) +
|
||||
__builtin_popcountll((unsigned long long) x))) - 1;
|
||||
if (sizeof(IFT) == 8)
|
||||
return (((IFT) 1) << __builtin_popcountll((unsigned long long) x)) - 1;
|
||||
|
||||
return (((IFT) 1) << __builtin_popcount((unsigned int) x)) - 1;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static IFT ifilter_bitsum(IFT x)
|
||||
{
|
||||
int v = 0;
|
||||
while (x != 0) {
|
||||
x &= x - 1;
|
||||
v++;
|
||||
}
|
||||
return (((IFT) 1) << v) - 1;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue