[GHC] #9340: Implement new `clz` inline primop

GHC ghc-devs at haskell.org
Sun Aug 17 11:10:41 UTC 2014


#9340: Implement new `clz` inline primop
-------------------------------------+-------------------------------------
              Reporter:  hvr         |            Owner:  hvr
                  Type:  feature     |           Status:  closed
  request                            |        Milestone:  7.10.1
              Priority:  normal      |          Version:  7.8.2
             Component:  Compiler    |         Keywords:  primop clz ctz
  (CodeGen)                          |     Architecture:  Unknown/Multiple
            Resolution:  fixed       |       Difficulty:  Unknown
      Operating System:              |       Blocked By:
  Unknown/Multiple                   |  Related Tickets:
       Type of failure:              |
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:  Phab:D144   |
-------------------------------------+-------------------------------------

Comment (by Herbert Valerio Riedel <hvr@…>):

 In [changeset:"6375934bfe64ca15eb215327629f9f07a185377a/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="6375934bfe64ca15eb215327629f9f07a185377a"
 Workaround GCC `__ctzdi2` intrinsic linker errors

 On Linux/i386 the 64bit `__builtin_ctzll()` instrinsic doesn't get
 inlined by GCC but rather a short `__ctzdi2` runtime function is
 inserted when needed into compiled object files.

 This causes failures for the four test-cases

   TEST="T8639_api T8628 dynCompileExpr T5313"

 with error messages of the kind

   dynCompileExpr: .../libraries/ghc-prim/dist-
 install/build/libHSghcpr_BE58KUgBe9ELCsPXiJ1Q2r.a: unknown symbol
 `__ctzdi2'
   dynCompileExpr: dynCompileExpr: unable to load package `ghc-prim'

 This workaround forces GCC on 32bit x86 to to express `hs_ctz64` in
 terms of the 32bit `__builtin_ctz()` (this is no loss, as there's no
 64bit BSF instruction on i686 anyway) and thus avoid the problematic
 out-of-line runtime function.

 Note: `__builtin_ctzll()` is used since
       e0c1767d0ea8d12e0a4badf43682a08784e379c6 (re #9340)
 }}}

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


More information about the ghc-tickets mailing list