1/* 2 * GPR context switch between host and guest. 3 * Used by IO-port-access emulation stub. 4 * 5 * Copyright (c) 2006, Novell, Inc. 6 */ 7 8 .file __FILE__ 9 10#include <asm/asm_defns.h> 11 12/* Load guest GPRs. Parameter in %rdi, clobbers all registers. */ 13FUNC(load_guest_gprs) 14 movq UREGS_rdx(%rdi), %rdx 15 movq UREGS_rax(%rdi), %rax 16 movq UREGS_rbx(%rdi), %rbx 17 movq UREGS_rsi(%rdi), %rsi 18 movq UREGS_rbp(%rdi), %rbp 19 movq UREGS_r8 (%rdi), %r8 20 movq UREGS_r12(%rdi), %r12 21 movq UREGS_r9 (%rdi), %r9 22 movq UREGS_r13(%rdi), %r13 23 movq UREGS_r10(%rdi), %r10 24 movq UREGS_r14(%rdi), %r14 25 movq UREGS_r11(%rdi), %r11 26 movq UREGS_r15(%rdi), %r15 27 movq UREGS_rcx(%rdi), %rcx 28 movq UREGS_rdi(%rdi), %rdi 29 RET 30END(load_guest_gprs) 31 32/* Save guest GPRs. Parameter on the stack above the return address. */ 33FUNC(save_guest_gprs) 34 pushq %rdi 35 movq 2*8(%rsp), %rdi 36 movq %rax, UREGS_rax(%rdi) 37 popq UREGS_rdi(%rdi) 38 movq %r15, UREGS_r15(%rdi) 39 movq %r11, UREGS_r11(%rdi) 40 movq %r14, UREGS_r14(%rdi) 41 movq %r10, UREGS_r10(%rdi) 42 movq %r13, UREGS_r13(%rdi) 43 movq %r9, UREGS_r9 (%rdi) 44 movq %r12, UREGS_r12(%rdi) 45 movq %r8, UREGS_r8 (%rdi) 46 movq %rbp, UREGS_rbp(%rdi) 47 movq %rsi, UREGS_rsi(%rdi) 48 movq %rbx, UREGS_rbx(%rdi) 49 movq %rdx, UREGS_rdx(%rdi) 50 movq %rcx, UREGS_rcx(%rdi) 51 RET 52END(save_guest_gprs) 53