Releases: NicolasT/reedsolomon
reedsolomon-0.0.4.3
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
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
Highlights since version 0.0.4.0:
Support GHC 8 & Stackage LTS 7
-
Use
-fno-warn-redundant-constraints
in GHC 8 buildsSome 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
andMaxBound
constraint onData.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 aOPTIONS_GHC
pragma can't beCPP
'ed out :-( -
Work-around GHC 8.0.1 'bug' in
__GLASGOW_HASKELL_LLVM__
handling -
Loosen constraints on
base
dependency, supportbase 4.9
-
Loosen constraints on
clock
andQuickCheck
-
Add
bytestring-mmap-0.2.2
toextra-deps
ofstack.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
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
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 fromCFLAGS
. - 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
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
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
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
Initial release.