2013-07-15 1 views
1

У меня есть этот код, который я пытаюсь работать с GCC-TDM 1.7.4-2 с использованием -msse4.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 заканчивается), но заголовки intrinsics не нужны?

Я убедился, что заголовки intrinsics находятся в правильном каталоге include. Heres код,

#include <x86intrin.h> 
#include <stdio.h> 

int main() 
{ 
     unsigned short __X = 256; 
     unsigned short RESULT = __lzcnt16(__X); 

     printf("result: ", RESULT); 

     return 0; 
} 
+0

Вы знаете, что эта инструкция AMD только, не так ли? –

+0

@Paul R Я использую процессор AMD-8150 FX, поэтому он должен работать. Почему Intel не имеет этого? – pandoragami

+0

Intel наконец-то добавила lzcnt (начиная с Haswell). Но для Intel и AMD lzcnt обнаруживается с использованием выделенного бита cpuid. Вот это боль. Для многих приложений команда bsr является подходящей заменой для lzcnt. Как Intel, так и AMD включили инструкцию bsr на века. Поэтому во многих случаях безопасно использовать его без какой-либо проверки cpuid. См. Это приложение для примера использования bsr вместо lzcnt: http://notabs.org/primitivepolynomials/version2/2.5/primitivepolynomials.htm. – ScottD

ответ

2

Вы должны использовать GCC опции командной строки: -mlzcnt

+0

И '-mlzcnt' должно быть там, где' -msse' добавляется для компиляции вправо. Я получаю это сейчас 'Компиляция: sse_lzcnt.c cc1.exe: ошибка: непризнанная опция командной строки« -mlzcnt »' – pandoragami

+0

ОК, извините. Для этой версии gcc используйте -mbmi. По-видимому, gcc недавно изменил параметры, которые позволяют эту инструкцию. – ScottD

+0

Теперь он даже не узнает об этом? 'Compiling: sse_lzcnt.c cc1.exe: ошибка: непризнанная опция командной строки« -mbmi »' – pandoragami