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

fls.h (683B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASM_GENERIC_BITOPS_FLS_H_
      3#define _ASM_GENERIC_BITOPS_FLS_H_
      4
      5/**
      6 * fls - find last (most-significant) bit set
      7 * @x: the word to search
      8 *
      9 * This is defined the same way as ffs.
     10 * Note fls(0) = 0, fls(1) = 1, fls(0x80000000) = 32.
     11 */
     12
     13static __always_inline int fls(unsigned int x)
     14{
     15	int r = 32;
     16
     17	if (!x)
     18		return 0;
     19	if (!(x & 0xffff0000u)) {
     20		x <<= 16;
     21		r -= 16;
     22	}
     23	if (!(x & 0xff000000u)) {
     24		x <<= 8;
     25		r -= 8;
     26	}
     27	if (!(x & 0xf0000000u)) {
     28		x <<= 4;
     29		r -= 4;
     30	}
     31	if (!(x & 0xc0000000u)) {
     32		x <<= 2;
     33		r -= 2;
     34	}
     35	if (!(x & 0x80000000u)) {
     36		x <<= 1;
     37		r -= 1;
     38	}
     39	return r;
     40}
     41
     42#endif /* _ASM_GENERIC_BITOPS_FLS_H_ */