[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 4/8] x86/XPTI: use %r12 to write zero into xen_cr3
Now that we zero all registers early on all entry paths, use that to avoid a couple of immediates here. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- v4: Add comments about the %r12 being zero --- We may want to consider eliminating a few more $0 this way. But especially for byte ones I'm not sure it's worth it, due to the REX prefix the use of %r12 would incur. --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -216,7 +216,8 @@ ENTRY(cstar_enter) mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) neg %rcx mov %rcx, %cr3 - movq $0, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) .Lcstar_cr3_okay: ALTERNATIVE_NOP .Lcstar_cr3_start, .Lcstar_cr3_okay, X86_FEATURE_NO_XPTI sti --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -185,7 +185,8 @@ ENTRY(lstar_enter) mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) neg %rcx mov %rcx, %cr3 - movq $0, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) .Llstar_cr3_okay: ALTERNATIVE_NOP .Llstar_cr3_start, .Llstar_cr3_okay, X86_FEATURE_NO_XPTI sti @@ -296,7 +297,8 @@ GLOBAL(sysenter_eflags_saved) mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) neg %rcx mov %rcx, %cr3 - movq $0, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) .Lsyse_cr3_okay: ALTERNATIVE_NOP .Lsyse_cr3_start, .Lsyse_cr3_okay, X86_FEATURE_NO_XPTI sti @@ -348,7 +350,8 @@ ENTRY(int80_direct_trap) mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) neg %rcx mov %rcx, %cr3 - movq $0, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%rbx) .Lint80_cr3_okay: ALTERNATIVE_NOP .Lint80_cr3_start, .Lint80_cr3_okay, X86_FEATURE_NO_XPTI sti @@ -561,10 +564,10 @@ ENTRY(common_interrupt) neg %rcx .Lintr_cr3_load: mov %rcx, %cr3 - xor %ecx, %ecx - mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%r14) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%r14) testb $3, UREGS_cs(%rsp) - cmovnz %rcx, %r15 + cmovnz %r12, %r15 .Lintr_cr3_okay: ALTERNATIVE_NOP .Lintr_cr3_start, .Lintr_cr3_okay, X86_FEATURE_NO_XPTI @@ -605,10 +608,10 @@ GLOBAL(handle_exception) neg %rcx .Lxcpt_cr3_load: mov %rcx, %cr3 - xor %ecx, %ecx - mov %rcx, STACK_CPUINFO_FIELD(xen_cr3)(%r14) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%r14) testb $3, UREGS_cs(%rsp) - cmovnz %rcx, %r15 + cmovnz %r12, %r15 .Lxcpt_cr3_okay: ALTERNATIVE_NOP .Lxcpt_cr3_start, .Lxcpt_cr3_okay, X86_FEATURE_NO_XPTI @@ -824,7 +827,8 @@ handle_ist_exception: neg %rcx .List_cr3_load: mov %rcx, %cr3 - movq $0, STACK_CPUINFO_FIELD(xen_cr3)(%r14) + /* %r12 is still zero at this point. */ + mov %r12, STACK_CPUINFO_FIELD(xen_cr3)(%r14) .List_cr3_okay: ALTERNATIVE_NOP .List_cr3_start, .List_cr3_okay, X86_FEATURE_NO_XPTI _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |