Не работает ассемблерная вставка

 
0
 
C++
ava
Чупакабро | 04.10.2013, 16:22
Помогите плз решить проблему.
сделал функцию для извлечения квадратного корня

float sqrtmy(float x) {
    
    __asm {
        finit;
        fld x;
        fsqrt;
        fstp x
    }
    
}

В дебаг режиме все работает, в релиз - какой-то мусор возвращается
Среда - Visual Studio 2010
Может стоило продублировать в АСМ раздел, но вопрос наверное больше к компилятору Студии?
Comments (8)
ava
volatile | 04.10.2013, 16:19 #
Цитата (Чупакабро @  4.10.2013,  15:22 findReferencedText)
 float sqrtmy(float x) {
  
  __asm {
    finit;
    fld x;
    fsqrt;
    fstp x
  }
    return x;

}

хотя бы так.
ava
Чупакабро | 04.10.2013, 17:17 #
volatile
не, return там не нужен, ибо имеет место ассемблерная вставка, где результат помещается куда надо
(а если бы это было не так, то в дебаг режиме программа тоже не работала бы)
решение оказалось в том, чтобы отключить оптимизации в компиляторе:
user posted image
Вот так: сам спросил - сам ответил...
Может кому пригодится
ava
volatile | 04.10.2013, 17:38 #
Цитата (Чупакабро @  4.10.2013,  17:17 findReferencedText)
решение оказалось в том, чтобы отключить оптимизации в компиляторе:
  

В гробу я видал такие решения.
попробуйте как я сказал.

либо
Цитата (Чупакабро @  4.10.2013,  17:17 findReferencedText)
return там не нужен

тогда делайте void, нахрена тип возврата указали то?
и передавайте по указателю(ссылке), если вам нужно поместить в х
ava
Чупакабро | 04.10.2013, 17:47 #
Цитата (volatile @  4.10.2013,  17:38 findReferencedText)
попробуйте как я сказал.

Попробовал, к сожалению не помогло
ava
volatile | 04.10.2013, 17:54 #
Чупакабро, как вы вызываете вашу функцию?
ее надоа вызывать так
result = sqrtmy(2.0);

 smile 


ava
Чупакабро | 04.10.2013, 17:57 #
вызываю, например, так:

float l = sqrt(x)

да дело-то не в этом.
значение она возвращает всегда
только не всегда это правильное значение
ava
volatile | 04.10.2013, 18:13 #
вот не поленился щас, запустил студию
мой вариант и в дебаге и в релизе все выдает правильно.
попробуйте еще раз, медленно и не спеша...   smile 
ava
Чупакабро | 05.10.2013, 11:25 #
volatile
на свежую голову проверил, работает
спасибо!
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit