Skip to content

Commit

Permalink
word-at-a-time: provide generic big-endian zero_bytemask implementation
Browse files Browse the repository at this point in the history
Whilst architectures may be able to do better than this (which they can,
by simply defining their own macro), this is a generic stab at a
zero_bytemask implementation for the asm-generic, big-endian
word-at-a-time implementation.

On arm64, a clz instruction is used to implement the fls efficiently.

Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Will Deacon authored and Linus Torvalds committed Dec 12, 2013
1 parent a5c21dc commit 11ec50c
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions include/asm-generic/word-at-a-time.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,12 @@ static inline bool has_zero(unsigned long val, unsigned long *data, const struct
return (val + c->high_bits) & ~rhs;
}

#ifndef zero_bytemask
#ifdef CONFIG_64BIT
#define zero_bytemask(mask) (~0ul << fls64(mask))
#else
#define zero_bytemask(mask) (~0ul << fls(mask))
#endif /* CONFIG_64BIT */
#endif /* zero_bytemask */

#endif /* _ASM_WORD_AT_A_TIME_H */

0 comments on commit 11ec50c

Please sign in to comment.