cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

const_hweight.h (1711B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_
      3#define _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_
      4
      5/*
      6 * Compile time versions of __arch_hweightN()
      7 */
      8#define __const_hweight8(w)		\
      9	((unsigned int)			\
     10	 ((!!((w) & (1ULL << 0))) +	\
     11	  (!!((w) & (1ULL << 1))) +	\
     12	  (!!((w) & (1ULL << 2))) +	\
     13	  (!!((w) & (1ULL << 3))) +	\
     14	  (!!((w) & (1ULL << 4))) +	\
     15	  (!!((w) & (1ULL << 5))) +	\
     16	  (!!((w) & (1ULL << 6))) +	\
     17	  (!!((w) & (1ULL << 7)))))
     18
     19#define __const_hweight16(w) (__const_hweight8(w)  + __const_hweight8((w)  >> 8 ))
     20#define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
     21#define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
     22
     23/*
     24 * Generic interface.
     25 */
     26#define hweight8(w)  (__builtin_constant_p(w) ? __const_hweight8(w)  : __arch_hweight8(w))
     27#define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w))
     28#define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w))
     29#define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
     30
     31/*
     32 * Interface for known constant arguments
     33 */
     34#define HWEIGHT8(w)  (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight8(w))
     35#define HWEIGHT16(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight16(w))
     36#define HWEIGHT32(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight32(w))
     37#define HWEIGHT64(w) (BUILD_BUG_ON_ZERO(!__builtin_constant_p(w)) + __const_hweight64(w))
     38
     39/*
     40 * Type invariant interface to the compile time constant hweight functions.
     41 */
     42#define HWEIGHT(w)   HWEIGHT64((u64)w)
     43
     44#endif /* _ASM_GENERIC_BITOPS_CONST_HWEIGHT_H_ */