2009-09-15 3 views
0

Я использовал gdb для выполнения кода ассемблера, реализующего стандартную функцию C sin() в стандартной математической библиотеке C (-lm -march = pentium3 -mfpmath = 387). Там много заглушки, и я не знаю, почему они не просто ввели инструкцию ассемблера fsin. То же самое происходит с другими математическими функциями. Почему они не просто называют соответствующую инструкцию FPU?Реализация функций math.h в ассемблере

+1

Вы компилировались с -O2 или -O3? – joeforker

+0

Привет, в моем MacBook я использую: НКУ sin.c -S -mfpmath = 387 -mdynamic-нет-ПИК НКУ sin.s -g -o грех Я попытался -O2/-O3, но позже я понял, что параметры оптимизации не изменяют содержимое системных библиотек. – Freeman

ответ

-1

Вы должны, вероятно, enable intrinsics - внутренняя реализация sinf в значительной степени обязательно будет встроена (если, скажем, кто-то не берет адрес или какие-либо другие необычные обстоятельства).

В VS, который составляет составление with /Oi.

+0

Нет никаких изменений для 'fsin' – hirschhornsalz

2

Поскольку «много окурка там» быстрее и точнее, чем x87 fsin инструкции. Вопреки распространенному мнению, библиотекари обычно знают, что делают.

+1

+1 ссылка для дополнения вашего ответа. В случае, если он сходит с ума, название потока «x87 FSIN/FCOS посредственная точность», и это в значительной степени подводит итог дискуссиям: http://software.intel.com/en-us/forums/showthread.php? t = 74354 –

+0

Специально для больших аргументов результаты 'fsin' - это в основном случайные числа – hirschhornsalz

Смежные вопросы