AlignedBase: use alignof instead of sizeof

sizeof can be a not-power-of-two value with simd_array

Signed-off-by: Matthias Kretz <kretz@kde.org>
simd_array: implemented load and compilable with Memory

(Memory requires store and Zero to be declared.)

refs #613

Signed-off-by: Matthias Kretz <kretz@kde.org>
AVX: replace macro with Common::unrolled_loop

The macro finally broke compilation, high time to replace it with the
new Common::unrolled_loop helper.

Signed-off-by: Matthias Kretz <kretz@kde.org>
simd_array: converting loads already pass

extended the test to test more than just N = 32

Signed-off-by: Matthias Kretz <kretz@kde.org>
tests: reduce template recursion depth

With a long typelist the recursion depth can easily get too deep. By
handling two types per template instantiation I was able to reduce the
depth by a factor of 2.

Signed-off-by: Matthias Kretz <kretz@kde.org>
simd_array: use power-of-two splitting

A split in N/2 and N-N/2 lead to holes in the data. N-N/2 and N/2 could
still lead to holes at the next recursion level. The most efficient
splitting wrt. to reductions is to have the first member use a power of
2 size. That's implemented now with a simple recursive constexpr
function that determines the next power of 2 from N-N/2.

refs #613

Signed-off-by: Matthias Kretz <kretz@kde.org>
simd_array: test and fix IndexesFromZero

IndexesFromZero was wrong: every sub-vector was initialized with
0 .. Size-1. Now the Split::hi function recognizes IndexesFromZero
arguments and modifies the type to carry the offset via the type into
the simd_array constructor that finally adds this offset to the
IndexesFromZero initialized vector.

refs #613

Signed-off-by: Matthias Kretz <kretz@kde.org>