2008-11-04 7 views
8

Pourquoi Windows 64 a-t-il choisi d'exiger que xmm6 et xmm7 soient sauvegardés/restaurés?Pourquoi Windows 64 a-t-il choisi d'exiger que xmm6 et xmm7 soient sauvegardés/restaurés?

Dans Windows 32, vous pouviez écrire des routines d'assemblage qui ont tordu xmm0 ... xmm7. Mais si vous prenez le même code d'assemblage et que vous l'exécutez dans Windows 64, cela provoquera généralement une erreur d'application car VS2007 stocke les valeurs à double précision dans xmm6 et xmm7.

Il me semble que puisque X64 a 16 registres xmm xmm0 ... xmm15 (alors que X32 n'a que 8 registres xmm), alors Microsoft aurait pu choisir de permettre aux utilisateurs de claquer xmm0..xmm7 (afin qu'ils puissent réutiliser routines d'assemblage à partir de Win32 sans y penser) mais nécessitent des utilisateurs pour enregistrer/restaurer xmm8 ... xmm15. Donc, pour satisfaire ma propre curiosité, pourquoi Windows 64 a-t-il choisi d'exiger que xmm6 et xmm7 soient sauvegardés/restaurés?

Répondre

1

Question intéressante. J'ai trouvé ceci: Win64 Structured Exception Handling, qui indique que XMM6 à XMM15 doit être sauvegardé/restauré, mais ne dit pas pourquoi. Wikipedia dit que le Microsoft x64 calling convention utilise XMM0 - XMM3, ce qui implique que les autres sont supposés être conservés. Encore une fois, ça ne dit pas pourquoi.

Questions connexes