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/entry.S | |
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/entry.S')
-rw-r--r-- | xen/arch/x86/x86_64/entry.S | 16 |
1 files changed, 6 insertions, 10 deletions
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) |