aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_64
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
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')
-rw-r--r--xen/arch/x86/x86_64/compat/entry.S6
-rw-r--r--xen/arch/x86/x86_64/entry.S16
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)