aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64/entry.S
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2012-10-30 16:44:43 +0100
committerJan Beulich <jbeulich@suse.com>2012-10-30 16:44:43 +0100
commit4d246723a85a03406e4969a260291e11b8e05960 (patch)
tree751253390a81fff3466e53780d5883816a50da81 /xen/arch/x86/x86_64/entry.S
parentf8189da5cb099a90bf5d5b41cce2b187531d8bce (diff)
downloadxen-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.S16
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)