Annotation of mstools/h/mips/kxmips.h, revision 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.