fadd funktioniert nicht

DjMennny
Neuling
Neuling
Beiträge: 6
Registriert: 2. Nov 2011 23:15

fadd funktioniert nicht

Beitrag von DjMennny »

Wir haben ein Problem mit der FPU im Inline Assembler. Wenn wir zwei float Werte auf den FPU-Stack pushen, funktioniert der Befehl fadd, bzw. faddp nicht.
In unserem normalen Assembler Programm funktioniert der faddp.

Code: Alles auswählen

asm(
"fldl 0(%%edi);" // ersten Wert in die FPU laden
"fldl 4(%%edi);" // zweiten Wert in die FPU laden
"faddp;" // Summe sollte in ST(0) stehen
"fstpl (%%eax);" // Ergebnis sollte auf der Adresse von EAX stehen

: // kein output
: "D"(array), "a"(&ergebnis)
: // keine anderen Register
);
Wenn wir den faddp einfach weglassen, stehen in den FPU-Registern die richtigen Werte drin.


Danke schonmal

T.R.
Erstie
Erstie
Beiträge: 11
Registriert: 2. Mai 2011 08:09

Re: fadd funktioniert nicht

Beitrag von T.R. »

Ein Tipp:

Überlegt euch warum ihr bei den fpu Befehlen ein/kein "l" anhängt.

DjMennny
Neuling
Neuling
Beiträge: 6
Registriert: 2. Nov 2011 23:15

Re: fadd funktioniert nicht

Beitrag von DjMennny »

Oh man ...
Danke dir. Sau dumm. Aber komischerweise funktioniert der push und der pop mit dem "l" im Befehl. Der add Befehl aber dann nicht mehr.
So funktioniert der Code:

Code: Alles auswählen

asm(
"fld 0(%%edi);" // ersten Wert in die FPU laden
"fld 4(%%edi);" // zweiten Wert in die FPU laden
"faddp;" // Summe sollte in ST(0) stehen
"fstp (%%eax);" // Ergebnis sollte auf der Adresse von EAX stehen

: // kein output
: "D"(array), "a"(&ergebnis)
: // keine anderen Register
);
Noch einmal vielen Dank!

Benutzeravatar
der Interpeter
Mausschubser
Mausschubser
Beiträge: 73
Registriert: 30. Okt 2007 22:24

Re: fadd funktioniert nicht

Beitrag von der Interpeter »

Danke dass du die Lösung für das Problem gepostet hast, ich hatte genau den selben Fehler und ewig nach Fehlern gesucht :shock:
I never comment my sourcecode. What's HARD to write must be HARD to read!

Antworten

Zurück zu „Archiv“