c - AltiVec 中的 mm_storel_epi64 等效吗?

标签 c sse aix simd altivec

我正在使用 AltiVec 编程接口(interface)开发一个项目。

在一个地方,我想将 8 个字节从 vector 寄存器存储到缓冲区。

在 SSE 中,我们有一个内在的 _mm_storel_epi64 将 SIMD 寄存器的低 8 字节存储到缓冲区。

关于在 AltiVec 中实现 8 字节存储有什么想法吗?

最佳答案

我认为使用 AltiVec 做到这一点的唯一方法是:

- load 16 bytes containing 8 byte destination buffer (`vec_ld`)
- mask in the 8 bytes you want to write (`vec_sel`)
- store the modified 16 byte vector (`vec_st`)

当然,这假设所需的 8 字节目标落在 16 字节对齐 vector 内。例如,假设目标地址是 0x1004,那么您将从地址 0x1000 加载,修改字节 4..11,然后将 vector 写回 0x1000。

关于c - AltiVec 中的 mm_storel_epi64 等效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28427579/

相关文章:

c++ - 在 C89 和 C++ 中用空参数调用宏真的是未定义的行为吗?

linux - 数据库备份未写入光盘,空间不足?

c - 使用矩阵算法和常量进行嵌套 for 循环调试。

c - union __m256 和两个 __m128 数组

c - SSE操作可在2D数组上实现循环,其中每个输出取决于包含该数组的3x3正方形(生命游戏)

c - AIX 运行时错误 : Symbol __dbargs (number 191) is not exported from dependent

linux - Shell 脚本 find cmin 在目录而不是文件上求值

c - 递归反向链表

c - 一种计算 1 到 2 之间数字的对数底数 2 的有效方法

c - 如何在 C 中的字符串中获取井号(或哈希)符号?