Skip to content
  • Peter Trommler's avatar
    PPC NCG: Implement callish prim ops · 89a3241f
    Peter Trommler authored and Ben Gamari's avatar Ben Gamari committed
    Provide PowerPC optimised implementations of callish prim ops.
    
    MO_?_QuotRem
    The generic implementation of quotient remainder prim ops uses
    a division and a remainder operation. There is no remainder on
    PowerPC and so we need to implement remainder "by hand" which
    results in a duplication of the divide operation when using the
    generic code.
    
    Avoid this duplication by implementing the prim op in the native
    code generator.
    
    MO_U_Mul2
    Use PowerPC's instructions for long multiplication.
    
    Addition and subtraction
    Use PowerPC add/subtract with carry/overflow instructions
    
    MO_Clz and MO_Ctz
    Use PowerPC's CNTLZ instruction and implement count trailing
    zeros using count leading zeros
    
    MO_QuotRem2
    Implement an algorithm given by Henry Warren in "Hacker's Delight"
    using PowerPC divide instruction. TODO: Use long division instructions
    when available (POWER7 and later).
    
    Test Plan: validate on AIX and 32-bit Linux
    
    Reviewers: simonmar, erikd, hvr, austin, bgamari
    
    Reviewed By: erikd, hvr, bgamari
    
    Subscribers: trofi, kgardas, thomie
    
    Differential Revision: https://phabricator.haskell.org/D2973
    89a3241f