32-bit ARM NEON intrinsics are unsound due to subnormal flushing #129880
Labels
A-floating-point
Area: Floating point numbers and arithmetic
C-bug
Category: This is a bug.
I-miscompile
Issue: Correct Rust code lowers to incorrect machine code
I-unsound
Issue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/Soundness
O-Arm
Target: 32-bit Arm processors (armv6, armv7, thumb...), including 64-bit Arm in AArch32 state
P-medium
Medium priority
T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
T-libs
Relevant to the library team, which will review and decide on the PR/issue.
This is the ARM NEON version of #114479. Example by @beetrees, to be compiled with
--target armv7-unknown-linux-gnueabihf -O -Ctarget-feature=+neon
:LLVM's optimizations assume they can calculate what that loop does, and that it follows IEEE semantics. But LLVM's codegen produces code that does not have IEEE semantics, and instead flushes subnormals to zero. 💥
This almost surely also affects the unstable
std::simd
on ARM.The text was updated successfully, but these errors were encountered: