Annotation of mstools/h/mips/kxmips.h, revision 1.1.1.1

1.1       root        1: /*++ BUILD Version: 0003    // Increment this if a change has global effects
                      2: */
                      3: //*++
                      4: //
                      5: // Copyright (c) 1990-1993  Microsoft Corporation
                      6: //
                      7: // Module Name:
                      8: //
                      9: //  kxmips.h
                     10: //
                     11: // Abstract:
                     12: //
                     13: //  This module contains the nongenerated part of the MIPS assembler
                     14: //  header file. In general, it contains processor architecture constant
                     15: //  information, however some assembler macros are also included.
                     16: //
                     17: // Author:
                     18: //
                     19: //  David N. Cutler (davec) 23-Mar-1990
                     20: //
                     21: // Revision History:
                     22: //
                     23: //--*/
                     24: 
                     25: //
                     26: // Define load linked and store conditional opcodes if system is not an r4000
                     27: //
                     28: 
                     29: #if defined(R3000)
                     30: 
                     31: #define ll lw
                     32: #define sc sw
                     33: 
                     34: #endif
                     35: 
                     36: #ifdef SABLE
                     37: 
                     38: #define bal jal
                     39: 
                     40: #endif
                     41: 
                     42: //
                     43: // Define soft reset vector address for nonhandled cache parity errors.
                     44: //
                     45: 
                     46: #if defined(R4000)
                     47: 
                     48: #define SOFT_RESET_VECTOR 0xbfc00300    // default parity error routine address
                     49: 
                     50: #endif
                     51: 
                     52: //
                     53: // Define low memory transfer vector address and TB index address (temporary).
                     54: //
                     55: 
                     56: #define TRANSFER_VECTOR (KSEG1_BASE + 0x400) // exception handler address
                     57: 
                     58: //
                     59: // Define standard integer registers.
                     60: //
                     61: 
                     62: #define zero $0                         // read zero, writes ignored
                     63: #define AT $1                           // assembler temporary
                     64: #define v0 $2                           // return value
                     65: #define v1 $3                           //
                     66: #define a0 $4                           // argument registers
                     67: #define a1 $5                           //
                     68: #define a2 $6                           //
                     69: #define a3 $7                           //
                     70: #define t0 $8                           // caller saved registers
                     71: #define t1 $9                           //
                     72: #define t2 $10                          //
                     73: #define t3 $11                          //
                     74: #define t4 $12                          //
                     75: #define t5 $13                          //
                     76: #define t6 $14                          //
                     77: #define t7 $15                          //
                     78: #define s0 $16                          // callee saved registers
                     79: #define s1 $17                          //
                     80: #define s2 $18                          //
                     81: #define s3 $19                          //
                     82: #define s4 $20                          //
                     83: #define s5 $21                          //
                     84: #define s6 $22                          //
                     85: #define s7 $23                          //
                     86: #define t8 $24                          // caller saved registers
                     87: #define t9 $25                          //
                     88: #define k0 $26                          // kernel reserved registers
                     89: #define k1 $27                          //
                     90: #define gp $28                          // global pointer
                     91: #define sp $29                          // stack pointer
                     92: #define s8 $30                          // callee saved register
                     93: #define ra $31                          // return address register
                     94: 
                     95: //
                     96: // Define standard floating point registers.
                     97: //
                     98: 
                     99: #define f0 $f0                          // caller saved registers
                    100: #define f1 $f1                          //
                    101: #define f2 $f2                          //
                    102: #define f3 $f3                          //
                    103: #define f4 $f4                          //
                    104: #define f5 $f5                          //
                    105: #define f6 $f6                          //
                    106: #define f7 $f7                          //
                    107: #define f8 $f8                          //
                    108: #define f9 $f9                          //
                    109: #define f10 $f10                        //
                    110: #define f11 $f11                        //
                    111: #define f12 $f12                        //
                    112: #define f13 $f13                        //
                    113: #define f14 $f14                        //
                    114: #define f15 $f15                        //
                    115: #define f16 $f16                        //
                    116: #define f17 $f17                        //
                    117: #define f18 $f18                        //
                    118: #define f19 $f19                        //
                    119: #define f20 $f20                        // callee saved registers
                    120: #define f21 $f21                        //
                    121: #define f22 $f22                        //
                    122: #define f23 $f23                        //
                    123: #define f24 $f24                        //
                    124: #define f25 $f25                        //
                    125: #define f26 $f26                        //
                    126: #define f27 $f27                        //
                    127: #define f28 $f28                        //
                    128: #define f29 $f29                        //
                    129: #define f30 $f30                        //
                    130: #define f31 $f31                        //
                    131: 
                    132: //
                    133: // Define R3000 system coprocessor registers.
                    134: //
                    135: 
                    136: #if defined(R3000)
                    137: 
                    138: #define index $0                        // TB index register
                    139: #define random $1                       // TB random register
                    140: #define entrylo $2                      // TB entry low register
                    141: #define context $4                      // TB context register
                    142: #define badvaddr $8                     // TB bad virtual address register
                    143: #define entryhi $10                     // TB entry high register
                    144: #define psr $12                         // processor status register
                    145: #define cause $13                       // exception cause register
                    146: #define epc $14                         // exception PC register
                    147: #define prid $15                        // processor id register
                    148: 
                    149: //
                    150: // Define R3000 system coprocessor register bit field offsets.
                    151: //
                    152: 
                    153: #define INDEX_INDEX 0x8                 // TLB specified index <13:8>
                    154: #define INDEX_PROBE 0x1f                // TLB probe failure <31>
                    155: 
                    156: #define RANDOM_INDEX 0x8                // TLB random index <13:8>
                    157: 
                    158: #define ENTRYLO_G 0x8                   // Global <8>
                    159: #define ENTRYLO_V 0x9                   // Valid <9>
                    160: #define ENTRYLO_D 0xa                   // Dirty <10>
                    161: #define ENTRYLO_N 0xb                   // Nocache <11>
                    162: #define ENTRYLO_PFN 0xc                 // Page Frame <31:12>
                    163: 
                    164: #define ENTRYHI_PID 0x6                 // Process id <11:6>
                    165: #define ENTRYHI_VPN 0xc                 // Virtual page <31:12>
                    166: 
                    167: #define PSR_IEC 0x0                     // Current interrupt enable <0>
                    168: #define PSR_KUC 0x1                     // Current kernel/user <1>
                    169: #define PSR_IEP 0x2                     // Previous interrupt enable <2>
                    170: #define PSR_KUP 0x3                     // Previous kernel/user <3>
                    171: #define PSR_PMODE PSR_KUP               // Previous mode bit <3>
                    172: #define PSR_IEO 0x4                     // Old interrupt enable <4>
                    173: #define PSR_KUO 0x5                     // Old kernel/user <5>
                    174: #define PSR_INTMASK 0x8                 // Interrupt mask <15:8>
                    175: #define PSR_ISC 0x10                    // Isolate d-cache <16>
                    176: #define PSR_SWC 0x11                    // Swap caches <17>
                    177: #define PSR_PZ 0x12                     // Parity zero <18>
                    178: #define PSR_CM 0x13                     // Cache miss <19>
                    179: #define PSR_PE 0x14                     // Parity error <20>
                    180: #define PSR_TS 0x15                     // TLB shutdown <21>
                    181: #define PSR_BEV 0x16                    // Bootstrap exception vector <22>
                    182: #define PSR_CU0 0x1c                    // Coprocessor 0 enabled <28>
                    183: #define PSR_CU1 0x1d                    // Coprocessor 1 enabled <29>
                    184: #define PSR_CU2 0x1e                    // Coprocessor 2 enabled <30>
                    185: #define PSR_CU3 0x1f                    // Coprocessor 3 enabled <31>
                    186: 
                    187: #endif
                    188: 
                    189: //
                    190: // Define R4000 system coprocessor registers.
                    191: //
                    192: 
                    193: #if defined(R4000)
                    194: 
                    195: #define index $0                        // TB index register
                    196: #define random $1                       // TB random register
                    197: #define entrylo0 $2                     // TB entry low 0 register
                    198: #define entrylo1 $3                     // TB entry low 1 register
                    199: #define context $4                      // TB context register
                    200: #define pagemask $5                     // Page mask register
                    201: #define wired $6                        // Wired TB entries register
                    202: #define badvaddr $8                     // TB bad virtual address register
                    203: #define count $9                        // Timer count register
                    204: #define entryhi $10                     // TB entry high register
                    205: #define compare $11                     // Timer compare register
                    206: #define psr $12                         // Processor status register
                    207: #define cause $13                       // Exception cause register
                    208: #define epc $14                         // Exception PC register
                    209: #define prid $15                        // Processor id register
                    210: #define config $16                      // Configuration register
                    211: #define lladdr $17                      // Load linked address register
                    212: #define watchlo $18                     // Watch low address register
                    213: #define watchhi $19                     // Watch high address register
                    214: #define ecc $26                         // S-cache ECC and primary parity register
                    215: #define cacheerr $27                    // Cache error and status register
                    216: #define taglo $28                       // Cache tag low register
                    217: #define taghi $29                       // Cache tag high register
                    218: #define errorepc $30                    // Error exception PC register
                    219: 
                    220: //
                    221: // Define R4000 system coprocessor register bit field offsets.
                    222: //
                    223: 
                    224: #define INDEX_INDEX 0x0                 // TLB specified index <5:0>
                    225: #define INDEX_PROBE 0x1f                // TLB probe failure <31>
                    226: 
                    227: #define RANDOM_INDEX 0x0                // TLB random index <5:0>
                    228: 
                    229: #define ENTRYLO_G 0x0                   // Global <0>
                    230: #define ENTRYLO_V 0x1                   // Valid <1>
                    231: #define ENTRYLO_D 0x2                   // Dirty <2>
                    232: #define ENTRYLO_C 0x3                   // Cache control <5:3>
                    233: #define ENTRYLO_PFN 0x6                 // Page Frame <29:6>
                    234: 
                    235: #define PAGEMASK_PAGEMASK 0xd           // Page mask <24:13>
                    236: 
                    237: #define WIRED_NUMBER 0x0                // Wired entries <5:0>
                    238: 
                    239: #define ENTRYHI_PID 0x0                 // Process id <7:0>
                    240: #define ENTRYHI_VPN2 0xd                // Virtual page <31:13>
                    241: 
                    242: #define PID_MASK 0xfff                  // allow for ample expansion
                    243: 
                    244: #define PSR_IE 0x0                      // Interrupt enable <0>
                    245: #define PSR_EXL 0x1                     // Exception level <1>
                    246: #define PSR_ERL 0x2                     // Error level <2>
                    247: #define PSR_KSU 0x3                     // Kernel/supervisor/user <4:3>
                    248: #define PSR_PMODE (PSR_KSU + 1)         // Previous mode bit <4>
                    249: #define PSR_UX 0x5                      // User extended <5>
                    250: #define PSR_SX 0x6                      // Supervior extended <6>
                    251: #define PSR_KX 0x7                      // Kernel extended <7>
                    252: #define PSR_INTMASK 0x8                 // Interrupt mask <15:8>
                    253: #define PSR_DE 0x10                     // Disable cache parity and ECC <16>
                    254: #define PSR_CE 0x11                     // Check enable <17>
                    255: #define PSR_CH 0x12                     // Cache hit <18>
                    256: #define PSR_SR 0x14                     // Soft reset <20>
                    257: #define PSR_TS 0x15                     // TLB shutdown <21>
                    258: #define PSR_BEV 0x16                    // Bootstrap exception vector <22>
                    259: #define PSR_CU0 0x1c                    // Coprocessor 0 enabled <28>
                    260: #define PSR_CU1 0x1d                    // Coprocessor 1 enabled <29>
                    261: #define PSR_CU2 0x1e                    // Coprocessor 2 enabled <30>
                    262: #define PSR_CU3 0x1f                    // Coprocessor 3 enabled <31>
                    263: 
                    264: #define CONFIG_K0 0x0                   // Kseg0 cache algorithm <2:0>
                    265: #define CONFIG_CU 0x3                   // Update on store conditional <3>
                    266: #define CONFIG_DB 0x4                   // Data cache block size <4>
                    267: #define CONFIG_IB 0x5                   // Instruction cache block size <5>
                    268: #define CONFIG_DC 0x6                   // Data cache size <8:6>
                    269: #define CONFIG_IC 0x9                   // Instruction cache size <11:9>
                    270: #define CONFIG_EB 0xd                   // Block ordering <13>
                    271: #define CONFIG_EM 0xe                   // ECC mode enable <14>
                    272: #define CONFIG_BE 0xf                   // Big endian memory <15>
                    273: #define CONFIG_SM 0x10                  // Use dirty shared state <16>
                    274: #define CONFIG_SC 0x11                  // Secondary cache present <17>
                    275: #define CONFIG_EW 0x12                  // System address port width <19:18>
                    276: #define CONFIG_SW 0x14                  // Secondary cache port width <20>
                    277: #define CONFIG_SS 0x15                  // Split secondary cache mode <21>
                    278: #define CONFIG_SB 0x16                  // Secondary cache block size <23:22>
                    279: #define CONFIG_EP 0x18                  // Pattern for write back data <27:24>
                    280: #define CONFIG_EC 0x1c                  // System address port clock ratio <30:28>
                    281: #define CONFIG_CM 0x1f                  // Master checker mode <31>
                    282: 
                    283: #define ECC_ECC 0x0                     // Secondary cache ECC <7:0>
                    284: 
                    285: #define CACHEERR_PIDX 0x0               // Primary cache index <2:0>
                    286: #define CACHEERR_SIDX 0x3               // Secondary cache index <21:3>
                    287: #define CACHEERR_EI 0x18                // ECC error on pimary store miss <24>
                    288: #define CACHEERR_EB 0x19                // Data error on instrruction error <25>
                    289: #define CACHEERR_EE 0x1a                // Error on system address bus <26>
                    290: #define CACHEERR_ES 0x1b                // Error accessing processor state <27>
                    291: #define CACHEERR_ET 0x1c                // Error on tag field <28>
                    292: #define CACHEERR_ED 0x1d                // Error on data field <29>
                    293: #define CACHEERR_EC 0x1e                // Cache level of error <30>
                    294: #define CACHEERR_ER 0x1f                // Type of reference <31>
                    295: 
                    296: #define TAGLO_P 0x0                     // primary tag even parity <0>
                    297: #define TAGLO_PSTATE 0x6                // primary cache state <7:6>
                    298: #define TAGLO_PTAGLO 0x8                // primary tag low physical address <31:8>
                    299: 
                    300: #endif
                    301: 
                    302: //
                    303: // Define R3000 and R4000 cause register bit offsets.
                    304: //
                    305: 
                    306: #define CAUSE_XCODE 0x2                 // Exception code <6:2>
                    307: #define CAUSE_INTPEND 0x8               // Interrupt pending <15:8>
                    308: #define CAUSE_CE 0x1c                   // Coprocessor unusable <29:28>
                    309: #define CAUSE_BD 0x1f                   // Branch delay slot <31>
                    310: 
                    311: //
                    312: // Define R3000 and R4000 processor id register field offsets.
                    313: //
                    314: 
                    315: #define PRID_REV 0x0                    // Revision level <7:0>
                    316: #define PRID_IMP 0x8                    // Implementation type <15:8>
                    317: 
                    318: //
                    319: // Define R3000 and R4000 exception codes.
                    320: //
                    321: 
                    322: #define XCODE_INTERRUPT 0x0             // Interrupt
                    323: #define XCODE_MODIFY 0x4                // TLB modify
                    324: #define XCODE_READ_MISS 0x8             // TLB read miss
                    325: #define XCODE_WRITE_MISS 0xc            // TLB write miss
                    326: #define XCODE_READ_ADDRESS_ERROR 0x10   // Read alignment error
                    327: #define XCODE_WRITE_ADDRESS_ERROR 0x14  // Write alignment error
                    328: #define XCODE_INSTRUCTION_BUS_ERROR 0x18 // Instruction bus error
                    329: #define XCODE_DATA_BUS_ERROR 0x1c       // Data bus error
                    330: #define XCODE_SYSTEM_CALL 0x20          // System call
                    331: #define XCODE_BREAKPOINT 0x24           // Breakpoint
                    332: #define XCODE_ILLEGAL_INSTRUCTION 0x28  // Illegal instruction
                    333: #define XCODE_COPROCESSOR_UNUSABLE 0x2c // Coprocessor unusable
                    334: #define XCODE_INTEGER_OVERFLOW 0x30     // Arithmetic overflow
                    335: 
                    336: #if defined(R3000)
                    337: 
                    338: #define XCODE_PANIC 0x3c                // Stack overflow (software)
                    339: 
                    340: #define R3000_XCODE_MASK (0xf << CAUSE_XCODE) // R3000 exception code mask
                    341: 
                    342: #define R3000_MISS_MASK (R3000_XCODE_MASK & \
                    343:                         (~(XCODE_READ_MISS ^ XCODE_WRITE_MISS))) //
                    344: 
                    345: #endif
                    346: 
                    347: #if defined(R4000)
                    348: 
                    349: #define XCODE_TRAP 0x34                 // Trap instruction
                    350: #define XCODE_VIRTUAL_INSTRUCTION 0x38  // Virtual instruction coherency
                    351: #define XCODE_FLOATING_EXCEPTION 0x3c   // Floating point exception
                    352: #define XCODE_WATCHPOINT 0x5c           // Watch point
                    353: #define XCODE_PANIC 0x78                // Stack overflow (software)
                    354: #define XCODE_VIRTUAL_DATA 0x7c         // Virtual data coherency
                    355: 
                    356: #define R4000_XCODE_MASK (0x1f << CAUSE_XCODE) // R4000 exception code mask
                    357: 
                    358: #define R4000_MISS_MASK (R4000_XCODE_MASK & \
                    359:                         (~(XCODE_READ_MISS ^ XCODE_WRITE_MISS))) //
                    360: 
                    361: #endif
                    362: 
                    363: //
                    364: // Define R4000 page mask values.
                    365: //
                    366: 
                    367: #if defined(R4000)
                    368: 
                    369: #define PAGEMASK_4KB 0x0                // 4kb page
                    370: #define PAGEMASK_16KB 0x3               // 16kb page
                    371: #define PAGEMASK_64KB 0xf               // 64kb page
                    372: #define PAGEMASK_256KB 0x3f             // 256kb page
                    373: #define PAGEMASK_1MB 0xff               // 1mb page
                    374: #define PAGEMASK_4MB 0x3ff              // 4mb page
                    375: #define PAGEMASK_16MB 0xfff             // 16mb page
                    376: 
                    377: #endif
                    378: 
                    379: //
                    380: // Define R4000 primary cache states.
                    381: //
                    382: 
                    383: #if defined(R4000)
                    384: 
                    385: #define PRIMARY_CACHE_INVALID 0x0       // primary cache invalid
                    386: #define PRIMARY_CACHE_SHARED 0x1        // primary cache shared (clean or dirty)
                    387: #define PRIMARY_CACHE_CLEAN_EXCLUSIVE 0x2 // primary cache clean exclusive
                    388: #define PRIMARY_CACHE_DIRTY_EXCLUSIVE 0x3 // primary cache dirty exclusive
                    389: 
                    390: #endif
                    391: 
                    392: //
                    393: // Define R4000 cache instruction operation codes.
                    394: //
                    395: 
                    396: #if defined(R4000)
                    397: 
                    398: #define INDEX_INVALIDATE_I 0x0          // invalidate primary instruction cache
                    399: #define INDEX_WRITEBACK_INVALIDATE_D 0x1 // writeback/invalidate primary data cache
                    400: #define INDEX_INVALIDATE_SI 0x2         // invalidate secondary instruction cache
                    401: #define INDEX_WRITEBACK_INVALIDATE_SD 0x3 // writeback/invalidate secondary data cache
                    402: 
                    403: #define INDEX_LOAD_TAG_I 0x4            // load primary instruction tag indexed
                    404: #define INDEX_LOAD_TAG_D 0x5            // load primary data tag indexed
                    405: #define INDEX_LOAD_TAG_SI 0x6           // load secondary instruction tag indexed
                    406: #define INDEX_LOAD_TAG_SD 0x7           // load secondary data tag indexed
                    407: 
                    408: #define INDEX_STORE_TAG_I 0x8           // store primary instruction tag indexed
                    409: #define INDEX_STORE_TAG_D 0x9           // store primary data tag indexed
                    410: #define INDEX_STORE_TAG_SI 0xa          // store secondary instruction tag indexed
                    411: #define INDEX_STORE_TAG_SD 0xb          // store secondary data tag indexed
                    412: 
                    413: #define CREATE_DIRTY_EXCLUSIVE_D 0xd    // create dirty exclusive primary data cache
                    414: #define CREATE_DIRTY_EXCLUSIVE_SD 0xf   // create dirty exclusive secondary data cache
                    415: 
                    416: #define HIT_INVALIDATE_I 0x10           // invalidate primary instruction cache
                    417: #define HIT_INVALIDATE_D 0x11           // invalidate primary data cache
                    418: #define HIT_INVALIDATE_SI 0x12          // invalidate secondary instruction cache
                    419: #define HIT_INVALIDATE_SD 0x13          // invalidate secondary data cache
                    420: 
                    421: #define HIT_WRITEBACK_INVALIDATE_D 0x15 // writeback/invalidate primary data cache
                    422: #define HIT_WRITEBACK_INVALIDATE_SD 0x17 // writeback/invalidate secondary data cache
                    423: 
                    424: #define HIT_WRITEBACK_D 0x19            // writeback primary data cache
                    425: #define HIT_WRITEBACK_SD 0x1b           // writeback secondary data cache
                    426: 
                    427: #define HIT_SET_VIRTUAL_SI 0x1e         // hit set virtual secondary instruction cache
                    428: #define HIT_SET_VIRTUAL_SD 0x1f         // hit set virtual secondary data cache
                    429: 
                    430: #endif
                    431: 
                    432: //
                    433: // Define enable and disable interrupt macros.
                    434: //
                    435: 
                    436: #if defined(R3000)
                    437: 
                    438: #define DISABLE_INTERRUPTS(reg) \
                    439:         .set    noreorder; \
                    440:         .set    noat;      \
                    441:         li      AT,1 << PSR_CU1; \
                    442:         mfc0    reg,psr;   \
                    443:         mtc0    AT,psr;    \
                    444:         nop;               \
                    445:         .set    at;        \
                    446:         .set    reorder;
                    447: 
                    448: #define ENABLE_INTERRUPTS(reg) \
                    449:         .set    noreorder; \
                    450:         .set    noat;      \
                    451:         mtc0    reg,psr;   \
                    452:         nop;               \
                    453:         .set    at;        \
                    454:         .set    reorder;
                    455: 
                    456: #endif
                    457: 
                    458: #if defined(R4000)
                    459: 
                    460: #define DISABLE_INTERRUPTS(reg) \
                    461:         .set    noreorder; \
                    462:         .set    noat;      \
                    463:         li      AT,1 << PSR_CU1; \
                    464:         mfc0    reg,psr;   \
                    465:         mtc0    AT,psr;    \
                    466:         nop;               \
                    467:         nop;               \
                    468:         .set    at;        \
                    469:         .set    reorder;
                    470: 
                    471: #define ENABLE_INTERRUPTS(reg) \
                    472:         .set    noreorder; \
                    473:         .set    noat;      \
                    474:         mtc0    reg,psr;   \
                    475:         nop;               \
                    476:         nop;               \
                    477:         .set    at;        \
                    478:         .set    reorder;
                    479: 
                    480: #endif
                    481: 
                    482: //
                    483: // Define floating coprocessor registers
                    484: //
                    485: 
                    486: #define fsrid $0                        // floating identification register
                    487: #define fsr $31                         // floating status register
                    488: 
                    489: //
                    490: // Define floating status register bit offsets.
                    491: //
                    492: 
                    493: #define FSR_RM 0x0
                    494: #define FSR_SI 0x2
                    495: #define FSR_SU 0x3
                    496: #define FSR_SO 0x4
                    497: #define FSR_SZ 0x5
                    498: #define FSR_SV 0x6
                    499: #define FSR_EI 0x7
                    500: #define FSR_EU 0x8
                    501: #define FSR_EO 0x9
                    502: #define FSR_EZ 0xa
                    503: #define FSR_EV 0xb
                    504: #define FSR_XI 0xc
                    505: #define FSR_XU 0xd
                    506: #define FSR_XO 0xe
                    507: #define FSR_XZ 0xf
                    508: #define FSR_XV 0x10
                    509: #define FSR_XE 0x11
                    510: #define FSR_CC 0x17
                    511: #define FSR_FS 0x18
                    512: 
                    513: //
                    514: // Define save and restore floating state macros.
                    515: //
                    516: 
                    517: #if defined(R3000)
                    518: 
                    519: #define RESTORE_VOLATILE_FLOAT_STATE    \
                    520:         lwc1    f0,TrFltF0(s8);         \
                    521:         jal     KiRestoreVolatileFloatState;
                    522: 
                    523: #define SAVE_VOLATILE_FLOAT_STATE       \
                    524:         swc1    f0,TrFltF0(s8);         \
                    525:         jal     KiSaveVolatileFloatState;
                    526: 
                    527: #endif
                    528: 
                    529: #if defined(R4000)
                    530: 
                    531: #define RESTORE_VOLATILE_FLOAT_STATE    \
                    532:         ldc1    f0,TrFltF0(s8);         \
                    533:         jal     KiRestoreVolatileFloatState;
                    534: 
                    535: #define SAVE_VOLATILE_FLOAT_STATE       \
                    536:         sdc1    f0,TrFltF0(s8);         \
                    537:         jal     KiSaveVolatileFloatState;
                    538: 
                    539: #endif
                    540: 
                    541: #if defined(R3000)
                    542: 
                    543: #define RESTORE_NONVOLATILE_FLOAT_STATE    \
                    544:         lwc1    f20,ExFltF20(sp);         \
                    545:         jal     KiRestoreNonvolatileFloatState;
                    546: 
                    547: #define SAVE_NONVOLATILE_FLOAT_STATE       \
                    548:         swc1    f20,ExFltF20(sp);         \
                    549:         jal     KiSaveNonvolatileFloatState;
                    550: 
                    551: #endif
                    552: 
                    553: #if defined(R4000)
                    554: 
                    555: #define RESTORE_NONVOLATILE_FLOAT_STATE    \
                    556:         ldc1    f20,ExFltF20(sp);         \
                    557:         jal     KiRestoreNonvolatileFloatState;
                    558: 
                    559: #define SAVE_NONVOLATILE_FLOAT_STATE       \
                    560:         sdc1    f20,ExFltF20(sp);         \
                    561:         jal     KiSaveNonvolatileFloatState;
                    562: 
                    563: #endif
                    564: 
                    565: //
                    566: // Define TB and cache parameters.
                    567: //
                    568: 
                    569: #if defined(R3000)
                    570: 
                    571: #define NUMBER_PIDS 64                  // number of process ids
                    572: 
                    573: #define PCR_ENTRY 0                     // TB entry numbers (2) for the PCR
                    574: #define PDR_ENTRY 2                     // TB entry number (1) for the PDR
                    575: #define KSTACK_ENTRY 3                  // TB entry numbers (2) for kernel stack
                    576: #define KDPORT_ENTRY 5                  // TB entry number (1) for debug port
                    577: #define DMA_ENTRY 6                     // TB entry number (1) for DMA registers
                    578: #define INTERRUPT_ENTRY 7               // TB entry number (1) for interrupt source
                    579: 
                    580: #define TB_SIZE 64                      // number of TB entries
                    581: #define TB_ENTRY_SIZE (2 * 4)           // size of TB entry
                    582: #define FIXED_BASE 0                    // base index of fixed TB entries
                    583: #define FIXED_ENTRIES (INTERRUPT_ENTRY + 1) // number of fixed TB entries
                    584: #define RANDOM_BASE FIXED_ENTRIES       // base index of random TB entries
                    585: #define RANDOM_ENTRIES (TB_SIZE - RANDOM_BASE) // number of random TB entries
                    586: 
                    587: #endif
                    588: 
                    589: #if defined(R4000)
                    590: 
                    591: #define PCR_ENTRY 0                     // TB entry numbers (2) for the PCR
                    592: #define PDR_ENTRY 2                     // TB entry number (1) for the PDR
                    593: #define KSTACK_ENTRY 3                  // TB entry numbers (1) for kernel stack
                    594: #define DMA_ENTRY 4                     // TB entry number (1) for DMA/InterruptSource
                    595: 
                    596: #define TB_ENTRY_SIZE (3 * 4)           // size of TB entry
                    597: #define FIXED_BASE 0                    // base index of fixed TB entries
                    598: #define FIXED_ENTRIES (DMA_ENTRY + 1)   // number of fixed TB entries
                    599: 
                    600: #endif
                    601: 
                    602: //
                    603: // Define cache parameters
                    604: //
                    605: 
                    606: #define DCACHE_SIZE 4 * 1024            // size of data cache in bytes
                    607: #define ICACHE_SIZE 4 * 1024            // size of instruction cache in bytes
                    608: #define MINIMUM_CACHE_SIZE 4 * 1024     // minimum size of cache
                    609: #define MAXIMUM_CACHE_SIZE 128 * 1024   // maximum size fo cache
                    610: 
                    611: //
                    612: // Define subtitle macro
                    613: //
                    614: 
                    615: #define SBTTL(x)
                    616: 
                    617: //
                    618: // Define global definition macros.
                    619: //
                    620: 
                    621: #define END_REGION(Name)               \
                    622:         .globl  Name;                  \
                    623: Name:;
                    624: 
                    625: #define START_REGION(Name)             \
                    626:         .globl  Name;                  \
                    627: Name:;
                    628: 
                    629: //
                    630: // Define trap frame generation macro.
                    631: //
                    632: 
                    633: #define GENERATE_TRAP_FRAME             \
                    634:         .set    noat;                   \
                    635:         sw      AT,TrIntAt(s8);         \
                    636:         jal     KiGenerateTrapFrame;    \
                    637:         .set    at;
                    638: 
                    639: //
                    640: // Define restore volatile integer state macro.
                    641: //
                    642: 
                    643: #define RESTORE_VOLATILE_INTEGER_STATE  \
                    644:         .set    noat;                   \
                    645:         lw      AT,TrIntAt(s8);         \
                    646:         jal     KiRestoreVolatileIntegerState; \
                    647:         .set    at;
                    648: 
                    649: //
                    650: // Define save volatile integer state macro.
                    651: //
                    652: 
                    653: #define SAVE_VOLATILE_INTEGER_STATE     \
                    654:         .set    noat;                   \
                    655:         sw      AT,TrIntAt(s8);         \
                    656:         jal     KiSaveVolatileIntegerState; \
                    657:         .set    at;
                    658: 
                    659: //
                    660: // Define procedure entry macros
                    661: //
                    662: 
                    663: #define ALTERNATE_ENTRY(Name)           \
                    664:         .globl  Name;                   \
                    665: Name:;
                    666: 
                    667: #define LEAF_ENTRY(Name)                \
                    668:         .text;                          \
                    669:         .align  4;                      \
                    670:         .globl  Name;                   \
                    671:         .ent    Name, 0;                \
                    672: Name:;                                  \
                    673:         .frame  sp, 0, ra;              \
                    674:         .prologue 0;
                    675: 
                    676: #define NESTED_ENTRY(Name, fsize, retrg) \
                    677:         .text;                          \
                    678:         .align  4;                      \
                    679:         .globl  Name;                   \
                    680:         .ent    Name, 0;                \
                    681: Name:;                                  \
                    682:         .frame  sp, fsize, retrg;
                    683: 
                    684: //
                    685: // Define exception handling macros.
                    686: //
                    687: 
                    688: #define EXCEPTION_HANDLER(Handler)      \
                    689:         .edata  1, Handler;
                    690: 
                    691: #define PROLOGUE_END .prologue 1;
                    692: 
                    693: //
                    694: // Define exception data section and align.
                    695: //
                    696: 
                    697: #ifndef HEADER_FILE
                    698: 
                    699:         .edata  0
                    700:         .align  2
                    701:         .text
                    702: 
                    703: #endif

unix.superglobalmegacorp.com

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