diff options
| author | Peter Trommler <ptrommler@acm.org> | 2017-04-25 18:37:16 -0400 |
|---|---|---|
| committer | Ben Gamari <ben@smart-cactus.org> | 2017-04-25 18:39:50 -0400 |
| commit | 89a3241f708502e8fbcfaddbbe634790ad9cd02a (patch) | |
| tree | 9264c8bb53a229ea2a6a55debd0088bb88354bd2 /compiler/utils/FastFunctions.hs | |
| parent | 9373994acaf1b73fe0e7cf8e03594c63cec8d235 (diff) | |
| download | haskell-89a3241f708502e8fbcfaddbbe634790ad9cd02a.tar.gz | |
PPC NCG: Implement callish prim ops
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
Diffstat (limited to 'compiler/utils/FastFunctions.hs')
0 files changed, 0 insertions, 0 deletions
