[BACK]Return to frameasm.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / amd64 / include

Annotation of src/sys/arch/amd64/include/frameasm.h, Revision 1.1.18.1

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

CVSweb <webmaster@jp.NetBSD.org>