9
« am: 30. October 2011, 17:39 »
Da ich ja bekanntlich kein OS sonder einen Compiler plane hab ich mir schon mal über alle Möglichen Dingen Gedanken gemacht. Ein Aspect sind ist die Rückgabe von 128 bit Daten (die mit int128 und Gleitkommazahlen vierfacher Genauigkeit unterstützt werden sollen.)
Bei der Rückgabe solcher Zahlen von Funktionen gibt es folgende Ansprüche
- ecx ist für die Fehlerrückgabe reserviert und mussfreigehalten werden
- Die xmm Register werden nicht Vorrausgesetzt.
Es gibt folgende Möglichkeiten:
edi:esi:edx:eax
Vorteil: Logische Erweiterung zu 64 bit
Nachteil: Verletzung der "Nur eax, ecx, edx und der Gleitkomma dürfen verändert werden"-Regel.
st(1):st(0) {64 bit Integer lassen sich sicher in Gleitkommaregister laden.}
Vorteil: Die Register bleiben frei.
Nachteil: Daten können quasi nur direkt in den Speicher kopiert werden.
Speicherstelle mit Pointer in eax
Vorteil: Die Register bleiben frei, Kompatibel zur Übergabe von structs
Nachteil: Es muss zuerst eine geeignete Speicherstelle reserviert werden.
Ich wollt mal fragen, was ihr da für das beste haltet.