是否存在对应x86指令的GCC内置函数的官方说明文档?
关于__builtin_ia32_*类GCC内置函数的说明
首先要明确,你提到的这类__builtin_ia32_前缀的内置函数,是GCC面向x86架构的底层内部实现函数,本身的定位是用来封装上层标准Intel Intrinsics API(即<immintrin.h>中定义的接口)的底层逻辑,GCC官方没有发布针对每个这类内置函数的独立详细说明文档,也不推荐普通开发者直接调用这类内置函数:它们的命名、参数规则、行为都可能在不同GCC版本中发生变化,没有跨版本、跨编译器的兼容性保证。
如果你需要使用这类函数对应的功能,优先选择Intel官方定义的标准Intrinsics API即可,标准API有公开的详细说明,且兼容所有主流x86平台编译器。
你列出的函数功能说明
这类内置函数的命名遵循固定规则,你可以通过命名快速判断基本用途:
- 后缀带
256代表操作256位宽的AVX向量,不带则操作128位宽的SSE向量 pd标识操作双精度浮点数(double,单元素占8字节),ps标识操作单精度浮点数(float,单元素占4字节)- 前缀
vNsf/vNdf代表由N个单/双精度浮点数组成的向量,pv*是对应向量的可写指针,pcv*是只读指针
各函数的具体作用如下:
v8sf __builtin_ia32_maskloadps256 (pcv8sf,v8sf):256位掩码加载单精度浮点。从第一个参数指向的内存地址读取8个单精度浮点数,第二个参数为掩码,掩码对应元素最高位为1时取内存中的值,为0时取第二个参数的对应值,最终返回拼接后的256位向量void __builtin_ia32_maskstorepd (pv2df,v2df,v2df):128位掩码存储双精度浮点。将第三个参数的双精度浮点数写入第一个参数指向的内存,第二个参数为掩码,仅掩码对应元素最高位为1的位置会执行写入,其余位置内存值保持不变void __builtin_ia32_maskstorepd256 (pv4df,v4df,v4df):256位版本的掩码存储双精度浮点,操作4个双精度浮点数,逻辑同上void __builtin_ia32_maskstoreps (pv4sf,v4sf,v4sf):128位掩码存储单精度浮点,操作4个单精度浮点数,逻辑同上void __builtin_ia32_maskstoreps256 (pv8sf,v8sf,v8sf):256位版本的掩码存储单精度浮点,操作8个单精度浮点数,逻辑同上v4df __builtin_ia32_maxpd256 (v4df,v4df):对两个256位双精度向量逐元素取最大值,返回结果向量v8sf __builtin_ia32_maxps256 (v8sf,v8sf):对两个256位单精度向量逐元素取最大值,返回结果向量v4df __builtin_ia32_minpd256 (v4df,v4df):对两个256位双精度向量逐元素取最小值,返回结果向量v8sf __builtin_ia32_minps256 (v8sf,v8sf):对两个256位单精度向量逐元素取最小值,返回结果向量v4df __builtin_ia32_movddup256 (v4df):逐128位通道复制双精度元素,每个128位通道的低64位双精度值会复制到同通道的高64位位置,返回处理后的256位向量int __builtin_ia32_movmskpd256 (v4df):提取256位双精度向量中每个元素的最高符号位,拼接为4位整数返回int __builtin_ia32_movmskps256 (v8sf):提取256位单精度向量中每个元素的最高符号位,拼接为8位整数返回v8sf __builtin_ia32_movshdup256 (v8sf):逐128位通道复制单精度浮点数的奇索引元素,每个通道的1、3位元素会复制到同通道的相邻位置,返回处理后的256位向量v8sf __builtin_ia32_movsldup256 (v8sf):逐128位通道复制单精度浮点数的偶索引元素,每个通道的0、2位元素会复制到同通道的相邻位置,返回处理后的256位向量v4df __builtin_ia32_mulpd256 (v4df,v4df):对两个256位双精度向量逐元素执行乘法运算,返回结果向量v8sf __builtin_ia32_mulps256 (v8sf,v8sf):对两个256位单精度向量逐元素执行乘法运算,返回结果向量v4df __builtin_ia32_orpd256 (v4df,v4df):对两个256位双精度向量逐位执行或运算,返回结果向量v8sf __builtin_ia32_orps256 (v8sf,v8sf):对两个256位单精度向量逐位执行或运算,返回结果向量v2df __builtin_ia32_pd_pd256 (v4df):提取256位双精度向量的低128位(前2个双精度元素),返回128位双精度向量v4df __builtin_ia32_pd256_pd (v2df):将输入的128位双精度向量放到256位向量的低128位,高128位清零,返回256位双精度向量v4sf __builtin_ia32_ps_ps256 (v8sf):提取256位单精度向量的低128位(前4个单精度元素),返回128位单精度向量v8sf __builtin_ia32_ps256_ps (v4sf):将输入的128位单精度向量放到256位向量的低128位,高128位清零,返回256位单精度向量
内容的提问来源于stack exchange,提问作者Izzo
相关产品推荐
相关产品推荐

