Вызовите asm sqrtsd под C++
В Visual 2012, как я могу вызвать функцию sqrtsd asm в проекте C++
Я не могу найти его через Google
что-то вроде:
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
РЕДАКТИРОВАТЬ:
в 32-битном режиме
4 ответа
Я думаю, что делать это несколько академически, так как вряд ли это принесет какую-то реальную выгоду, и вполне вероятно, что это штраф. Тем не мение:
double mySqrt(double val)
{
double retu;
__asm
{
sqrtsd xmm1, val
movsd retu, xmm1
}
return retu;
}
Почему бы не использовать функцию sqrt http://www.cplusplus.com/reference/cmath/sqrt/ которая будет переносимой?
По умолчанию VS 2012 заменит sqrt() на __libm_sse2_sqrt_precise
, Но если вы скомпилируете с /fp:fast
это заменит sqrtsd
Как указано в других ответах, вы можете или не сможете использовать встроенный ассемблер.
Есть, однако, так называемые встроенные функции для SSE (и MMX, и других):
Тот для sqrtsd
это _mm_sqrt_sd
Вам, очевидно, придется прочитать несколько других страниц, чтобы собрать все это вместе. Intrinsics - рекомендованный Microsoft способ решить эту проблему.
Что вам нужно, функция, которую вы ищете, она называется "встроенная сборка", то есть, в основном, сборка внутри программы на C/C++, Visual Studio не предлагает хорошей поддержки для этого, для платформы x64 bit она не предлагает эта особенность вообще.
http://www.viva64.com/en/k/0015/
Вы, вероятно, хотите переключиться на лучший компилятор.