2024年6月14日发(作者:)
附录 C
INTEL® C/C++ 内置函数及函数替换 ¹
该附录中的两张表列出了Intel C/C++编译器针对MMX技术,SSE,SSE2,SSE3,SSSE3指
令的内置函数和函数替换
.
可能有些新增的内置函数并没有相应的指令替换.请查阅编译器文档中列出的所有
支持的内置函数
/support/performancetools/.
表C-1列出的是简单的内置函数,表C-2列出的复合内置函数.某些内置函数是复合的,
因为这时需要多于一条指令去实现它们
.
Intel C/C++
编译器内置函数均依照以下约定
:
_mm_
其中
:
指示内置函数的基本操作
;
如
, add
为加
,sub
为减
表示指令的操作数类型.开头的一两个字母指示数据是否是
紧缩
(packed p),
扩展紧缩
(extended packed ep),
或者标量
( scalar s).
剩下的字母记录类型
:
s
d
i128
i64
u64
i32
u32
i16
u16
i8
u8
单精度浮点数
双精度浮点数
128位有符号整数
64位有符号整数
64位无符号整数
32位有符号整数
32位无符号整数
16
位有符号整数
16
位无符号整数
8
位有符号整数
8
位无符号整数
而r一般被用作内置函数的返回值.紧跟一个数字指示一个紧缩对象的元素.如r0表示r
的最低字
.
Vol. 2B C-1
附录 C INTEL® C/C++ 内置函数及函数替换
紧缩值以从右到左的顺序描述,最低值被用作标量操作.考虑以下操作
:
double a[2] = {1.0, 2.0};
m128d t = _mm_load_pd(a);
结果和以下操作相同
:
m128d t = _mm_set_pd(2.0, 1.0);
m128d t = _mm_setr_pd(1.0, 2.0);
换句话说,暂存变量t的MMX寄存器就像下图所示的样子
:
2.0
127 64 63
1.0
0
标量元素即1.0.由于指令本身的关系,某些内置函数需要立即数(整形字面常
量)参数
.
为了使用内置函数,你可以按照下面的样子在你的代码中插入一行
:
data_type intrinsic_name (parameters)
其中
:
data_type
返回值的类型,可以是
void, int, m64, m128,
m128d,
或者
m128i.
仅有
_mm_empty
内置函数
返回
void.
内置函数的名称.它可以在源代码中表现为函数而不是内联
intrinsic_name
parameters
实际指令
.
内置函数需要的参数
.
C.1
简单内置函数
注
如要查看表C-1中内置函数的详细描述,请查阅《Intel
®
64 和IA-32架
构软件开发者手册 第2卷 A》第3章
“
指令集参考
, N-Z”
或《Intel
®
64
和IA-32架构软件开发者手册 第2卷 A》第4章
“
指令集参考
, N-Z”.
C-2 Vol. 2B


发布评论