c - 在 __m128 上右移 32 位的最快方法(Intel Intrinsics)

标签 c caching optimization intel intrinsics

我有一个 128 位变量,其中填充了 4 个独立的整数。 [1,2,3,4]。我想右移,所以我可以得到 [2,3,4,0]。最快的方法是什么。

我当前的代码:

__m128 v1;
v1 = (__m128)_mm_srli_si128(  _mm_castps_si128(v1) , 4 );

这成功地转移了位,但我正在尝试进行速度和缓存优化(也就是尽可能少的变量)。是否有改进此代码以避免与 __m128i 进行转换的方法?

谢谢

最佳答案

别担心。 __m128__m128i 是解释 XMM 寄存器内容的两种不同方式,因此转换在编译中消失了。我的编译器(Mac OS 10.9 上的 clang)将整个事情编译成一条指令:

psrldq $0x4, %xmm0

关于c - 在 __m128 上右移 32 位的最快方法(Intel Intrinsics),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19601870/

相关文章:

c - 安装中是否包含 valgrind 抑制文件?

javascript - 为什么这个 JavaScript 函数中有一个额外的变量?

caching - 用于 Redis 缓存和 TTL 的 ASP.NET session 状态提供程序

python - 在 Pyswarm PSO 函数中实现约束

python - 使用巨大的列表优化循环

python - 优化创建字典

在运行时检查 libxml2.so 的构建参数

c++ - 如何在Linux中实现绕行功能

c - c语言中如何向数组中插入多个元素

caching - Azure 中的有状态应用程序