Open
Description
In release mode, this code can break:
/// Converts these packed floats to integers via the floor function.
#[inline]
pub fn floor_to_i32x4(self) -> I32x4 {
unsafe {
x86::_MM_SET_ROUNDING_MODE(x86::_MM_ROUND_DOWN);
let value = I32x4(x86::_mm_cvtps_epi32(self.0));
x86::_MM_SET_ROUNDING_MODE(x86::_MM_ROUND_NEAREST);
value
}
}
Because value
can get reordered after all the rounding mode switches. I'm not sure what the right thing to do here is.