[PROPOSAL] Add `FiniteBits(count{Leading,Trailing}Zeros)`
Carter Schonwald
carter.schonwald at gmail.com
Fri Aug 15 22:27:44 UTC 2014
+1
On Fri, Aug 15, 2014 at 11:26 AM, Edward Kmett <ekmett at gmail.com> wrote:
> A very enthusiastic +1 from me. I'll finally be able to drop custom
> foreign prims from my own code.
>
>
> On Fri, Aug 15, 2014 at 4:22 AM, Herbert Valerio Riedel <hvr at gnu.org>
> wrote:
>
>> 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
>>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140815/64d29066/attachment.html>
More information about the Libraries
mailing list