вызов asm sqrtsd под c ++

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

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

что-то типа :

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

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

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


person Guillaume07    schedule 28.12.2012    source источник
comment
Что-то вроде push argument \r\n call sqrt, но вам понадобится 1. искаженное имя std::sqrt(), 2. хорошее руководство по сборке.   -  person    schedule 28.12.2012
comment
... а не 64-битная цель   -  person SomeWittyUsername    schedule 28.12.2012
comment
Связанный с этим вопрос: Можно ли значительно свернуть более быстрая версия sqrt?   -  person Bo Persson    schedule 28.12.2012


Ответы (4)


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

double mySqrt(double val)
{
    double retu;

    __asm
    {
        sqrtsd xmm1, val
        movsd retu, xmm1
    }
    return retu;
}
person JasonD    schedule 28.12.2012

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

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

person benjarobin    schedule 28.12.2012
comment
Я хотел бы быть уверен в коде asm, потому что у меня может быть вызов __libm_sse2_sqrt_precise - person Guillaume07; 28.12.2012
comment
Скомпилируйте с / fp: fast, чтобы компилятор напрямую генерировал sqrtpd без использования библиотечной функции. - person Hans Passant; 28.12.2012

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

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

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

Для sqrtsd это _mm_sqrt_sd.

Очевидно, вам придется прочитать несколько других страниц, чтобы собрать все воедино. Корпорация Майкрософт рекомендует использовать встроенные средства для решения этой проблемы.

person Mats Petersson    schedule 28.12.2012

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

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

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

person user1849534    schedule 28.12.2012