Skip to content

Releases: NicolasT/reedsolomon

reedsolomon-0.0.4.3

13 Jan 15:32
Compare
Choose a tag to compare

Highlights since version 0.0.4.2:

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

Various

  • Dependency version bounds of optparse-applicative are widened to support current Stackage nightly. Related API changes are handled as well. See 495369d.

reedsolomon-0.0.4.2

25 Sep 15:47
Compare
Choose a tag to compare

Highlights since version 0.0.4.1:

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.

reedsolomon-0.0.4.1

22 Sep 20:37
Compare
Choose a tag to compare

Highlights since version 0.0.4.0:

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.

reedsolomon-0.0.4.0

13 Mar 22:59
Compare
Choose a tag to compare

Highlights since version 0.0.3.0:

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.

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.

reedsolomon-0.0.3.0

27 Dec 14:44
Compare
Choose a tag to compare

Highlights since version 0.0.2.0:

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.

Various

  • Dependency version bounds were bumped to include current Stackage
    nightly.
  • 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
    bandwidth.

reedsolomon-0.0.2.0

03 Dec 23:05
Compare
Choose a tag to compare

Highlights since version 0.0.1.2:

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.

reedsolomon-0.0.1.2

02 Dec 00:23
Compare
Choose a tag to compare

Release 0.0.1.1 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. configure.ac 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

reedsolomon-0.0.1.1

01 Dec 18:45
Compare
Choose a tag to compare

Release 0.0.1 with proper timestamps in tarball

The 0.0.1.0 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.

reedsolomon-0.0.1.0

01 Dec 03:04
Compare
Choose a tag to compare

Initial release.