diff options
author | Jan Beulich <jbeulich@suse.com> | 2012-10-30 16:44:43 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2012-10-30 16:44:43 +0100 |
commit | 4d246723a85a03406e4969a260291e11b8e05960 (patch) | |
tree | 751253390a81fff3466e53780d5883816a50da81 /xen/arch/x86/x86_64 | |
parent | f8189da5cb099a90bf5d5b41cce2b187531d8bce (diff) | |
download | xen-4d246723a85a03406e4969a260291e11b8e05960.tar.gz xen-4d246723a85a03406e4969a260291e11b8e05960.tar.bz2 xen-4d246723a85a03406e4969a260291e11b8e05960.zip |
x86: use MOV instead of PUSH/POP when saving/restoring register state
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/x86_64')
-rw-r--r-- | xen/arch/x86/x86_64/compat/entry.S | 6 | ||||
-rw-r--r-- | xen/arch/x86/x86_64/entry.S | 16 |
2 files changed, 8 insertions, 14 deletions
diff --git a/xen/arch/x86/x86_64/compat/entry.S b/xen/arch/x86/x86_64/compat/entry.S index e6b52f345e..a6595481bc 100644 --- a/xen/arch/x86/x86_64/compat/entry.S +++ b/xen/arch/x86/x86_64/compat/entry.S @@ -21,8 +21,7 @@ ENTRY(compat_hypercall) UNLIKELY_START(ne, msi_check) movl $HYPERCALL_VECTOR,%edi call check_for_unexpected_msi - RESTORE_ALL - SAVE_ALL + LOAD_C_CLOBBERED UNLIKELY_END(msi_check) GET_CURRENT(%rbx) @@ -173,8 +172,7 @@ compat_bad_hypercall: /* %rbx: struct vcpu, interrupts disabled */ compat_restore_all_guest: ASSERT_INTERRUPTS_DISABLED - RESTORE_ALL - addq $8,%rsp + RESTORE_ALL adj=8 .Lft0: iretq .section .fixup,"ax" diff --git a/xen/arch/x86/x86_64/entry.S b/xen/arch/x86/x86_64/entry.S index ffb9314f40..9076f63a86 100644 --- a/xen/arch/x86/x86_64/entry.S +++ b/xen/arch/x86/x86_64/entry.S @@ -47,12 +47,10 @@ restore_all_guest: cmpl $1,%ecx ja .Lforce_iret - addq $8,%rsp - popq %rcx # RIP - popq %r11 # CS - cmpw $FLAT_USER_CS32,%r11 - popq %r11 # RFLAGS - popq %rsp # RSP + cmpw $FLAT_USER_CS32,16(%rsp)# CS + movq 8(%rsp),%rcx # RIP + movq 24(%rsp),%r11 # RFLAGS + movq 32(%rsp),%rsp # RSP je 1f sysretq 1: sysretl @@ -101,8 +99,7 @@ failsafe_callback: ALIGN /* No special register assumptions. */ restore_all_xen: - RESTORE_ALL - addq $8,%rsp + RESTORE_ALL adj=8 iretq /* @@ -311,8 +308,7 @@ ENTRY(int80_direct_trap) UNLIKELY_START(ne, msi_check) movl $0x80,%edi call check_for_unexpected_msi - RESTORE_ALL - SAVE_ALL + LOAD_C_CLOBBERED UNLIKELY_END(msi_check) GET_CURRENT(%rbx) |