brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · a04f266 Raw
76 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (c) 2000,2002,2005 Silicon Graphics, Inc.4 * All Rights Reserved.5 */6#ifndef __XFS_BIT_H__7#define	__XFS_BIT_H__8 9/*10 * XFS bit manipulation routines.11 */12 13/*14 * masks with n high/low bits set, 64-bit values15 */16static inline uint64_t xfs_mask64hi(int n)17{18	return (uint64_t)-1 << (64 - (n));19}20static inline uint32_t xfs_mask32lo(int n)21{22	return ((uint32_t)1 << (n)) - 1;23}24static inline uint64_t xfs_mask64lo(int n)25{26	return ((uint64_t)1 << (n)) - 1;27}28 29/* Get high bit set out of 32-bit argument, -1 if none set */30static inline int xfs_highbit32(uint32_t v)31{32	return fls(v) - 1;33}34 35/* Get high bit set out of 64-bit argument, -1 if none set */36static inline int xfs_highbit64(uint64_t v)37{38	return fls64(v) - 1;39}40 41/* Get low bit set out of 32-bit argument, -1 if none set */42static inline int xfs_lowbit32(uint32_t v)43{44	return ffs(v) - 1;45}46 47/* Get low bit set out of 64-bit argument, -1 if none set */48static inline int xfs_lowbit64(uint64_t v)49{50	uint32_t	w = (uint32_t)v;51	int		n = 0;52 53	if (w) {	/* lower bits */54		n = ffs(w);55	} else {	/* upper bits */56		w = (uint32_t)(v >> 32);57		if (w) {58			n = ffs(w);59			if (n)60				n += 32;61		}62	}63	return n - 1;64}65 66/* Return whether bitmap is empty (1 == empty) */67extern int xfs_bitmap_empty(uint *map, uint size);68 69/* Count continuous one bits in map starting with start_bit */70extern int xfs_contig_bits(uint *map, uint size, uint start_bit);71 72/* Find next set bit in map */73extern int xfs_next_bit(uint *map, uint size, uint start_bit);74 75#endif	/* __XFS_BIT_H__ */76