packages feed

fp-ieee-0.1.0: fp-ieee.cabal

cabal-version: 1.12

-- This file has been generated from package.yaml by hpack version 0.33.0.
--
-- see: https://github.com/sol/hpack
--
-- hash: f0bf89e9df957b5023d91e55d09165cecb06208750fddaf58af69fd7c2b7e35d

name:           fp-ieee
version:        0.1.0
description:    Please see the README on GitHub at <https://github.com/minoki/haskell-floating-point/tree/master/fp-ieee#readme>
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 ARATA Mizuki
license:        BSD3
license-file:   LICENSE
build-type:     Simple
extra-source-files:
    README.md
    ChangeLog.md

source-repository head
  type: git
  location: https://github.com/minoki/haskell-floating-point

flag f16c
  description: Use F16C instructions on x86
  manual: True
  default: False

flag float128
  description: Support Float128 via float128 package
  manual: True
  default: False

flag fma3
  description: Use FMA3 instructions on x86
  manual: True
  default: False

flag ghc-bignum
  description: Use ghc-bignum package
  manual: False
  default: True

flag half
  description: Support Half (float16) via half package
  manual: True
  default: False

flag integer-gmp
  description: Use integer-gmp package
  manual: False
  default: True

flag pure-hs
  description: Disable FFI
  manual: True
  default: False

flag sse4_1
  description: Use SSE4.1 instructions on x86
  manual: True
  default: False

library
  exposed-modules:
      Numeric.Floating.IEEE
      Numeric.Floating.IEEE.Internal
      Numeric.Floating.IEEE.NaN
  other-modules:
      GHC.Float.Compat
      MyPrelude
      Numeric.Floating.IEEE.Internal.Augmented
      Numeric.Floating.IEEE.Internal.Base
      Numeric.Floating.IEEE.Internal.Classify
      Numeric.Floating.IEEE.Internal.Conversion
      Numeric.Floating.IEEE.Internal.FMA
      Numeric.Floating.IEEE.Internal.GenericArith
      Numeric.Floating.IEEE.Internal.IntegerInternals
      Numeric.Floating.IEEE.Internal.MinMax
      Numeric.Floating.IEEE.Internal.NaN
      Numeric.Floating.IEEE.Internal.NextFloat
      Numeric.Floating.IEEE.Internal.Remainder
      Numeric.Floating.IEEE.Internal.RoundToIntegral
      Numeric.Floating.IEEE.Internal.Rounding
      Numeric.Floating.IEEE.Internal.Rounding.Common
      Numeric.Floating.IEEE.Internal.Rounding.Encode
      Numeric.Floating.IEEE.Internal.Rounding.Integral
      Numeric.Floating.IEEE.Internal.Rounding.Rational
  hs-source-dirs:
      src
  ghc-options: -Wall
  build-depends:
      base >=4.12 && <5
    , integer-logarithms >=1 && <1.1
  if arch(i386)
    ghc-options: -msse2
    cc-options: -msse2 -mfpmath=sse
  if !flag(pure-hs)
    cpp-options: -DUSE_FFI
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(sse4_1)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    cc-options: -msse4.1
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(fma3)
    cpp-options: -DHAS_FAST_FMA
    cc-options: -mfma
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_FMA
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && !os(windows)
    cpp-options: -DUSE_C99_FMA
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_MINMAX
    c-sources:
        cbits/minmax.c
  if flag(float128)
    cpp-options: -DUSE_FLOAT128
    build-depends:
        float128 >=0.1 && <0.2
  if flag(half)
    cpp-options: -DUSE_HALF
    build-depends:
        half >=0.3 && <0.4
  if !flag(pure-hs) && flag(half) && arch(x86_64) && flag(f16c)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    cc-options: -mf16c
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && flag(half) && arch(aarch64)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && (arch(aarch64) || arch(x86_64))
    cpp-options: -DHAS_FAST_CANONICALIZE
    c-sources:
        cbits/canonicalize.c
  if flag(half)
    other-modules:
        Numeric.Floating.IEEE.Internal.Half
  if flag(float128)
    other-modules:
        Numeric.Floating.IEEE.Internal.Float128
  if flag(integer-gmp) && impl(ghc < 9.0.0)
    build-depends:
        integer-gmp >=1.0 && <1.1
  if flag(ghc-bignum) && impl(ghc >= 9.0.0)
    build-depends:
        ghc-bignum >=1.0 && <1.1
  default-language: Haskell2010

test-suite fp-ieee-decimal-test
  type: exitcode-stdio-1.0
  main-is: Spec.hs
  other-modules:
      NextFloatSpec
  hs-source-dirs:
      decimal-test
  ghc-options: -threaded -rtsopts -with-rtsopts=-N -fno-ignore-asserts
  build-depends:
      QuickCheck
    , base >=4.12 && <5
    , decimal-arithmetic
    , fp-ieee
    , hspec
    , hspec-core
    , random
  if arch(i386)
    ghc-options: -msse2
    cc-options: -msse2 -mfpmath=sse
  if !flag(pure-hs)
    cpp-options: -DUSE_FFI
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(sse4_1)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    cc-options: -msse4.1
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(fma3)
    cpp-options: -DHAS_FAST_FMA
    cc-options: -mfma
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_FMA
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && !os(windows)
    cpp-options: -DUSE_C99_FMA
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_MINMAX
    c-sources:
        cbits/minmax.c
  if flag(float128)
    cpp-options: -DUSE_FLOAT128
    build-depends:
        float128 >=0.1 && <0.2
  if flag(half)
    cpp-options: -DUSE_HALF
    build-depends:
        half >=0.3 && <0.4
  if !flag(pure-hs) && flag(half) && arch(x86_64) && flag(f16c)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    cc-options: -mf16c
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && flag(half) && arch(aarch64)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && (arch(aarch64) || arch(x86_64))
    cpp-options: -DHAS_FAST_CANONICALIZE
    c-sources:
        cbits/canonicalize.c
  default-language: Haskell2010

