Changelog History
-
v0.0.4.3 Changes
January 13, 2017Highlights since version 0.0.4.2:
Use
__builtin_shuffle
for 'generic' SIMD codeSome 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
incpuid.h
. We define said function in acbits
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.
- ๐ Dependency version bounds of
-
v0.0.4.2 Changes
September 25, 2016Highlights 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. -
v0.0.4.1 Changes
September 22, 2016Highlights 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 defaultresolver
instack.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, 2016Highlights 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.
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 incbits
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, 2015Highlights 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 thear
andghc
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.
- Dependency version bounds were bumped to include current Stackage
-
v0.0.2.0 Changes
December 03, 2015Highlights 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. -
v0.0.1.2 Changes
December 02, 2015๐ 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 insdist
tarballs while unpacking. This in turn causes some source files incbits
to appear newer than their generated versions (e.g.configure.ac
being newer thanconfigure
), 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
toconfigure
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 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. -
v0.0.1.0 Changes
December 01, 2015๐ Initial release.