Вызовите 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, и других):

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

Тот для sqrtsd это _mm_sqrt_sd

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

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

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

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

Другие вопросы по тегам