[GHC] #14818: Provide highestOneBit function in Data.Bits module

GHC ghc-devs at haskell.org
Sun Feb 18 15:47:09 UTC 2018


#14818: Provide highestOneBit function in Data.Bits module
-------------------------------------+-------------------------------------
        Reporter:  kostmo            |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  libraries/base    |              Version:  8.2.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by nomeata):

 JFTR: The `containers` library needs this function, and defines it in its
 `Utils` module:
 http://hackage.haskell.org/package/containers-0.5.11.0/docs/Utils-
 Containers-Internal-BitUtil.html:

 {{{
 -- The highestBitMask implementation is based on
 -- http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
 -- which has been put in the public domain.

 -- | Return a word where only the highest bit is set.
 highestBitMask :: Word -> Word
 highestBitMask x1 = let x2 = x1 .|. x1 `shiftRL` 1
                         x3 = x2 .|. x2 `shiftRL` 2
                         x4 = x3 .|. x3 `shiftRL` 4
                         x5 = x4 .|. x4 `shiftRL` 8
                         x6 = x5 .|. x5 `shiftRL` 16
 #if !(defined(__GLASGOW_HASKELL__) && WORD_SIZE_IN_BITS==32)
                         x7 = x6 .|. x6 `shiftRL` 32
                      in x7 `xor` (x7 `shiftRL` 1)
 #else
                      in x6 `xor` (x6 `shiftRL` 1)
 #endif
 {-# INLINE highestBitMask #-}
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14818#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list