Annotation of sys/arch/amd64/include/frameasm.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: frameasm.h,v 1.1 2004/01/28 01:39:39 mickey Exp $ */
! 2: /* $NetBSD: frameasm.h,v 1.1 2003/04/26 18:39:40 fvdl Exp $ */
! 3:
! 4: #ifndef _AMD64_MACHINE_FRAMEASM_H
! 5: #define _AMD64_MACHINE_FRAMEASM_H
! 6:
! 7: /*
! 8: * Macros to define pushing/popping frames for interrupts, traps
! 9: * and system calls. Currently all the same; will diverge later.
! 10: */
! 11:
! 12: /*
! 13: * These are used on interrupt or trap entry or exit.
! 14: */
! 15: #define INTR_SAVE_GPRS \
! 16: subq $120,%rsp ; \
! 17: movq %r15,TF_R15(%rsp) ; \
! 18: movq %r14,TF_R14(%rsp) ; \
! 19: movq %r13,TF_R13(%rsp) ; \
! 20: movq %r12,TF_R12(%rsp) ; \
! 21: movq %r11,TF_R11(%rsp) ; \
! 22: movq %r10,TF_R10(%rsp) ; \
! 23: movq %r9,TF_R9(%rsp) ; \
! 24: movq %r8,TF_R8(%rsp) ; \
! 25: movq %rdi,TF_RDI(%rsp) ; \
! 26: movq %rsi,TF_RSI(%rsp) ; \
! 27: movq %rbp,TF_RBP(%rsp) ; \
! 28: movq %rbx,TF_RBX(%rsp) ; \
! 29: movq %rdx,TF_RDX(%rsp) ; \
! 30: movq %rcx,TF_RCX(%rsp) ; \
! 31: movq %rax,TF_RAX(%rsp)
! 32:
! 33: #define INTR_RESTORE_GPRS \
! 34: movq TF_R15(%rsp),%r15 ; \
! 35: movq TF_R14(%rsp),%r14 ; \
! 36: movq TF_R13(%rsp),%r13 ; \
! 37: movq TF_R12(%rsp),%r12 ; \
! 38: movq TF_R11(%rsp),%r11 ; \
! 39: movq TF_R10(%rsp),%r10 ; \
! 40: movq TF_R9(%rsp),%r9 ; \
! 41: movq TF_R8(%rsp),%r8 ; \
! 42: movq TF_RDI(%rsp),%rdi ; \
! 43: movq TF_RSI(%rsp),%rsi ; \
! 44: movq TF_RBP(%rsp),%rbp ; \
! 45: movq TF_RBX(%rsp),%rbx ; \
! 46: movq TF_RDX(%rsp),%rdx ; \
! 47: movq TF_RCX(%rsp),%rcx ; \
! 48: movq TF_RAX(%rsp),%rax ; \
! 49: addq $120,%rsp
! 50:
! 51: #define INTRENTRY \
! 52: subq $32,%rsp ; \
! 53: testq $SEL_UPL,56(%rsp) ; \
! 54: je 98f ; \
! 55: swapgs ; \
! 56: movw %gs,0(%rsp) ; \
! 57: movw %fs,8(%rsp) ; \
! 58: movw %es,16(%rsp) ; \
! 59: movw %ds,24(%rsp) ; \
! 60: 98: INTR_SAVE_GPRS
! 61:
! 62: #define INTRFASTEXIT \
! 63: INTR_RESTORE_GPRS ; \
! 64: testq $SEL_UPL,56(%rsp) ; \
! 65: je 99f ; \
! 66: cli ; \
! 67: swapgs ; \
! 68: movw 0(%rsp),%gs ; \
! 69: movw 8(%rsp),%fs ; \
! 70: movw 16(%rsp),%es ; \
! 71: movw 24(%rsp),%ds ; \
! 72: 99: addq $48,%rsp ; \
! 73: iretq
! 74:
! 75: #define INTR_RECURSE_HWFRAME \
! 76: movq %rsp,%r10 ; \
! 77: movl %ss,%r11d ; \
! 78: pushq %r11 ; \
! 79: pushq %r10 ; \
! 80: pushfq ; \
! 81: movl %cs,%r11d ; \
! 82: pushq %r11 ; \
! 83: pushq %r13 ;
! 84:
! 85:
! 86: #define CHECK_ASTPENDING(reg) movq CPUVAR(CURPROC),reg ; \
! 87: cmpq $0, reg ; \
! 88: je 99f ; \
! 89: cmpl $0, P_MD_ASTPENDING(reg) ; \
! 90: 99:
! 91:
! 92: #define CLEAR_ASTPENDING(reg) movl $0, P_MD_ASTPENDING(reg)
! 93:
! 94: #endif /* _AMD64_MACHINE_FRAMEASM_H */
CVSweb