1 | */* Count leading and trailing zeros functions* |

2 | * ** |

3 | * * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.* |

4 | * * Written by David Howells (dhowells@redhat.com)* |

5 | * ** |

6 | * * This program is free software; you can redistribute it and/or* |

7 | * * modify it under the terms of the GNU General Public Licence* |

8 | * * as published by the Free Software Foundation; either version* |

9 | * * 2 of the Licence, or (at your option) any later version.* |

10 | * */* |

11 | |

12 | __#ifndef _LINUX_BITOPS_COUNT_ZEROS_H___ |

13 | __#define _LINUX_BITOPS_COUNT_ZEROS_H___ |

14 | |

15 | __#include <asm/bitops.h>__ |

16 | |

17 | */*** |

18 | * * count_leading_zeros - Count the number of zeros from the MSB back* |

19 | * * @x: The value* |

20 | * ** |

21 | * * Count the number of leading zeros from the MSB going towards the LSB in @x.* |

22 | * ** |

23 | * * If the MSB of @x is set, the result is 0.* |

24 | * * If only the LSB of @x is set, then the result is BITS_PER_LONG-1.* |

25 | * * If @x is 0 then the result is COUNT_LEADING_ZEROS_0.* |

26 | * */* |

27 | *static* **inline** *int* count_leading_zeros(*unsigned* *long* x) |

28 | { |

29 | **if** (**sizeof**(x) == `4`) |

30 | **return** BITS_PER_LONG - fls(x); |

31 | **else** |

32 | **return** BITS_PER_LONG - fls64(x); |

33 | } |

34 | |

35 | __#define COUNT_LEADING_ZEROS_0 BITS_PER_LONG__ |

36 | |

37 | */*** |

38 | * * count_trailing_zeros - Count the number of zeros from the LSB forwards* |

39 | * * @x: The value* |

40 | * ** |

41 | * * Count the number of trailing zeros from the LSB going towards the MSB in @x.* |

42 | * ** |

43 | * * If the LSB of @x is set, the result is 0.* |

44 | * * If only the MSB of @x is set, then the result is BITS_PER_LONG-1.* |

45 | * * If @x is 0 then the result is COUNT_TRAILING_ZEROS_0.* |

46 | * */* |

47 | *static* **inline** *int* count_trailing_zeros(*unsigned* *long* x) |

48 | { |

49 | __#define COUNT_TRAILING_ZEROS_0 (-1)__ |

50 | |

51 | **if** (**sizeof**(x) == `4`) |

52 | **return** ffs(x); |

53 | **else** |

54 | **return** (x != `0`) ? __ffs(x) : COUNT_TRAILING_ZEROS_0; |

55 | } |

56 | |

57 | __#endif /* _LINUX_BITOPS_COUNT_ZEROS_H_ */__ |

58 | |