All notable changes to this project will be documented in this file.
TwoSimdBlocks
got removedTwice<A>
gives an alignment guarantee of two blocks of Ahalves
on aligned block ofTwice<A>
splits a block into two smaller alignments
Related: #34
Related: #31
Related: #33
- Allows getting the
alignment
size as a method instead of static.
Related: #29
Fn
is unnecessarily prohibitive,FnMut
allows more initialisation functions.
- When the
avx512f
target feature is enabled theSimdBlock
is set to 64 bytes.
Related: #23
- AVX already includes 256-bit SIMD vectors, so using it
as the trigger for
SimdBlock
instead of AVX2 makes more sense
Related: #22
- One can use the
test_simd_sizes.py
script to run the simd-size test matrix locally.
- When the
sse
target feature is enabled on x86/x86_64 theSimdBlock
size is 16 bytes, unless a target feature with a larger vector is also enabled.
Related: #18
- Test whether the size of
SimdBlock
agrees with the expected one for a given target.
- Use
simd_alignment_test
to check whetherSimdBlock
sizes remain consistent across targets.
- Implementations of
Default
for AlignedBytes
&AlignedSlice
&mut AlignedSlice
- were incorrect by using
NonNull::dangling
as the pointer. - That pointer need not be aligned to the specified
Alignment
. - This was fixed by using std's
dangling
implementation tweaked to - the required alignment, while still not allocating.
Related: #11
- Miri's
-Zmiri-symbolic-alignment-check
breaksalign_offset
to always returnusize::MAX
(that is by design), so we need to fallback to regular cast-then-modulo alignment check for tests when running under Miri.
Related: #12
Related: #5
- Alignment types driven by the
alignment
module. AlignedBytes
-- aligned containerAlignedSlice
-- type guarantee on alignment of&[u8]
AlignedBlockIterator
-- iterate aligned blocks of a slice.- Quality of life implementations of
Deref
andstd::cmp
traits.
Related: #1
Related: #3