ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 为什么英特尔的一些内在函数采用const immediates,而另一些则是非const?

2019-08-29 01:05:05  阅读:317  来源: 互联网

标签:c x86 intel intrinsics


Intel’s intrinsic guide似乎与直接的价值观有着神秘的区别.他们将一些标记为const而一些不标记为const.在实践中,两种类型无论是编译时间常数还是编译器都会抱怨.我只是想知道为什么这个区别?我错过了什么?

这是英特尔所说的一个例子:

_mm_blend_epi16 (__m128i a, __m128i b, const int imm8)
_mm_srli_si128 (__m128i a, int imm8)

解决方法:

假设你认为const是一个改进,那么英特尔的旧东西写得不如他们的新东西.

请注意,blend_epi16是SSE4.1,而srli_si128是SSE2.当他们为SSE4.1添加内在函数时,可能他们决定强调论证需要是编译时常量.

256位版本的AVX2内在函数使用const:__ m256i _mm256_srli_si256(__ m256i a,const int imm).这基本上证实了他们还没有想到const,因为他们开始使用const作为相同的指令.

还要注意他们对psrldq instruction的_mm_srli_si128名称非常不满意,他们为它引入了一个新名称:在新代码中应首选_mm_bsrli_si128,以使其更清晰,它是一个字节移位,而不是128位宽的位移.它与_mm_srli_epi64有很大不同.遗憾的是,指令参考手册未提及bsrli名称.

AVX512加载/存储内在函数将使用void *而不是__m128i *,这是另一个不错的变化.

所以英特尔基本上做的事情不同,因为旧的方式是次优的,不是因为他们必须这样做.

标签:c,x86,intel,intrinsics
来源: https://codeday.me/bug/20190828/1757203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有