diff options
author | sheaf <sam.derbyshire@gmail.com> | 2023-04-08 13:42:58 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-05-11 11:55:22 -0400 |
commit | 87eebf98cb485f7c9175330051736e147ade9848 (patch) | |
tree | ffa226b3fefa8b0a03e1798fa4f55affbddf654b /testsuite/driver | |
parent | 630b1fea1e41a1e00860a30742b6ab8ade8a0de0 (diff) | |
download | haskell-87eebf98cb485f7c9175330051736e147ade9848.tar.gz |
Add fused multiply-add instructions
This patch adds eight new primops that fuse a multiplication and an
addition or subtraction:
- `{fmadd,fmsub,fnmadd,fnmsub}{Float,Double}#`
fmadd x y z is x * y + z, computed with a single rounding step.
This patch implements code generation for these primops in the following
backends:
- X86, AArch64 and PowerPC NCG,
- LLVM
- C
WASM uses the C implementation. The primops are unsupported in the
JavaScript backend.
The following constant folding rules are also provided:
- compute a * b + c when a, b, c are all literals,
- x * y + 0 ==> x * y,
- ±1 * y + z ==> z ± y and x * ±1 + z ==> z ± x.
NB: the constant folding rules incorrectly handle signed zero.
This is a known limitation with GHC's floating-point constant folding
rules (#21227), which we hope to resolve in the future.
Diffstat (limited to 'testsuite/driver')
-rw-r--r-- | testsuite/driver/cpu_features.py | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/testsuite/driver/cpu_features.py b/testsuite/driver/cpu_features.py index 43500130db..f6c441d88f 100644 --- a/testsuite/driver/cpu_features.py +++ b/testsuite/driver/cpu_features.py @@ -10,6 +10,7 @@ SUPPORTED_CPU_FEATURES = { # x86: 'sse', 'sse2', 'sse3', 'ssse3', 'sse4_1', 'sse4_2', 'avx1', 'avx2', + 'fma', 'popcnt', 'bmi1', 'bmi2' } @@ -46,6 +47,10 @@ def get_cpu_features(): check_feature('avx2_0', 'avx2') return features + elif config.arch in [ 'powerpc', 'powerpc64' ]: + # Hardcode support for 'fma' on PowerPC + return [ 'fma' ] + else: # TODO: Add {Open,Free}BSD support print('get_cpu_features: Lacking support for your platform') |