Warum hat Windows 64 ausgewählt, dass xmm6 und xmm7 gespeichert / wiederhergestellt werden sollen?

8

Warum hat Windows 64 gewählt, dass xmm6 und xmm7 gespeichert / wiederhergestellt werden müssen?

In Windows 32 könnten Sie Assembly-Routinen schreiben, die xhm0 ... xmm7 überfallen. Wenn Sie jedoch denselben Assembler-Code verwenden und ihn unter Windows 64 ausführen, verursacht dies normalerweise einen Anwendungsfehler, da VS2007 doppelt genaue Werte in xmm6 und xmm7 speichert.

Da X64 16 xmm Register xmm0 ... xmm15 hat (während X32 nur 8 xmm Register hat), hätte Microsoft den Benutzern erlauben können, clobber xmm0..xmm7 zu überlisten (damit sie die Assembly wiederverwenden können) Routinen von Win32, ohne darüber nachzudenken), aber Benutzer müssen speichern / wiederherstellen xmm8 ... xmm15.

Also, um meine eigene Neugier zu befriedigen, warum hat Windows 64 gewählt, dass xmm6 und xmm7 gespeichert / wiederhergestellt werden müssen?

    
Roger Lipscombe 04.11.2008, 15:27
quelle

1 Antwort

1

Interessante Frage. Ich fand dies: Win64 strukturierte Ausnahme Behandlung , die besagt, dass XMM6 zu XMM15 muss gespeichert / wiederhergestellt werden, sagt aber nicht warum .

Wikipedia sagt, dass die Microsoft x64-Aufrufkonvention XMM0 - XMM3 verwendet, was bedeutet, dass von den anderen angenommen wird bewahrt werden. Auch hier heißt es nicht warum.

    
Roger Lipscombe 04.11.2008 16:20
quelle

Tags und Links