test-suite fp-ieee-doctests
  type: exitcode-stdio-1.0
  main-is: doctests.hs
  other-modules:
      Paths_fp_ieee
  build-depends:
      base >=4.12 && <5
    , doctest >=0.8
  if arch(i386)
    ghc-options: -msse2
    cc-options: -msse2 -mfpmath=sse
  if !flag(pure-hs)
    cpp-options: -DUSE_FFI
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(sse4_1)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    cc-options: -msse4.1
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(fma3)
    cpp-options: -DHAS_FAST_FMA
    cc-options: -mfma
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_FMA
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && !os(windows)
    cpp-options: -DUSE_C99_FMA
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_MINMAX
    c-sources:
        cbits/minmax.c
  if flag(float128)
    cpp-options: -DUSE_FLOAT128
    build-depends:
        float128 >=0.1 && <0.2
  if flag(half)
    cpp-options: -DUSE_HALF
    build-depends:
        half >=0.3 && <0.4
  if !flag(pure-hs) && flag(half) && arch(x86_64) && flag(f16c)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    cc-options: -mf16c
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && flag(half) && arch(aarch64)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && (arch(aarch64) || arch(x86_64))
    cpp-options: -DHAS_FAST_CANONICALIZE
    c-sources:
        cbits/canonicalize.c
  default-language: Haskell2010

test-suite fp-ieee-test
  type: exitcode-stdio-1.0
  main-is: Spec.hs
  other-modules:
      AugmentedArithSpec
      ClassificationSpec
      FMASpec
      IntegerInternalsSpec
      MinMaxSpec
      NaNSpec
      RoundingSpec
      RoundToIntegralSpec
      TwoSumSpec
  hs-source-dirs:
      test
  ghc-options: -threaded -rtsopts -with-rtsopts=-N -fno-ignore-asserts
  build-depends:
      QuickCheck
    , base >=4.12 && <5
    , fp-ieee
    , hspec
    , hspec-core
    , integer-logarithms
    , random
  if arch(i386)
    ghc-options: -msse2
    cc-options: -msse2 -mfpmath=sse
  if !flag(pure-hs)
    cpp-options: -DUSE_FFI
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(sse4_1)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    cc-options: -msse4.1
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(fma3)
    cpp-options: -DHAS_FAST_FMA
    cc-options: -mfma
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_FMA
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && !os(windows)
    cpp-options: -DUSE_C99_FMA
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_MINMAX
    c-sources:
        cbits/minmax.c
  if flag(float128)
    cpp-options: -DUSE_FLOAT128
    build-depends:
        float128 >=0.1 && <0.2
  if flag(half)
    cpp-options: -DUSE_HALF
    build-depends:
        half >=0.3 && <0.4
  if !flag(pure-hs) && flag(half) && arch(x86_64) && flag(f16c)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    cc-options: -mf16c
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && flag(half) && arch(aarch64)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && (arch(aarch64) || arch(x86_64))
    cpp-options: -DHAS_FAST_CANONICALIZE
    c-sources:
        cbits/canonicalize.c
  if flag(half)
    other-modules:
        HalfSpec
  if flag(float128)
    other-modules:
        Float128Spec
  default-language: Haskell2010

benchmark fp-ieee-benchmark
  type: exitcode-stdio-1.0
  main-is: Benchmark.hs
  other-modules:
      Paths_fp_ieee
  hs-source-dirs:
      benchmark
  build-depends:
      base >=4.12 && <5
    , fp-ieee
    , gauge
  if arch(i386)
    ghc-options: -msse2
    cc-options: -msse2 -mfpmath=sse
  if !flag(pure-hs)
    cpp-options: -DUSE_FFI
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(sse4_1)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    cc-options: -msse4.1
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_ROUNDEVEN
    c-sources:
        cbits/roundeven.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && flag(fma3)
    cpp-options: -DHAS_FAST_FMA
    cc-options: -mfma
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_FMA
    c-sources:
        cbits/fma.c
  if !flag(pure-hs) && (arch(i386) || arch(x86_64)) && !os(windows)
    cpp-options: -DUSE_C99_FMA
  if !flag(pure-hs) && arch(aarch64)
    cpp-options: -DHAS_FAST_MINMAX
    c-sources:
        cbits/minmax.c
  if flag(float128)
    cpp-options: -DUSE_FLOAT128
    build-depends:
        float128 >=0.1 && <0.2
  if flag(half)
    cpp-options: -DUSE_HALF
    build-depends:
        half >=0.3 && <0.4
  if !flag(pure-hs) && flag(half) && arch(x86_64) && flag(f16c)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    cc-options: -mf16c
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && flag(half) && arch(aarch64)
    cpp-options: -DHAS_FAST_HALF_CONVERSION
    c-sources:
        cbits/half.c
  if !flag(pure-hs) && (arch(aarch64) || arch(x86_64))
    cpp-options: -DHAS_FAST_CANONICALIZE
    c-sources:
        cbits/canonicalize.c
  default-language: Haskell2010