forked from Qortal/Brooklyn
* 0day explit mitigation * Memory corruption prevention * Privilege escalation prevention * Buffer over flow prevention * File System corruption defense * Thread escape prevention This may very well be the most intensive inclusion to BrooklynR. This will not be part of an x86 suite nor it will be released as tool kit. The security core toolkit will remain part of kernel base.
44 lines
1.6 KiB
C
44 lines
1.6 KiB
C
#ifndef _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_
|
|
#define _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_
|
|
|
|
/*
|
|
* Compile time versions of __arch_hweightN()
|
|
*/
|
|
#define __const_hweight8(w) \
|
|
((unsigned int) \
|
|
((!!((w) & (1ULL << 0))) + \
|
|
(!!((w) & (1ULL << 1))) + \
|
|
(!!((w) & (1ULL << 2))) + \
|
|
(!!((w) & (1ULL << 3))) + \
|
|
(!!((w) & (1ULL << 4))) + \
|
|
(!!((w) & (1ULL << 5))) + \
|
|
(!!((w) & (1ULL << 6))) + \
|
|
(!!((w) & (1ULL << 7)))))
|
|
|
|
#define __const_hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8 ))
|
|
#define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
|
|
#define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
|
|
|
|
/*
|
|
* Generic interface.
|
|
*/
|
|
#define hweight8(w) (__builtin_constant_p(w) ? __const_hweight8(w) : __arch_hweight8(w))
|
|
#define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w))
|
|
#define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w))
|
|
#define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
|
|
|
|
/*
|
|
* Interface for known constant arguments
|
|
*/
|
|
#define HWEIGHT8(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight8(w))
|
|
#define HWEIGHT16(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight16(w))
|
|
#define HWEIGHT32(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight32(w))
|
|
#define HWEIGHT64(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight64(w))
|
|
|
|
/*
|
|
* Type invariant interface to the compile time constant hweight functions.
|
|
*/
|
|
#define HWEIGHT(w) HWEIGHT64((u64)w)
|
|
|
|
#endif /* _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ */
|