_BitScanForward64 在 Windows 上使用 MinGW

_BitScanForward64 using MinGW on Windows

我正在尝试在 Windows (GCC 4.8.1) 上使用 MinGW 64 来使用 _BitScanForward64 内在函数 (https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=381,421,373&cats=Bit%20Manipulation)。

我试过了:

#include "immintrin.h"
#include "x86intrin.h"
#include "xmmintrin.h"

但它仍然没有看到函数(根据 Intel 指南,它应该在 "immintrin.h" 中)。

如何在 Windows 上使用 MinGW64 让它工作?

GCC 不为此使用内在函数。它为每个编译器使用 built in function _builtin_ffs. Wikipedia has a nice summary

我认为英特尔列出此内在函数的原因是英特尔 C++ 编译器试图支持与 Microsoft created at least when used in Visual Studio on Windows. This unfortunately means that some intrinsics are not defined for each compiler. Even worse is that sometimes they are defined differently. For example Intel's definition of addcarry-u64 disagrees with Microsoft's definition but looking at the assembly shows that Intel uses Microsoft's definition and GCC and Clang use Intel's defintion 相同的内在函数。

对于大多数 x86 SIMD 内在函数,GCC、Intel、Clang 和 MSVC 都同意 (with a few exceptions coming from MSVC),但对于其他内在函数,您必须习惯它们仅在某些编译器中定义或以不同方式定义或必须使用内置函数或库函数。

Intel 编译器甚至有它自己的内在函数:_bit_scan_forward