mini-os/x86-64 entry: define macros for registers partial save and restore

No functional changes.

For saving and restoring registers rbx, rbp, and r12-r15,
define and use macros SAVE_REST and RESTORE_REST respectively.

Signed-off-by: Xu Zhang <xzhang@cs.uic.edu>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
Xu Zhang authored and Ian Campbell committed 2013-04-22 12:32:11 +01:00
1 parent a76d139f18
commit 7e84f54da5
1 file changed
+22 -15
+22 -15
View File
@@ -59,6 +59,25 @@ NMI_MASK = 0x80000000
addq $9*8+8,%rsp
.endm
.macro RESTORE_REST
movq (%rsp),%r15
movq 1*8(%rsp),%r14
movq 2*8(%rsp),%r13
movq 3*8(%rsp),%r12
movq 4*8(%rsp),%rbp
movq 5*8(%rsp),%rbx
addq $6*8,%rsp
.endm
.macro SAVE_REST
subq $6*8,%rsp
movq %rbx,5*8(%rsp)
movq %rbp,4*8(%rsp)
movq %r12,3*8(%rsp)
movq %r13,2*8(%rsp)
movq %r14,1*8(%rsp)
movq %r15,(%rsp)
.endm
.macro HYPERVISOR_IRET flag
testl $NMI_MASK,2*8(%rsp)
@@ -173,13 +192,7 @@ scrit: /**** START OF CRITICAL REGION ****/
14: XEN_LOCKED_BLOCK_EVENTS(%rsi)
XEN_PUT_VCPU_INFO(%rsi)
subq $6*8,%rsp
movq %rbx,5*8(%rsp)
movq %rbp,4*8(%rsp)
movq %r12,3*8(%rsp)
movq %r13,2*8(%rsp)
movq %r14,1*8(%rsp)
movq %r15,(%rsp)
SAVE_REST
movq %rsp,%rdi # set the argument again
jmp 11b
ecrit: /**** END OF CRITICAL REGION ****/
@@ -199,14 +212,8 @@ retint_restore_args:
HYPERVISOR_IRET 0
error_exit:
movq (%rsp),%r15
movq 1*8(%rsp),%r14
movq 2*8(%rsp),%r13
movq 3*8(%rsp),%r12
movq 4*8(%rsp),%rbp
movq 5*8(%rsp),%rbx
addq $6*8,%rsp
error_exit:
RESTORE_REST
XEN_BLOCK_EVENTS(%rsi)
jmp retint_kernel
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.