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
|
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: 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.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_base16.c.o: types.h base16.h
|
||||||
test_base32.c.o: types.h base32.h
|
test_base32.c.o: types.h base32.h
|
||||||
test_base64.c.o: types.h base64.h
|
test_base64.c.o: types.h base64.h
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
#include "filters_common.inc.h"
|
#include "filters_common.inc.h"
|
||||||
|
#include "ifilter_bitsum.h"
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#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)
|
static inline void ifilter_addflatten(struct intfilter *ifltr,IFT mask)
|
||||||
{
|
{
|
||||||
if (VEC_LENGTH(filters) == 0) {
|
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