2015-10-20 85 views
1

我正嘗試在Windows(GCC 4.8.1)上使用MinGW 64的_BitScanForward64內部函數(https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=381,421,373&cats=Bit%20Manipulation)。_BitScanForward64在Windows上使用MinGW

我想:

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

,但它仍然沒有看到功能(根據英特爾引導它應該是「immintrin.h」)。

如何在Windows上使用MinGW64來使用它?

+0

英特爾編譯器可以在Visual Studio中使用。它們支持微軟使用的一些內在特性,但不支持GCC。 GCC爲此建立了功能。搜索周圍,你會發現他們。 https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html –

+0

嘗試'_builtin_ffs' –

回答

1

GCC沒有爲此使用內在。它使用built in function_builtin_ffs。維基百科每個編譯器都有一個nice summary

原因英特爾列出了這種內在的,我認爲是英特爾C++編譯器試圖以支持其Microsoft created在Visual Studio在Windows上使用至少在同一內部函數。這不幸意味着某些內部函數沒有爲每個編譯器定義。更糟糕的是,有時他們的定義不同。例如英特爾的定義addcarry-u64不同意微軟的定義,但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),但對於其他必須習慣的內部函數,它們只在某些編譯器中定義或者被定義爲不同,或者必須使用內置函數或庫函數。

英特爾編譯器甚至有它自己的內在因素:_bit_scan_forward