为什么Windows 64选择要求保存/还原xmm6和xmm7



为什么Windows 64选择要求保存/还原xmm6和xmm7?

在Windows32中,您可以编写程序集例程来破坏xmm0…xmm7。但是,如果使用相同的汇编代码并在Windows64中运行,通常会导致应用程序错误,因为VS2007在xmm6和xmm7中存储双精度值。

在我看来,由于X64有16个xmm寄存器xmm0…xmm15(而X32只有8个xmm注册表),因此Microsoft可以选择允许用户对xmm0..xmm7进行clobber(这样他们就可以重用Win32中的汇编例程,而无需考虑),但要求用户保存/恢复xmm8…xmm15。

那么,为了满足我自己的好奇心,为什么Windows 64选择要求保存/还原xmm6和xmm7?

有趣的问题。我发现了这个:Win64结构化异常处理,它声明XMM6到XMM15必须保存/还原,但没有说明为什么

维基百科表示,微软x64调用约定使用XMM0-XMM3,这意味着其他调用被假定为保留。同样,它没有说明原因。

最新更新