В Visual 2012 как я могу вызвать функцию sqrtsd asm в проекте c ++
Я не могу найти это через гугл
что-то типа :
double mySqrt(double val)
{
__asm
{
...
sqrstd...
}
}
РЕДАКТИРОВАТЬ:
в 32-битном режиме
В Visual 2012 как я могу вызвать функцию sqrtsd asm в проекте c ++
Я не могу найти это через гугл
что-то типа :
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.
Очевидно, вам придется прочитать несколько других страниц, чтобы собрать все воедино. Корпорация Майкрософт рекомендует использовать встроенные средства для решения этой проблемы.
то, что вы хотите, функция, которую вы ищете, она называется «встроенная сборка», что означает сборка внутри программы C / C ++, в Visual Studio нет хорошей поддержки для этого, для платформы x64 она не предлагает это вообще фича.
http://www.viva64.com/en/k/0015/
Вероятно, вы захотите перейти на лучший компилятор.
push argument \r\n call sqrt
, но вам понадобится 1. искаженное имяstd::sqrt()
, 2. хорошее руководство по сборке. - person   schedule 28.12.2012