|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.