Visual Studio — вызовите asm sqrtsd под переполнением стека

В Visual 2012, как я могу вызвать функцию sqrtsd asm в проекте C ++

Я не могу найти его через Google

что-то вроде :

double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}

РЕДАКТИРОВАТЬ:

в 32-битном режиме

2

Решение

Я думаю, что делать это — несколько академическое упражнение, поскольку вряд ли оно принесет какую-то реальную выгоду и, скорее всего, штраф. Тем не мение:

double mySqrt(double val)
{
double retu;

__asm
{
sqrtsd xmm1, val
movsd retu, xmm1
}
return retu;
}
2

Другие решения

Почему бы не использовать функцию sqrt http://www.cplusplus.com/reference/cmath/sqrt/ который будет портативным?

По умолчанию VS 2012 заменит sqrt () на __libm_sse2_sqrt_precise, Но если вы скомпилируете с /fp:fast это заменит sqrtsd

3

Как указано в других ответах, вы можете или не сможете использовать встроенный ассемблер.

Есть, однако, так называемые встроенные функции для SSE (и MMX и других):

внутренние функции для MS VS

Тот для sqrtsd является _mm_sqrt_sd

Вам, очевидно, придется прочитать несколько других страниц, чтобы собрать все это вместе. Intrinsics — рекомендованный Microsoft способ решить эту проблему.

2

что вы хотите, функция, которую вы ищете, она называется «встроенная сборка», то есть сборка внутри программы на C / C ++, Visual Studio не предлагает хорошей поддержки для этого, для платформы x64 bit она не предлагает эта особенность вообще.

http://www.viva64.com/en/k/0015/

Вы, вероятно, хотите переключиться на лучший компилятор.

0
По вопросам рекламы [email protected]