X86 英特尔在instrinsics指南中使用的类型声明?

X86 英特尔在instrinsics指南中使用的类型声明?,x86,intel,sse,intrinsics,X86,Intel,Sse,Intrinsics,根据,英特尔内部函数使用的类型的声明在哪里 例如,定义为: void _mm_stream_si64 (__int64* mem_addr, __int64 a) 但是,在Linux上的gcc上包含之后,类型\uuu int64不存在 GCC/clang的intrinsic主要与ICC的文档兼容,但我认为它们没有提供这种类型。IIRC,他们使用普通的int64\u t来声明英特尔用\u int64@PeterCordes定义的内部函数,这是我第一次尝试,但是int64\u t也不起作用,因为该

根据,英特尔内部函数使用的类型的声明在哪里

例如,定义为:

void _mm_stream_si64 (__int64* mem_addr, __int64 a)

但是,在Linux上的gcc上包含
之后,类型
\uuu int64
不存在

GCC/clang的intrinsic主要与ICC的文档兼容,但我认为它们没有提供这种类型。IIRC,他们使用普通的
int64\u t
来声明英特尔用
\u int64
@PeterCordes定义的内部函数,这是我第一次尝试,但是
int64\u t
也不起作用,因为该函数中的
mem\u addr
被声明为
long*
,而且您不能将
int64\u t*
转换成那样(至少如果您的编译器是严格的,您不能)。所以在这里编写可移植代码似乎很难……哎呀,我知道这是某种标准类型。那么,你为什么不能直接使用
long
?它是否与ICC和/或MSVC上的
\uuu int64
不兼容?它在所有支持Intel Intrinsic的编译器上以32位和64位模式可移植64位。(64位
movinti
仅在64位模式下可用,但可能与其他内部函数相关。虽然通常在32位模式下可以执行64位操作的函数使用
\uuum64
)@PeterCordes-是的,我想我可以使用
long
(这就是我目前正在做的)。我担心的是,在Windows上,像
\uu int64
这样的东西可能是
长int
或其他什么东西,然后我会遇到相反的问题。当然不是,它似乎在那里。有点烦人,你看不懂指南,也不知道要使用什么类型(为什么他们不把它声明为
long
,或者至少定义他们使用的类型?似乎是以Windows为中心的);IIRC
\uuu int64
与Windows和大多数Linux机器上的
long
相同,但在macOS上是
long
。不匹配可能会导致一些问题(例如,它咬了我)。基本上,您可以做的最好的事情就是使用Intel(IMHO)API指定的类型,并根据需要强制转换,以便您的API可以使用更合理的类型。