首页 > 解决方案 > 为什么 _mm_permute_ps 的最后一个参数是 int?

问题描述

GCC 好心地告诉我 SIMD 内在函数的最后一个参数_mm_permute_ps必须是 8 位立即数。那么为什么它的最后一个参数声明为期望一个int

__m128     _mm_permute_ps(__m128  a, int imm8);
__m256d _mm256_permute_pd(__m256d a, int imm8);

8 位类型参数不会为最终用户提供更有用的界面吗?

标签: cintelapi-designintrinsicsavx

解决方案


它与采用 shuffle 向量或立即参数的所有其他内在函数一致。可能表明它是一个整数而不是一个字符,同时避免依赖 stdint.h 的 int8_t。

从 C++ 的角度来看,更有趣的部分是它不是 constexpr,所以你可以给它非编译时参数,这会给编译器带来有趣的东西。我曾经尝试以一种假设直接参数是编译时的方式改进 gcc 的内在函数,并且它破坏了数量惊人的代码。


推荐阅读