如何解决如何将 16 字节的内存加载到 Rust __m128i 中?
我正在尝试从 __m128i
模块将 16 字节的内存加载到 std::arch
类型中:
#[cfg(all(target_arch = "x86_64",target_feature = "sse2"))]
use std::arch::x86_64::__m128i;
fn foo() {
#[cfg(all(target_arch = "x86_64",target_feature = "sse2"))]
use std::arch::x86_64::_mm_load_si128;
unsafe {
let mut f: [i8; 16] = [0; 16];
f[0] = 5;
f[1] = 66;
let g = _mm_load_si128(f as *const __m128i);
}
}
fn main() {
foo();
}
我的代码导致错误:
error[E0605]: non-primitive cast: `[i8; 16]` as `*const __m128i`
--> src/main.rs:12:32
|
12 | let g = _mm_load_si128(f as *const __m128i);
| ^^^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object
从 documentation 中不清楚如何使用 _mm_load_si128
从现有内存或现有类型加载字节。我希望能够通过加载内部函数将某些现有类型的字节加载到 __m128i
中。
解决方法
通过负载内在
内在函数是 functions listed in the docs。您从内存加载的具体示例涵盖by the examples in the module:
let invec = _mm_loadu_si128(src.as_ptr() as *const _);
对于您的情况:
let g = _mm_load_si128(f.as_ptr() as *const _);
另见:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。