2

我刚刚注意到 SSE2 指令集中有一个_mm_cvtsd_si64和一个_mm_cvtsd_si64x内在函数。根据英特尔内在函数指南,两者的作用完全相同。那么差异在哪里,或者,如果没有,为什么会有两个相同的内在函数?

这只是一个例子,还有更多带有 si64 和 si64x 版本的内在函数似乎做同样的事情。

4

2 回答 2

4

这可能是历史性的,可以追溯到 MMX/SSE 的早期,并且可能在不同的内在函数集之间存在一些差异。

请注意,即使现​​在一些内在函数也有6464x版本,因为它们采用不同的参数类型,即使它们做同样的事情,例如

__m128i _mm_set1_epi64x (__int64 a)

__m128i _mm_set1_epi64 (__m64 a)
于 2013-09-04T14:06:21.167 回答
1

两者不一样。__m64 是 MMX 寄存器,在 x86_64 上不推荐使用 MMX。MMX 寄存器与 x87 共享寄存器文件,并且操作系统不会在 x86_64 上的上下文切换之间保留这些寄存器文件。当然,MMX 仍然可以在 32 位进程中使用。__int64 是 Microsoft 的 64 位有符号整数 ALU 寄存器的 typedef(在 32 位模式下模拟)。由于这些原因,在 64 位程序上首选 64x 格式。

于 2015-03-03T09:55:42.180 回答