cabal-version: 3.0 -- asm-sources is Cabal 3.0 feature name: rounded-hw version: 0.4.0 synopsis: Directed rounding for built-in floating types description: Please see the README on GitHub at category: Numeric, Math homepage: https://github.com/minoki/haskell-floating-point#readme bug-reports: https://github.com/minoki/haskell-floating-point/issues author: ARATA Mizuki maintainer: minorinoki@gmail.com copyright: 2020-2023 ARATA Mizuki license: BSD-3-Clause license-file: LICENSE build-type: Custom tested-with: GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.3, GHC == 9.8.1 extra-source-files: README.md ChangeLog.md cbits/rounded-common.inl cbits/rounded-avx512.inl cbits/interval-prim-x86_64-sse2.S cbits/interval-prim-x86_64-avx512.S source-repository head type: git location: https://github.com/minoki/haskell-floating-point subdir: rounded-hw -- Custom setup is required to allow assembly sources to #include "ghcconfig.h" custom-setup setup-depends: Cabal >=3.0 && <3.11 , base >=4.12 && <4.20 flag pure-hs description: Disable FFI manual: True default: False flag c99 description: Restrict use of platform-dependent features (e.g. SSE2) and only use C99 features manual: True default: False flag avx512 description: Use AVX512 EVEX encoding manual: True default: False flag ghc-prim description: Use GHC's "foreign import prim" on the supported platform manual: True default: True flag x87-long-double description: Support x87 "long double" manual: True default: False flag float128 description: Support Float128 manual: True default: False common deps build-depends: array >=0.5.2.0 && <0.6 , base >=4.12 && <4.20 , deepseq >=1.4.4.0 && <1.6 , fp-ieee ==0.1.* , primitive >=0.6.1.1 && <0.10 , vector >=0.12.0.1 && <0.14 common options ghc-options: -Wcompat library import: deps, options exposed-modules: Numeric.Rounded.Hardware Numeric.Rounded.Hardware.Backend Numeric.Rounded.Hardware.Backend.ViaRational Numeric.Rounded.Hardware.Class Numeric.Rounded.Hardware.Internal Numeric.Rounded.Hardware.Interval Numeric.Rounded.Hardware.Interval.Class Numeric.Rounded.Hardware.Interval.NonEmpty Numeric.Rounded.Hardware.Rounding Numeric.Rounded.Hardware.Vector.Storable Numeric.Rounded.Hardware.Vector.Unboxed other-modules: Numeric.Rounded.Hardware.Internal.Rounding Numeric.Rounded.Hardware.Internal.Class Numeric.Rounded.Hardware.Internal.Constants Numeric.Rounded.Hardware.Internal.Conversion Numeric.Rounded.Hardware.Internal.FloatUtil Numeric.Rounded.Hardware.Internal.Show Numeric.Rounded.Hardware.Backend.Default Numeric.Rounded.Hardware.Interval.ElementaryFunctions hs-source-dirs: src build-depends: tagged >=0.8.6 && <0.9 ghc-options: -Wall -- Use FFI when flag(pure-hs) is off if !flag(pure-hs) exposed-modules: Numeric.Rounded.Hardware.Backend.C other-modules: FFIWrapper.Float FFIWrapper.Double cpp-options: -DUSE_FFI c-sources: cbits/rounded.c -- flag(c99): Disable platform-dependent techniques and only use C99 fesetround if flag(c99) cc-options: -DUSE_C99 -- flag(avx512): Use AVX512 EVEX encoding if flag(avx512) cc-options: -DUSE_AVX512 -mavx512f -- flag(ghc-prim): We support "foreign import prim" on GHC/x86_64 if !flag(pure-hs) && !flag(c99) && flag(ghc-prim) && impl(ghc) && arch(x86_64) exposed-modules: Numeric.Rounded.Hardware.Backend.FastFFI cpp-options: -DUSE_GHC_PRIM if impl(ghc >= 9.2) if flag(avx512) asm-sources: cbits/interval-prim-x86_64-avx512.S else asm-sources: cbits/interval-prim-x86_64.S else if flag(avx512) c-sources: cbits/interval-prim-x86_64-avx512.S else c-sources: cbits/interval-prim-x86_64.S -- flag(x87-long-double): Support LongDouble on x86 if flag(x87-long-double) && (arch(i386) || arch(x86_64)) other-modules: Numeric.Rounded.Hardware.Backend.X87LongDouble cpp-options: -DUSE_X87_LONG_DOUBLE c-sources: cbits/rounded-x87longdouble.c build-depends: long-double >=0.1 && <0.2 -- flag(float128): Support Float128 if flag(float128) other-modules: Numeric.Rounded.Hardware.Backend.Float128 cpp-options: -DUSE_FLOAT128 c-sources: cbits/rounded-float128.c build-depends: float128 >=0.1 && <0.2 default-language: Haskell2010 test-suite rounded-hw-doctests import: deps, options type: exitcode-stdio-1.0 main-is: doctests.hs build-depends: doctest ^>=0.22.2 default-language: Haskell2010 if impl(ghc >= 9.8) buildable: False test-suite rounded-hw-test import: deps, options type: exitcode-stdio-1.0 main-is: Spec.hs other-modules: ConstantsSpec FromIntegerSpec FromRationalSpec IntervalArithmeticSpec RoundedArithmeticSpec ShowFloatSpec Util VectorSpec hs-source-dirs: test ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: QuickCheck ^>=2.14.3 , hspec ^>=2.11.7 , random ^>=1.2.1.1 , rounded-hw if flag(x87-long-double) && (arch(i386) || (arch(x86_64) && !os(windows))) -- Support for 80-bit long double is not good on Win64, so don't test other-modules: X87LongDoubleSpec cpp-options: -DTEST_X87_LONG_DOUBLE build-depends: long-double if flag(float128) other-modules: Float128Spec cpp-options: -DTEST_FLOAT128 build-depends: float128 default-language: Haskell2010 benchmark rounded-hw-benchmark import: deps, options type: exitcode-stdio-1.0 main-is: Benchmark.hs other-modules: Conversion IGA hs-source-dirs: benchmark build-depends: rounded-hw , tasty-bench ^>=0.3.5 default-language: Haskell2010