All Versions
Latest Version
Avg Release Cycle
51 days
Latest Release
2651 days ago

Changelog History

  • v0.0.4.3 Changes

    January 13, 2017

    Highlights since version

    Use __builtin_shuffle for 'generic' SIMD code

    Some compilers, including GCC, provide a built-in function to efficiently shuffle vector elements without resorting to platform-specific SIMD intrinsics. If available, we now use this function instead of a hand-written byte-wise implementation for the 'generic' implementations of the SIMD routines. For non-generic implementations, the code generated by __builtin_shuffle is slightly more complicated than the hand-written intrinsics code.

    ๐Ÿ‘€ See commit 724dddb for more information, including how compiler support is checked in the ./configure script.

    ๐Ÿ‘€ See: 724dddb

    Detect and use system-provided __get_cpuid_count

    The X86 system headers coming with GCC 6.3 now provide a definition of __get_cpuid_count in cpuid.h. We define said function in a cbits module as well (for compilers not providing an implementation in their
    headers), which conflicts.

    ๐Ÿ”ง A test for the declaration is now performed by ./configure, and if provided by the system, this version of the routine is used.

    ๐Ÿ‘€ See: 0458a96


    • ๐Ÿ‘€ Dependency version bounds of optparse-applicative are widened to support current Stackage nightly. Related API changes are handled as well. See 495369d.
  • v0.0.4.2 Changes

    September 25, 2016

    Highlights since version

    ๐Ÿ›  Fix Haddock builds

    ๐Ÿ“š Due to an oversight in build-tools/ghc-wrapper, when using GHC 8 Haddock would fail building API documentation for the package: the wrapper generated more output than plain GHC.

  • v0.0.4.1 Changes

    September 22, 2016

    Highlights since version

    ๐Ÿ‘Œ Support GHC 8 & Stackage LTS 7

    ๐Ÿ— Use -fno-warn-redundant-constraints in GHC 8 builds

    Some constraints could be considered redundant because they're not used, but they're "empty" in the sense they're there to prevent compilation (if applicable), not provide runtime functionality. E.g. the MinBound and MaxBound constraint on Data.Vector.Gneric.Sized.index.

    Sadly enough a per-module OPTIONS_GHC pragma enabling -fno-warn-redundant-constraints for said module can't be used, because this would make compilation using GHC versions pre-8 fail (unknown compiler flag), and it appears that a OPTIONS_GHC pragma can't be CPP'ed out :-(

    Work-around GHC 8.0.1 'bug' in __GLASGOW_HASKELL_LLVM__ handling

    ๐Ÿ‘ Loosen constraints on base dependency, support base 4.9

    Loosen constraints on clock and QuickCheck

    โž• Add bytestring-mmap-0.2.2 to extra-deps of stack.yaml

    โœ… Looks like bytestring-mmap is no longer in Stackage LTS...

    โšก๏ธ Set Stackage LTS 7 as default resolver and update CI

    โšก๏ธ lts-7.0 is now the default resolver in stack.yaml, and CI configurations (where applicable) were updated to also test this platform.

    Minor changes to internal datastructures

    ๐Ÿšš Fields in the Encoder structure are now strict and unboxed, and unused fields are removed.

  • v0.0.4.0 Changes

    March 13, 2016

    Highlights since version

    ๐Ÿ‘ SIMD support for ARM NEON and PowerPC AltiVec

    โšก๏ธ The Galois field multiplication code implemented in C to optimize these calculations compared to native Haskell functions used to provide a generic implementation, and SIMD implementations for Intel SSSE3, AVX and AVX2.

    The generic implementation was supposed to work on non-Intel platforms, but is significantly slower than the SIMD versions. This version of the library is the first to contain SIMD versions of the code for non-Intel platforms:

    • ARM NEON
    • โšก๏ธ ARM NEON, optimized for AArch64 using vqtbl1q_u8
    • PowerPC AltiVec
    • โšก๏ธ PowerPC AltiVec, optimized for POWER8 using vec_vsrd

    Note: The library is tested on these platforms only at the C level by running some tests using Qemu's platform emulation, which could not trigger certain bugs. If you want to use this library on a foreign platform, make sure to run the full (Haskell) test-suite on it.

    0๏ธโƒฃ Examples are no longer built and installed by default

    ๐Ÿ— When building the library (e.g. as a dependency of your application), the examples shipped with the library are no longer built and installed by default. Enable the Cabal examples flag to build and install them anyway.

    ๐Ÿ”จ Extended configure checks and refactored C code

    ๐Ÿ”จ The configure script has been extended, some bugs in it have been fixed, and the C code in cbits was refactored to make it simpler and more maintainable, and allow the C compiler to perform more optimizations.

  • v0.0.3.0 Changes

    December 27, 2015

    Highlights since version

    ๐Ÿ›  Fix library

    ๐Ÿ— Before this version, the library was unusable outside its build tree,
    because the SIMD enhancement object files, generated from C sources,
    were not added to the static library archive or dynamic shared object.

    ๐Ÿš€ This release contains a hack for the Cabal build infrastructure, using
    wrappers for the ar and ghc tools, which inject the required
    ๐Ÿ’ป command line arguments where applicable.

    ๐ŸŽ This has been tested on Linux, MacOS X and Windows through all CI
    platforms used for this project, but it's still an error-prone and
    non-portable work-around.


    • Dependency version bounds were bumped to include current Stackage
    • ๐Ÿšš The -funroll-all-loops compiler option was removed from CFLAGS.
    • A reference benchmark using memcpy was added to the benchmark
      ๐ŸŽ suite, which allows to compare encoding performance to memory
  • v0.0.2.0 Changes

    December 03, 2015

    Highlights since version

    โšก๏ธ Use AVX-optimized Galois routines

    โšก๏ธ Even though AVX-optimized versions of the Galois field routines were compiled into the library, they were not used because of an oversight in the dispatch function.

    ๐Ÿ”ฆ Expose SIMD instruction set being used

    Using a new action, Data.ReedSolomon.simdInstructions, the SIMD instruction set used to perform Galois field calculations (if any) can be queried at runtime.

  • v0.0.1.2 Changes

    December 02, 2015

    ๐Ÿš€ Release with disabled maintainer mode during cbits build

    ๐Ÿš€ After investigation of the build failures on Hackage, caused by autools 'maintainer mode' kicking in and required packages not being installed on the build systems, it turns out cabal unpack doesn't honor timestamps of files contained in sdist tarballs while unpacking. This in turn causes some source files in cbits to appear newer than their generated versions (e.g. being newer than configure), and the 'maintainer mode' rules being triggered, which we obviously don't want to happen in release packages.

    ๐Ÿ— This patch changes Setup.hs to explicitly pass --disable-maintainer-mode to configure in builds of packages whose version number doesn't match the development version, 999.

    This is a work-around for Cabal issue #2311.

    ๐Ÿ‘€ See: haskell/cabal#2311
    ๐Ÿ‘€ See: 4eeceb8

  • v0.0.1.1 Changes

    December 01, 2015

    ๐Ÿš€ Release 0.0.1 with proper timestamps in tarball

    ๐Ÿš€ The release tarball contains improper timestamps of autotools-generated files in cbits, which causes the 'maintainer mode' to attempt to rebuild some files, which fails on systems where the required tools are not available.

    ๐Ÿš€ This release contains a fix in the sdist generation process which should work-around this, and result in successful builds on Hackage.

  • v0.0.1.0 Changes

    December 01, 2015

    ๐ŸŽ‰ Initial release.