我有這樣的代碼,其我試圖使用-msse4.2
GCC-TDM 1.7.4-2運行(我試圖msse4
)配有一個錯誤:對__lzcnt16的未定義引用?
sse_lzcnt.c|7|warning: implicit declaration of function '__lzcnt16'|
sse_lzcnt.c|9|warning: too many arguments for format|
obj\Debug\sse_lzcnt.o||In function `main':|
sse_lzcnt.c|7|undefined reference to `__lzcnt16'|
一個未定義的參考通常是一個連接錯誤,由於一個缺少的lib文件(.a結尾),但內部頭文件不需要一個?
我確保內部頭文件在正確的包含目錄中。繼承人的代碼,
#include <x86intrin.h>
#include <stdio.h>
int main()
{
unsigned short __X = 256;
unsigned short RESULT = __lzcnt16(__X);
printf("result: ", RESULT);
return 0;
}
你知道,這個指令是AMD-而已,對不對? –
@Paul R我正在使用AMD-8150 FX處理器,因此它應該可以工作。爲什麼英特爾沒有它? – pandoragami
英特爾終於增加了添加lzcnt(以Haswell開頭)。但是對於英特爾和AMD來說,使用專用cpuid位來檢測lzcnt。多麼痛苦。對於許多應用程序,bsr指令是lzcnt的合適替代品。英特爾和AMD都將bsr指令納入了年齡。所以在很多情況下,使用它沒有任何cpuid檢查是安全的。有關使用bsr代替lzcnt的示例,請參閱此應用程序:http://notabs.org/primitivepolynomials/version2/2.5/primitivepolynomials.htm。 – ScottD