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

fls64.h (860B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_GENERIC_BITOPS_FLS64_H_
      3#define _ASM_GENERIC_BITOPS_FLS64_H_
      4
      5#include <asm/types.h>
      6
      7/**
      8 * fls64 - find last set bit in a 64-bit word
      9 * @x: the word to search
     10 *
     11 * This is defined in a similar way as the libc and compiler builtin
     12 * ffsll, but returns the position of the most significant set bit.
     13 *
     14 * fls64(value) returns 0 if value is 0 or the position of the last
     15 * set bit if value is nonzero. The last (most significant) bit is
     16 * at position 64.
     17 */
     18#if BITS_PER_LONG == 32
     19static __always_inline int fls64(__u64 x)
     20{
     21	__u32 h = x >> 32;
     22	if (h)
     23		return fls(h) + 32;
     24	return fls(x);
     25}
     26#elif BITS_PER_LONG == 64
     27static __always_inline int fls64(__u64 x)
     28{
     29	if (x == 0)
     30		return 0;
     31	return __fls(x) + 1;
     32}
     33#else
     34#error BITS_PER_LONG not 32 or 64
     35#endif
     36
     37#endif /* _ASM_GENERIC_BITOPS_FLS64_H_ */