rust - 如何将 16 字节的内存加载到 Rust __m128i 中?
问题描述
我正在尝试将 16 字节的内存加载到模块中的__m128i
类型中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
从文档中不清楚如何使用_mm_load_si128
从现有内存或现有类型加载字节。我希望能够__m128i
通过加载内在函数从某些现有类型中加载字节。
解决方案
通过负载内在
内在函数是文档中列出的函数。模块中的示例涵盖了您从内存加载的具体示例:
let invec = _mm_loadu_si128(src.as_ptr() as *const _);
对于您的情况:
let g = _mm_load_si128(f.as_ptr() as *const _);
也可以看看:
推荐阅读
- angular - 在 mat table angular 中显示类别名称而不是 id
- firebase - Firebase IDToken 到 Unity 中的 Google OAuth2 访问令牌
- angular - Angular 服务失败
- awk - 如何使用 yq 更改嵌套 YAML 记录中的值
- c# - 按钮设置可见后代码不会反映在 UI 上
- typescript - 在 Jest 中使用 setTimeout 函数测试 vue 组件
- vue.js - vue中的数据绑定不更新
- python - 使用带有 flask_smorest 和/或 marshmallow 的自定义解析器
- yocto - unzip-native 的作用是什么?
- javascript - 根据输入过滤列表