Где код, сгенерированный для sqrt и __CIsqrt? - PullRequest
4 голосов
/ 19 апреля 2010

Я установил VC ++ для генерации ASM для метода, который вызывает sqrt, чтобы посмотреть, генерирует ли он инструкции FPU или SSE. Однако, когда вызывается sqrt, я не вижу ASM. Я вижу только вызов некоторой функции __CIsqrt, которая, как я полагаю, является некоторой системной функцией sqrt. Я не вижу ни одного ASM для этого, чтобы знать, что он делает?

Ответы [ 2 ]

5 голосов
/ 19 апреля 2010

Это потому, что компилятор не генерирует код - код уже существует в библиотеке. Если вы хотите увидеть это, то самым простым методом часто является отслеживание вызова функции библиотеки в отладчике в режиме ассемблера.

2 голосов
/ 19 апреля 2010

Математические функции реализованы в библиотеке. Библиотека содержит инструкции FPU / SSE2, но для реализации опции компиляции / fp необходим дополнительный код. Хотя большая часть кода CRT доступна в виде исходного кода в подкаталоге vc \ crt \ src каталога установки VS, для математических функций это не так. Это написано Intel, они, вероятно, не разрешили опубликовать источник. Библиотека находится в vc \ crt \ src \ intel \ mt_lib \ tran.lib. В мегабайте, слишком много, чтобы когда-либо подумать о разборке.

Если вы хотите увидеть сборку, вы должны построить свой проект с / MT и войти в функцию с помощью отладчика.

...