В Visual 2012, как я могу вызвать функцию sqrtsd asm в проекте C ++
Я не могу найти его через Google
что-то вроде :
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
РЕДАКТИРОВАТЬ:
в 32-битном режиме
Я думаю, что делать это — несколько академическое упражнение, поскольку вряд ли оно принесет какую-то реальную выгоду и, скорее всего, штраф. Тем не мение:
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/
Вы, вероятно, хотите переключиться на лучший компилятор.