C FXRSTOR之前是否可以执行两次FXSAVE?
在入侵Linux内核时,我注意到它会在执行FPU相关任务之前执行C FXRSTOR之前是否可以执行两次FXSAVE?,c,assembly,linux-kernel,x86,x86-64,C,Assembly,Linux Kernel,X86,X86 64,在入侵Linux内核时,我注意到它会在执行FPU相关任务之前执行FXSAVE指令。我知道fxrsave指令会将FPU状态保存到内存中的一个目标,该目标可以通过FXRSTOR指令恢复。我的问题是,在执行FXRSTOR指令之前,是否可以执行fxrsave两次 例如: char fxsave_region1[512] __attribute__((aligned(16))); char fxsave_region2[512] __attribute__((aligned(16))); asm vol
FXSAVE
指令。我知道fxrsave
指令会将FPU状态保存到内存中的一个目标,该目标可以通过FXRSTOR
指令恢复。我的问题是,在执行FXRSTOR
指令之前,是否可以执行fxrsave
两次
例如:
char fxsave_region1[512] __attribute__((aligned(16)));
char fxsave_region2[512] __attribute__((aligned(16)));
asm volatile(" fxsave; "::"m"(fxsave_region1));
/* miscellaneous floating point operations */
asm volatile(" fxsave; "::"m"(fxsave_region2)); /* will this work? */
/* some more miscellaneous floating point operations */
asm volatile(" fxrstor; "::"m"(fxsave_region2));
/* even more miscellaneous floating point operations */
asm volatile(" fxrstor; "::"m"(fxsave_region1));
或者只支持一级保存?与
F(N)SAVE
不同,FXSAVE
不会更改FPU/MMX和SSE寄存器的状态,因此您可以重复多次。与F(N)SAVE
不同,FXSAVE
不会更改FPU/MMX和SSE寄存器的状态,因此,您可以重复多次。因此,FPU状态可以在两条FXSAVE
指令之间更改,从而将两种不同的FPU状态保存到内存中,然后可以在任何时候使用各自的FXRSTOR
指令独立地恢复?因此,FPU状态可以在两条fxrsave
指令之间更改,从而将两种不同的FPU状态保存到内存中,然后,可以使用各自的FXRSTOR
指令随时独立地恢复哪个?