[PROPOSAL] Add `FiniteBits(count{Leading,Trailing}Zeros)`

Milan Straka fox at ucw.cz
Fri Aug 15 09:01:12 UTC 2014


Hi all,

+1 here.

Cheers,
Milan

> -----Original message-----
> From: Herbert Valerio Riedel <hvr at gnu.org>
> Sent: 15 Aug 2014, 10:22
>
> Hello *,
> 
> As GHC 7.10.1 will have support for new assembler-optimized CLZ & CTZ[1]
> primops[2], it'd be useful to provide also a convenient high-level
> interface to avoid having to work with -XMagicHash and unboxed values.
> 
> To this end, I hereby propose to add two new methods to the 'FiniteBits'
> class, specifically
> 
> 
>   class Bits b => FiniteBits b where
>     {- ... -}
> 
>     countLeadingZeros :: b -> Int
>     countLeadingZeros x = (w-1) - go (w-1)
>       where
>         go i | i < 0       = i -- no bit set
>              | testBit x i = i
>              | otherwise   = go (i-1)
> 
>         w = finiteBitSize x
> 
>     countTrailingZeros :: b -> Int
>     countTrailingZeros x = go 0
>       where
>         go i | i >= w      = i
>              | testBit x i = i
>              | otherwise   = go (i+1)
> 
>         w = finiteBitSize x
> 
> 
> The full patch (including Haddock doc-strings) is available for code
> review at
> 
>   https://phabricator.haskell.org/D158
> 
> I suggest to try to keep the discussion/voting/bikeshedding about the
> proposal proper here (including any bike-shedding about naming). At same
> time, I'd like to invite you to try out the Phab code-revision tool[3]
> for pointing-out/discussing technical issues with the proposed patch.
> 
> 
> Cheers,
>   hvr
> 
>  [1]: http://en.wikipedia.org/wiki/Find_first_set provides a good
>       overview why CLZ/CTZ are desirable primitive operations.
> 
>  [2]: http://git.haskell.org/ghc.git/commit/e0c1767d0ea8d12e0a4badf43682a08784e379c6
> 
>  [3]: Phab code-revisions allow you to directly annotate code-fragments.
>       However, after having written inline annotations, you have to actually
>       submit those by submitting a non-inline (possibly empty) comment
>       (see bottom of that page) to make them visible for everyone.
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
> 


More information about the Libraries mailing list