Ich versuche gerade eine Funktion zu schreiben die überprüft, ob CPU und Betriebssystem
die Ausführung von SSE3-Befehlen erlauben.
Laut Intel Referenz führt man einfach einen SSE3 Befehl in einem TRY/EXCEPT-Block aus,
um zu sehen ob das System eine
Exception auslöst und eine ungültige Anweisung bemängelt.
Leider kennt Delphi7 die Mnemonics des SSE3-Befehlssatz noch nicht. Es müsste aber möglich
sein die Anweisung direkt als Opcode einzugeben:
Delphi-Quellcode:
function SSE3: Boolean;
begin
try
asm
DD 0660FD0C0h;
//ADDSUBPD XMM0, XMM0 (Ist das korrekt umgesetzt?)
end;
Result := True;
//SSE3 wird untersützt
except
Result := False;
//Keine SSE3 Unterstützung
end;
end;
DD definiert ein DWORD das der Compiler unverändert speichert.
66 0F D0 ist der Opcode für ADDSUBPD,
C0 ist der Opcode für die Operanden XMM0, XMM0
Weiß einer ob das richtig ist/funktioniert? Unsicher bin ich bei der
Reihenfolge der Bytes (Intel Speicherformat). Wenn ich vier einzelne
BYTE (
DB) oder ein DWORD (DD) angebe gibt es keinen Fehler (der Opcode
scheint auch rückwärts für den Prozessor sinnvollzu sein). Wenn ich
zwei WORD definiere gibt es eine Schutzverletzung.
Bin dankbar für jeden Hinweis...