Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我在内核代码中使用AES-NI 。AES 新指令使用 XMM 寄存器,我想确保从用户模式到内核模式的转换以及回到用户模式的转换将保留 XMM 寄存器的状态。
MSDN 链接如下:
在 64 位版本的 Windows 中,操作系统跨线程(和进程)切换保留 SSE 寄存器。结果是 64 位驱动程序代码可以在任何 IRQL 上安全地使用浮点运算。
它是否确认我在调用内核代码时不必保存寄存器状态?
它说它保留 SSE 寄存器,但不保留 AVX。
就在链接下面说
要在内核模式下使用 AVX 寄存器,驱动程序(x86 和 x64)必须显式保存和恢复 AVX 寄存器。
因此,如果您使用 AES 内在函数,则依赖自动保留的寄存器是安全的__m128i,但不是__m256iand __m512i。
__m128i
__m256i
__m512i