Эй, я пытаюсь научиться писать код сборки в моих программах на C. Я понимаю целые числа в сборке, но поплавки продолжают меня трогать.C Встроенная сборка - несоответствие типа операнда для 'fst'
double asmSqrt(double x) {
double o;
__asm__ ("fld %1;"
"fsqrt;"
"fst %0;"
: "=g" (o)
: "g" (x)
);
return o;
}
Как вы можете видеть, я просто пытаюсь найти квадратный корень из х. Но всякий раз, когда я пытаюсь скомпилировать его, я получаю ошибку несоответствия типа операнда.
я следовал один и тот же синтаксис, используемый здесь: http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx?display=Print
PS: Im используя MinGW GCC на Windows XP
ли призвание соглашение о Windows возвращает float в регистр ST0 или FP0? – rsaxvc
Каковы ваши флагов для компилятора? – rsaxvc
Я думаю, что будет ненужно сброситься обратно в стек, чтобы избежать того, что вам нужно также реализовать возврат. Промывка стека также снижает вашу точность до 64-битного двойного вместо 80-бит x87. (Если вы делаете это для скорости, вам нужно больше, если для изучения, ответ Карла исправил его для меня). – rsaxvc