Skip to content
  • Herbert Valerio Riedel's avatar
    Implement new CLZ and CTZ primops (re #9340) · e0c1767d
    Herbert Valerio Riedel authored
    This implements the new primops
    
      clz#, clz32#, clz64#,
      ctz#, ctz32#, ctz64#
    
    which provide efficient implementations of the popular
    count-leading-zero and count-trailing-zero respectively
    (see testcase for a pure Haskell reference implementation).
    
    On x86, NCG as well as LLVM generates code based on the BSF/BSR
    instructions (which need extra logic to make the 0-case well-defined).
    
    Test Plan: validate and succesful tests on i686 and amd64
    
    Reviewers: rwbarton, simonmar, ezyang, austin
    
    Subscribers: simonmar, relrod, ezyang, carter
    
    Differential Revision: https://phabricator.haskell.org/D144
    
    GHC Trac Issues: #9340
    e0c1767d