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 12ENTRY(host_to_guest_gpr_switch) 13 movq (%rsp), %rcx 14 movq %rdi, (%rsp) 15 movq UREGS_rdx(%rdi), %rdx 16 pushq %rbx 17 movq UREGS_rax(%rdi), %rax 18 movq UREGS_rbx(%rdi), %rbx 19 pushq %rbp 20 movq UREGS_rsi(%rdi), %rsi 21 movq UREGS_rbp(%rdi), %rbp 22 pushq %r12 23 movq UREGS_r8(%rdi), %r8 24 movq UREGS_r12(%rdi), %r12 25 pushq %r13 26 movq UREGS_r9(%rdi), %r9 27 movq UREGS_r13(%rdi), %r13 28 pushq %r14 29 movq UREGS_r10(%rdi), %r10 30 movq UREGS_r14(%rdi), %r14 31 pushq %r15 32 movq UREGS_r11(%rdi), %r11 33 movq UREGS_r15(%rdi), %r15 34 pushq %rcx /* dummy push, filled by guest_to_host_gpr_switch pointer */ 35 pushq %rcx 36 leaq guest_to_host_gpr_switch(%rip),%rcx 37 movq %rcx,8(%rsp) 38 movq UREGS_rcx(%rdi), %rcx 39 movq UREGS_rdi(%rdi), %rdi 40 ret 41 42ENTRY(guest_to_host_gpr_switch) 43 pushq %rdi 44 movq 7*8(%rsp), %rdi 45 movq %rax, UREGS_rax(%rdi) 46 popq UREGS_rdi(%rdi) 47 movq %r15, UREGS_r15(%rdi) 48 movq %r11, UREGS_r11(%rdi) 49 popq %r15 50 movq %r14, UREGS_r14(%rdi) 51 movq %r10, UREGS_r10(%rdi) 52 popq %r14 53 movq %r13, UREGS_r13(%rdi) 54 movq %r9, UREGS_r9(%rdi) 55 popq %r13 56 movq %r12, UREGS_r12(%rdi) 57 movq %r8, UREGS_r8(%rdi) 58 popq %r12 59 movq %rbp, UREGS_rbp(%rdi) 60 movq %rsi, UREGS_rsi(%rdi) 61 popq %rbp 62 movq %rbx, UREGS_rbx(%rdi) 63 movq %rdx, UREGS_rdx(%rdi) 64 popq %rbx 65 movq %rcx, UREGS_rcx(%rdi) 66 popq %rcx 67 ret 68