c - 为什么 _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 位类型参数不会为最终用户提供更有用的界面吗?
解决方案
它与采用 shuffle 向量或立即参数的所有其他内在函数一致。可能表明它是一个整数而不是一个字符,同时避免依赖 stdint.h 的 int8_t。
从 C++ 的角度来看,更有趣的部分是它不是 constexpr,所以你可以给它非编译时参数,这会给编译器带来有趣的东西。我曾经尝试以一种假设直接参数是编译时的方式改进 gcc 的内在函数,并且它破坏了数量惊人的代码。
推荐阅读
- selenium - 带有机器人框架的 Pycharm - Intellisense 不工作
- vue.js - VueJS-“npm run build”不创建 index.html
- algorithm - 查找从数组中一一删除最大数字的总成本
- reactjs - 如何禁用 Ant Design React Form 中的字段?
- r - 如何在 R Shiny App 中保留复选框中的值?
- .net - Configuration.GetSection 在 .net 核心 (3.1) 中返回 null
- android - 导航架构组件 - 使用 Fragment 将参数数据传递给 startDestination
- flask - flask_jwt_extended 异常 NoAuthorizationError
- c++ - 如何正确设置自定义索引作为通用顶点属性数据?
- reactjs - TypeError:将循环结构转换为 JSON - Webpack