Commit 6488be7
fix(trigo): under-aligned buffers in large-arg range reduction
The generic trigonometric range-reduction kernel stored the batch into
std::array buffers declared alignas(B). alignof(B) equals the alignment of
the underlying SIMD register, which on some ABIs is smaller than the
alignment store_aligned/load_aligned require (A::alignment()). On armhf NEON
alignof(batch<float>) is 8 while neon::alignment() is 16, so the buffer was
only 8-byte aligned and store_aligned tripped its alignment assertion
whenever the stack happened to place it at an 8-mod-16 address.
This is exactly what broke the Debian armhf build of 14.2.0 (test
'[complex power] pow real complex' -> SIGABRT in store_aligned).
Align the buffers to B::arch_type::alignment() instead, matching the
convention used by every other internal store_aligned buffer.1 parent 978d222 commit 6488be7
1 file changed
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
596 | 596 | | |
597 | 597 | | |
598 | 598 | | |
599 | | - | |
600 | | - | |
601 | | - | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
602 | 602 | | |
603 | 603 | | |
604 | 604 | | |
| |||
0 commit comments