[BACK]Return to frameasm.h CVS log [TXT][DIR] Up to [local] / sys / arch / amd64 / include

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