-
Notifications
You must be signed in to change notification settings - Fork 275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
neon vst1_* intrinsics copy many more bytes than they should. #1220
Comments
There is no instance of stdarch/crates/core_arch/src/aarch64/neon/mod.rs Lines 937 to 939 in 5fdbc47
But the stdarch submodule should be updated in the main Rust repo asap. |
Ah thanks, the submodule thing threw me off. Let's keep this open then until the changes have made it into the main Rust repo. |
This mainly fixes the critical issue of aarch64 store intrinsics overwriting additional memory, see rust-lang/stdarch#1220 Other changes: * aarch64/armv7: additional vld1/vst1 intrinsics + perf fixes for existing ones * armv7: Make FMA work with vfpv4 * Non-visible changes to the testing framework
Update stdarch submodule This is mainly to fix the critical issue of aarch64 store intrinsics overwriting additional memory, see rust-lang/stdarch#1220 Changes: * aarch64/armv7: additional vld1/vst1 intrinsics + perf fixes for existing ones * rust-lang/stdarch#1205 * rust-lang/stdarch#1207 * rust-lang/stdarch#1216 * armv7: Make FMA work with vfpv4 and optimize * rust-lang/stdarch#1219 * Non-visible changes to the testing framework * rust-lang/stdarch#1208 * rust-lang/stdarch#1211 * rust-lang/stdarch#1213 * rust-lang/stdarch#1215 * rust-lang/stdarch#1218
Seems like rust-lang/rust#89145 is now merged! |
This works fine now in the latest nightly. Closing! |
This was introduces in this commit:
907cfb2
For example:
stdarch/crates/core_arch/src/aarch64/neon/mod.rs
Line 1129 in 89b0e35
The docs for copy_nonoverlapping says "Copies count * size_of::() bytes from src to dst"
The example above will get called with type T = f64 (with size 8 bytes), and count = size_of::<float64x2_t> = 16. So it will end up copying 8*16=128 bytes. That's quite a bit more than the 16 bytes it should have been.
The result is that it writes garbage to memory locations it should not touch.
https://doc.rust-lang.org/core/ptr/fn.copy_nonoverlapping.html
The text was updated successfully, but these errors were encountered: