小编Nim*_*imo的帖子

对于 64 位目标,在 MSVC 2019 中找不到像 _mm_cvtpd_pi32 这样的 MMX 内在函数;与 2013 年相比有何变化?

我目前正在将大型代码库从 VS2013 更新到 VS2019。我遇到的编译器错误之一如下:

内部函数.h(348):错误C3861:“_mm_cvtpd_pi32”:未找到标识符

这个内部函数在 Visual Studio 的“emmintrin.h”中定义。我只在针对 64 位构建时收到此错误。仔细检查会发现,在 2013 年到 2019 年之间,emmintrin.h 的定义从这个改变了:

extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);
Run Code Online (Sandbox Code Playgroud)

对此:

#if defined(_M_IX86)
extern __m64 _mm_cvtpd_pi32(__m128d _A);
extern __m64 _mm_cvttpd_pi32(__m128d _A);
extern __m128d _mm_cvtpi32_pd(__m64 _A);
#endif
Run Code Online (Sandbox Code Playgroud)

即:预处理器指令确保函数现在仅可用于 32 位目标。无论目标是什么(64 位或 32 位),产生错误的第 3 方头文件都会使用这些函数。据推测,这里最好的做法是编辑这个头文件,以确保仅对 32 位目标调用此函数。然而,我更好奇的是,为什么从 2013 年到 2019 年发生了变化?我在这里看到了这个函数的描述:

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_pi32&expand=1705

从一开始它就从未适用于 64 位目标吗?或者它是否已被我需要考虑的 64 位版本替换?

x86-64 intrinsics visual-c++ mmx visual-studio-2019

5
推荐指数
1
解决办法
389
查看次数

标签 统计

intrinsics ×1

mmx ×1

visual-c++ ×1

visual-studio-2019 ×1

x86-64 ×1