C FXRSTOR之前是否可以执行两次FXSAVE?

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

在入侵Linux内核时,我注意到它会在执行FPU相关任务之前执行
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
指令随时独立地恢复哪个?