[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

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