GCC Inline Assembler (XCHG)

Модератор: Модераторы разделов

BratSinot
Сообщения: 812
ОС: Slackware64

GCC Inline Assembler

Сообщение BratSinot »

Доброго времени суток!

Как через XCHG поменять две переменные float/double/long double местами? Есть такой код:

Код: Выделить всё

 float x, y;

 x=10.2;
 y=10.31;

asm
(
 "xchg %0, %1"
 : "=r"(x)
 : "r"(y)
);

 printf("%lf\n", y);

Он работает прекрастно для целочисленных типов, а вот для чисел с плавающей точкой почему-то не хочет.

Попутный вопрос, как таким образом поменять значение двух элементов массива?

Брр.... Что за бред? После выполнения этого кода значение x==y==10.31, при чем то-же самое в случае с целочисленными типами.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: GCC Inline Assembler

Сообщение Portnov »

Гм, а про сопроцессор и его собственный стек ничего не слышали? ;)
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC Inline Assembler

Сообщение BratSinot »

Portnov писал(а):
03.08.2011 12:25
Гм, а про сопроцессор и его собственный стек ничего не слышали? ;)

А при чем здесь сопроцессор? Уж для целочисленных типов его нету.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: GCC Inline Assembler

Сообщение Portnov »

BratSinot писал(а):
03.08.2011 12:06
Он работает прекрастно для целочисленных типов, а вот для чисел с плавающей точкой почему-то не хочет.

ы?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: GCC Inline Assembler

Сообщение BratSinot »

Portnov писал(а):
03.08.2011 13:28
BratSinot писал(а):
03.08.2011 12:06
Он работает прекрастно для целочисленных типов, а вот для чисел с плавающей точкой почему-то не хочет.

ы?

Брр.... Что за бред? После выполнения этого кода значение x==y==10.31, при чем то-же самое в случае с целочисленными типами.


Portnov писал(а):
03.08.2011 12:25
Гм, а про сопроцессор и его собственный стек ничего не слышали? ;)

А при чем здесь сопроцессор? Уж для целочисленных типов его нету.

А еще я не слышал чтоб gcc использовал stN регистры. Он как всегда, стек, регистры процессора, или различные sse регистры.
Спасибо сказали: