Annotation of 43BSDReno/sys/tahoealign/align.h, revision 1.1

1.1     ! root        1: /*     align.h 1.1     86/07/20        */
        !             2: 
        !             3: #ifndef        LOCORE
        !             4: /*
        !             5:  * Some special registers definitions.
        !             6:  */
        !             7: 
        !             8: #ifndef        SLR
        !             9: #define        SLR     1
        !            10: #define        P0LR    3
        !            11: #define        P1LR    5
        !            12: #define        P2LR    7
        !            13: #endif
        !            14: 
        !            15: #include       "../tahoealign/defs.h"
        !            16: /*
        !            17:  * Definitions about the stack frame as seen by the routine
        !            18:  * 'alignment' in the kernel. If you ever wondered what's the
        !            19:  * meaning of 'machine dependent code', look here :-)
        !            20:  * This structure is partly set up by locore.s, for 'alignment',
        !            21:  * and partly by the allocation of local variables in 'alignment.c'
        !            22:  * itself.
        !            23:  *    All these things are passed between procedures on the
        !            24:  * (current process' kernel) stack. The alternative (static
        !            25:  * variables) is a little bit more elegant but it works fine
        !            26:  * for one process only. Will not work for multiple processes
        !            27:  * with alignment processing or for MP models of HW.
        !            28:  *
        !            29:  * WARNING : due to the intimate relationships involved, don't
        !            30:  *     change the process_info structure unless you also
        !            31:  *     change the alignment trap code in locore.s AND the
        !            32:  *     allocation of local variables in 'alignment.c' !!
        !            33:  */
        !            34: typedef        struct {
        !            35:        long            Saved_sp;               /* For exceptions */
        !            36:        long            Saved_pc;
        !            37:        long            Last_operand;           /* Last operand # processed */
        !            38:        long            Opcode;                 /* 'offending' opcode */
        !            39:        struct  oprnd   Decoded[4];     
        !            40:        long            REG0;
        !            41:        long            REG1;
        !            42:        long            REG2;
        !            43:        long            REG3;
        !            44:        long            REG4;
        !            45:        long            REG5;
        !            46:        long            REG6;
        !            47:        long            REG7;
        !            48:        long            REG8;
        !            49:        long            REG9;
        !            50:        long            REG10;
        !            51:        long            REG11;
        !            52:        long            REG12;
        !            53:        long            return_pc;      /* Points into locore.s */
        !            54:        long            mask_restored;
        !            55:        long            REG13;          /* Original, from the process */
        !            56:        long            Sp;             /* Alias R14 */
        !            57:        long            ret_code;
        !            58:        long            ret_addr;
        !            59:        long            ret_exception;  /* To tell locore.s about problems */
        !            60:        long            Ach;
        !            61:        long            Acl;
        !            62:        unsigned        unused:30;
        !            63:        unsigned        pcb_acc_pnt:1;
        !            64:        unsigned        acc_dbl:1;
        !            65:        long            Pc;             /* Alias R15 */
        !            66:        long            Psl;
        !            67: } process_info;
        !            68: 
        !            69: #define        saved_pc        (infop->Saved_pc)
        !            70: #define        saved_sp        (infop->Saved_sp)
        !            71: #define last_operand   (infop->Last_operand)
        !            72: #define        opCODE          (infop->Opcode)
        !            73: #define        decoded         (infop->Decoded)
        !            74: #define        r0              (infop->REG0)
        !            75: #define        r1              (infop->REG1)
        !            76: #define        r2              (infop->REG2)
        !            77: #define        r3              (infop->REG3)
        !            78: #define        r4              (infop->REG4)
        !            79: #define        r5              (infop->REG5)
        !            80: #define        r6              (infop->REG6)
        !            81: #define        r7              (infop->REG7)
        !            82: #define        r8              (infop->REG8)
        !            83: #define        r9              (infop->REG9)
        !            84: #define        r10             (infop->REG10)
        !            85: #define        r11             (infop->REG11)
        !            86: #define        r12             (infop->REG12)
        !            87: #define        r13             (infop->REG13)
        !            88: #define        fp              (infop->REG13)
        !            89: #define        sp              (infop->Sp)
        !            90: #define        acc_high        (infop->Ach)
        !            91: #define        acc_low         (infop->Acl)
        !            92: #define        pc              (infop->Pc)
        !            93: #define        psl             (infop->Psl)
        !            94: 
        !            95: #define        PCOUNTER                15
        !            96: #define        SPOINTER                14
        !            97: 
        !            98: 
        !            99: /*
        !           100:  * Setting new condition codes for the process.
        !           101: #define Set_psl(z)     asm("   movl    z,r6"); \
        !           102:                        asm("   andl2   $15,r6"); \
        !           103:                        asm("   mnegl   $1,r7"); \
        !           104:                        asm("   xorl2   r6,r7"); \
        !           105:                        asm("   andl2   $15,r7"); \
        !           106:                        asm("   bicpsw  r7"); \
        !           107:                        asm("   bispsw  r6")
        !           108:  */
        !           109: #define Set_psl(z)     asm("   andl2   $15,z"); \
        !           110:                        asm("   mnegl   $1,r6"); \
        !           111:                        asm("   xorl2   z,r6"); \
        !           112:                        asm("   andl2   $15,r6"); \
        !           113:                        asm("   bicpsw  r6"); \
        !           114:                        asm("   bispsw  z")
        !           115: #define        New_cc(x)       (x) &= PSL_ALLCC; psl = psl & ~PSL_ALLCC | (x)
        !           116: 
        !           117: #endif
        !           118: 
        !           119: /*
        !           120:  * Definitions for ret_code. NOTE : DON"T USE 0 !! locore.s knows that
        !           121:  *     0 means OK, no problems !
        !           122:  */
        !           123: 
        !           124: #define        ILL_ADDRMOD     1
        !           125: #define        ILL_ACCESS      2
        !           126: #define        ILL_OPRND       3
        !           127: #define        ARITHMETIC      4
        !           128: #define        ALIGNMENT       5
        !           129: 
        !           130: /*
        !           131:  * For use in u.u_eosys as a flag.
        !           132:  */
        !           133: #define        EMULATEALIGN    0x80

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.