forked from len0rd/rockbox
		
	* Rework battery reading * Get power off back working * Add time to debug view * Convert TABs to spaces in firmware/export/mips*.h git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20024 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			2356 lines
		
	
	
	
		
			90 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2356 lines
		
	
	
	
		
			90 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**************************************************************************
 | |
| *                                                                         *
 | |
| *   PROJECT     : MIPS port for uC/OS-II                                  *
 | |
| *                                                                         *
 | |
| *   MODULE      : ARCHDEFS.h                                              *
 | |
| *                                                                         *
 | |
| *   AUTHOR      : Michael Anburaj                                         *
 | |
| *                 URL  : http://geocities.com/michaelanburaj/             *
 | |
| *                 EMAIL: michaelanburaj@hotmail.com                       *
 | |
| *                                                                         *
 | |
| *   PROCESSOR   : MIPS 4Kc (32 bit RISC) - ATLAS board                    *
 | |
| *                                                                         *
 | |
| *   TOOL-CHAIN  : SDE & Cygnus                                            *
 | |
| *                                                                         *
 | |
| *   DESCRIPTION :                                                         *
 | |
| *   Architecture definitions.                                             *
 | |
| *                                                                         *
 | |
| **************************************************************************/
 | |
| 
 | |
| 
 | |
| #ifndef __ARCHDEFS_H__
 | |
| #define __ARCHDEFS_H__
 | |
| 
 | |
| 
 | |
| /* ********************************************************************* */
 | |
| /* Module configuration */
 | |
| 
 | |
| 
 | |
| /* ********************************************************************* */
 | |
| /* Interface macro & data definition */
 | |
| 
 | |
| /*
 | |
|  * Utility defines for cross platform handling of 64bit constants.
 | |
|  */
 | |
| 
 | |
| #if !defined(Append)
 | |
|     #define Append(c,s) (c##s)
 | |
| #endif
 | |
| 
 | |
| #if !defined(__assembler) && !defined(MIPSAVPENV)
 | |
|     #if defined(NT)
 | |
|         #if !defined(UNS64Const)
 | |
|             #define UNS64Const(c) Append(c,ui64)
 | |
|         #endif
 | |
| 
 | |
|         #if !defined(INT64Const)
 | |
|             #define INT64Const(c) Append(c,i64)
 | |
|         #endif
 | |
|     #else
 | |
|         #if !defined(UNS64Const)
 | |
|             #define UNS64Const(c) Append(c,ull)
 | |
|         #endif
 | |
| 
 | |
|         #if !defined(INT64Const)
 | |
|             #define INT64Const(c) Append(c,ll)
 | |
|         #endif
 | |
|     #endif
 | |
| #else /* Not C or C++ */
 | |
|     #if !defined(UNS64Const)
 | |
|         #define UNS64Const(c) c
 | |
|     #endif
 | |
| 
 | |
|     #if !defined(INT64Const)
 | |
|         #define INT64Const(c) c
 | |
|     #endif
 | |
| #endif /* C or C++ */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                I N S T R U C T I O N   F O R M A T S                 *
 | |
|  ************************************************************************
 | |
|  *
 | |
|  * The following definitions describe each field in an instruction.  There
 | |
|  * is one diagram for each type of instruction, with field definitions
 | |
|  * following the diagram for that instruction.  Note that if a field of
 | |
|  * the same name and position is defined in an earlier diagram, it is
 | |
|  * not defined again in the subsequent diagram.  Only new fields are
 | |
|  * defined for each diagram.
 | |
|  *
 | |
|  * R-Type (operate)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |           |   rs    |   rt    |   rd    |   sa    |           |
 | |
|  * |   Opcode  |         |         |       Tcode       |   func    |
 | |
|  * |           |                  Bcode                |     | sel |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnOpcode        26
 | |
| #define M_InstnOpcode        (0x3f << S_InstnOpcode)
 | |
| #define S_InstnRS        21
 | |
| #define M_InstnRS        (0x1f << S_InstnRS)
 | |
| #define S_InstnRT        16
 | |
| #define M_InstnRT        (0x1f << S_InstnRT)
 | |
| #define S_InstnRD        11
 | |
| #define M_InstnRD        (0x1f << S_InstnRD)
 | |
| #define S_InstnSA        6
 | |
| #define M_InstnSA        (0x1f << S_InstnSA)
 | |
| #define S_InstnTcode        6
 | |
| #define M_InstnTcode        (0x3ff << S_InstnTcode)
 | |
| #define S_InstnBcode        6
 | |
| #define M_InstnBcode        (0xfffff << S_InstnBcode)
 | |
| #define S_InstnFunc        0
 | |
| #define M_InstnFunc        (0x3f << S_InstnFunc)
 | |
| #define S_InstnSel        0
 | |
| #define M_InstnSel        (0x7 << S_InstnSel)
 | |
| 
 | |
| /*
 | |
|  * I-Type (load, store, branch, immediate)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   rs    |   rt    |             Offset            |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnOffset        0
 | |
| #define M_InstnOffset        (0xffff << S_InstnOffset)
 | |
| 
 | |
| /*
 | |
|  * I-Type (pref)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   rs    |  hint   |             Offset            |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnHint        S_InstnRT
 | |
| #define M_InstnHint        M_InstnRT
 | |
| 
 | |
| /*
 | |
|  * J-Type (jump)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |                    JIndex                         |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnJIndex        0
 | |
| #define M_InstnJIndex        (0x03ffffff << S_InstnJIndex)
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (operate)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   fmt   |   ft    |   fs    |   fd    |   func    |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnFmt        S_InstnRS
 | |
| #define M_InstnFmt        M_InstnRS
 | |
| #define S_InstnFT        S_InstnRT
 | |
| #define M_InstnFT        M_InstnRT
 | |
| #define S_InstnFS        S_InstnRD
 | |
| #define M_InstnFS        M_InstnRD
 | |
| #define S_InstnFD        S_InstnSA
 | |
| #define M_InstnFD        M_InstnSA
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (cpu <-> cpu data movement))
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   sub   |   rt    |   fs    |          0          |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnSub        S_InstnRS
 | |
| #define M_InstnSub        M_InstnRS
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (compare)
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |           |         |         |         |     | |C|           |
 | |
|  * |   Opcode  |   fmt   |   ft    |   fs    |  cc |0|A|   func    |
 | |
|  * |           |         |         |         |     | |B|           |
 | |
|  * |           |         |         |         |     | |S|           |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnCCcmp        8
 | |
| #define M_InstnCCcmp        (0x7 << S_InstnCCcmp)
 | |
| #define S_InstnCABS        6
 | |
| #define M_InstnCABS        (0x1 << S_InstnCABS)
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (FPR conditional move on FP cc)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   fmt   |  cc |n|t|   fs    |   fd    |   func    |
 | |
|  * |           |         |     |d|f|         |         |           |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnCC        18
 | |
| #define M_InstnCC        (0x7 << S_InstnCC)
 | |
| #define S_InstnND        17
 | |
| #define M_InstnND        (0x1 << S_InstnND)
 | |
| #define S_InstnTF        16
 | |
| #define M_InstnTF        (0x1 << S_InstnTF)
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (3-operand operate)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   fr    |   ft    |   fs    |   fd    | op4 | fmt3|
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnFR        S_InstnRS
 | |
| #define M_InstnFR        M_InstnRS
 | |
| #define S_InstnOp4        3
 | |
| #define M_InstnOp4        (0x7 << S_InstnOp4)
 | |
| #define S_InstnFmt3        0
 | |
| #define M_InstnFmt3        (0x7 << S_InstnFmt3)
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (Indexed load, store)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   rs    |   rt    |   0     |   fd    |   func    |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| /*
 | |
|  * FP R-Type (prefx)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   rs    |   rt    |  hint   |    0    |   func    |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define S_InstnHintX        S_InstnRD
 | |
| #define M_InstnHintX        M_InstnRD
 | |
| 
 | |
| /*
 | |
|  * FP R-Type (GPR conditional move on FP cc)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |    rs   |  cc |n|t|   rd    |    0    |   func    |
 | |
|  * |           |         |     |d|f|         |         |           |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * FP I-Type (load, store)
 | |
|  * 
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   rs    |    ft   |           Offset              |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * FP I-Type (branch)
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |   Opcode  |   fmt   |  cc |n|t|           Offset              |
 | |
|  * |           |         |     |d|f|                               |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *         V I R T U A L   A D D R E S S   D E F I N I T I O N S         *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #ifdef MIPSADDR64
 | |
| #define A_K0BASE        UNS64Const(0xffffffff80000000)
 | |
| #define A_K1BASE        UNS64Const(0xffffffffa0000000)
 | |
| #define A_K2BASE        UNS64Const(0xffffffffc0000000)
 | |
| #define A_K3BASE        UNS64Const(0xffffffffe0000000)
 | |
| #define A_REGION        UNS64Const(0xc000000000000000)
 | |
| #define A_XKPHYS_ATTR        UNS64Const(0x3800000000000000)
 | |
| #else
 | |
| #define A_K0BASE        0x80000000
 | |
| #define A_K1BASE        0xa0000000
 | |
| #define A_K2BASE        0xc0000000
 | |
| #define A_K3BASE        0xe0000000
 | |
| #endif
 | |
| #define M_KMAPPED        0x40000000        /* KnSEG address is mapped if bit is one */
 | |
| 
 | |
| 
 | |
| #ifdef MIPS_Model64
 | |
| 
 | |
| #define S_VMAP64                62
 | |
| #define M_VMAP64                UNS64Const(0xc000000000000000)
 | |
| 
 | |
| #define K_VMode11               3
 | |
| #define K_VMode10               2
 | |
| #define K_VMode01               1
 | |
| #define K_VMode00               0
 | |
| 
 | |
| #define S_KSEG3                 29
 | |
| #define M_KSEG3                 (0x7 << S_KSEG3)
 | |
| #define K_KSEG3                 7
 | |
| 
 | |
| #define S_SSEG                  29
 | |
| #define M_SSEG                  (0x7 << S_KSEG3)
 | |
| #define K_SSEG                  6
 | |
| 
 | |
| #define S_KSSEG                 29
 | |
| #define M_KSSEG                 (0x7 << S_KSEG3)
 | |
| #define K_KSSEG                 6
 | |
| 
 | |
| #define S_KSEG1                 29
 | |
| #define M_KSEG1                 (0x7 << S_KSEG3)
 | |
| #define K_KSEG1                 5
 | |
| 
 | |
| #define S_KSEG0                 29
 | |
| #define M_KSEG0                 (0x7 << S_KSEG3)
 | |
| #define K_KSEG0                 4
 | |
| 
 | |
| #define S_XKSEG                 29
 | |
| #define M_XKSEG                 (0x7 << S_KSEG3)
 | |
| #define K_XKSEG                 3
 | |
| 
 | |
| #define S_USEG                  31
 | |
| #define M_USEG                  (0x1 << S_USEG)
 | |
| #define K_USEG                  0
 | |
| 
 | |
| #define S_EjtagProbeMem         20
 | |
| #define M_EjtagProbeMem         (0x1 << S_EjtagProbeMem)
 | |
| #define K_EjtagProbeMem         0
 | |
| 
 | |
| 
 | |
| 
 | |
| #else
 | |
| 
 | |
| #define S_KSEG3                 29
 | |
| #define M_KSEG3                 (0x7 << S_KSEG3)
 | |
| #define K_KSEG3                 7
 | |
| 
 | |
| #define S_KSSEG                 29
 | |
| #define M_KSSEG                 (0x7 << S_KSSEG)
 | |
| #define K_KSSEG                 6
 | |
| 
 | |
| #define S_SSEG                  29
 | |
| #define M_SSEG                  (0x7 << S_SSEG)
 | |
| #define K_SSEG                  6
 | |
| 
 | |
| #define S_KSEG1                 29
 | |
| #define M_KSEG1                 (0x7 << S_KSEG1)
 | |
| #define K_KSEG1                 5
 | |
| 
 | |
| #define S_KSEG0                 29
 | |
| #define M_KSEG0                 (0x7 << S_KSEG0)
 | |
| #define K_KSEG0                 4
 | |
| 
 | |
| #define S_KUSEG                 31
 | |
| #define M_KUSEG                 (0x1 << S_KUSEG)
 | |
| #define K_KUSEG                 0
 | |
| 
 | |
| #define S_SUSEG                 31
 | |
| #define M_SUSEG                 (0x1 << S_SUSEG)
 | |
| #define K_SUSEG                 0
 | |
| 
 | |
| #define S_USEG                  31
 | |
| #define M_USEG                  (0x1 << S_USEG)
 | |
| #define K_USEG                  0
 | |
| 
 | |
| #define K_EjtagLower            0xff200000
 | |
| #define K_EjtagUpper            0xff3fffff
 | |
| 
 | |
| #define S_EjtagProbeMem         20
 | |
| #define M_EjtagProbeMem         (0x1 << S_EjtagProbeMem)
 | |
| #define K_EjtagProbeMem         0
 | |
| 
 | |
| #endif
 | |
| 
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *   C A C H E   I N S T R U C T I O N   O P E R A T I O N   C O D E S   *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * Cache encodings
 | |
|  */
 | |
| #define K_CachePriI        0            /* Primary Icache */
 | |
| #define K_CachePriD        1            /* Primary Dcache */
 | |
| #define K_CachePriU        1            /* Unified primary */
 | |
| #define K_CacheTerU        2            /* Unified Tertiary */
 | |
| #define K_CacheSecU        3            /* Unified secondary */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * Function encodings
 | |
|  */
 | |
| #define S_CacheFunc         2            /* Amount to shift function encoding within 5-bit field */
 | |
| #define K_CacheIndexInv     0            /* Index invalidate */
 | |
| #define K_CacheIndexWBInv   0            /* Index writeback invalidate */
 | |
| #define K_CacheIndexLdTag   1            /* Index load tag */
 | |
| #define K_CacheIndexStTag   2            /* Index store tag */
 | |
| #define K_CacheHitInv       4            /* Hit Invalidate */
 | |
| #define K_CacheFill         5            /* Fill (Icache only) */
 | |
| #define K_CacheHitWBInv     5            /* Hit writeback invalidate */
 | |
| #define K_CacheHitWB        6            /* Hit writeback */
 | |
| #define K_CacheFetchLock    7            /* Fetch and lock */
 | |
| 
 | |
| #define ICIndexInv        ((K_CacheIndexInv << S_CacheFunc) | K_CachePriI)
 | |
| #define DCIndexWBInv      ((K_CacheIndexWBInv << S_CacheFunc) | K_CachePriD)
 | |
| #define DCIndexInv        DCIndexWBInv
 | |
| #define ICIndexLdTag      ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriI)
 | |
| #define DCIndexLdTag      ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriD)
 | |
| #define ICIndexStTag      ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriI)
 | |
| #define DCIndexStTag      ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriD)
 | |
| #define ICHitInv          ((K_CacheHitInv << S_CacheFunc) | K_CachePriI)
 | |
| #define DCHitInv          ((K_CacheHitInv << S_CacheFunc) | K_CachePriD)
 | |
| #define ICFill            ((K_CacheFill << S_CacheFunc) | K_CachePriI)
 | |
| #define DCHitWBInv        ((K_CacheHitWBInv << S_CacheFunc) | K_CachePriD)
 | |
| #define DCHitWB           ((K_CacheHitWB << S_CacheFunc) | K_CachePriD)
 | |
| #define ICFetchLock       ((K_CacheFetchLock << S_CacheFunc) | K_CachePriI)
 | |
| #define DCFetchLock       ((K_CacheFetchLock << S_CacheFunc) | K_CachePriD)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *          P R E F E T C H   I N S T R U C T I O N   H I N T S          *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #define PrefLoad        0
 | |
| #define PrefStore        1
 | |
| #define PrefLoadStreamed    4
 | |
| #define PrefStoreStreamed    5
 | |
| #define PrefLoadRetained    6
 | |
| #define PrefStoreRetained    7
 | |
| #define PrefWBInval        25
 | |
| #define PrefNudge        25
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *             C P U   R E G I S T E R   D E F I N I T I O N S           *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  S O F T W A R E   G P R   N A M E S                  *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #define zero             $0
 | |
| #define AT             $1
 | |
| #define v0             $2
 | |
| #define v1             $3
 | |
| #define a0             $4
 | |
| #define a1             $5
 | |
| #define a2             $6
 | |
| #define a3             $7
 | |
| #define t0             $8
 | |
| #define t1             $9
 | |
| #define t2            $10
 | |
| #define t3            $11
 | |
| #define t4            $12
 | |
| #define t5            $13
 | |
| #define t6            $14
 | |
| #define t7            $15
 | |
| #define s0            $16
 | |
| #define s1            $17
 | |
| #define s2            $18
 | |
| #define s3            $19
 | |
| #define s4            $20
 | |
| #define s5            $21
 | |
| #define s6            $22
 | |
| #define s7            $23
 | |
| #define t8            $24
 | |
| #define t9            $25
 | |
| #define k0            $26
 | |
| #define k1            $27
 | |
| #define gp            $28
 | |
| #define sp            $29
 | |
| #define fp            $30
 | |
| #define ra            $31
 | |
| 
 | |
| /*
 | |
|  * The following registers are used by the AVP environment and
 | |
|  * are not part of the normal software definitions.
 | |
|  */
 | |
| 
 | |
| #ifdef MIPSAVPENV
 | |
| #define repc            $25            /* Expected exception PC */
 | |
| #define tid            $30            /* Current test case address */
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  H A R D W A R E   G P R   N A M E S                  *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * In the AVP environment, several of the `r' names are removed from the
 | |
|  * name space because they are used by the kernel for special purposes.
 | |
|  * Removing them causes assembly rather than runtime errors for tests that
 | |
|  * use the `r' names.
 | |
|  *
 | |
|  *    - r25 (repc) is used as the expected PC on an exception
 | |
|  *    - r26-r27 (k0, k1) are used in the exception handler
 | |
|  *    - r30 (tid) is used as the current test address
 | |
|  */
 | |
| 
 | |
| #define r0             $0
 | |
| #define r1             $1
 | |
| #define r2             $2
 | |
| #define r3             $3
 | |
| #define r4             $4
 | |
| #define r5             $5
 | |
| #define r6             $6
 | |
| #define r7             $7
 | |
| #define r8             $8
 | |
| #define r9             $9
 | |
| #define r10            $10
 | |
| #define r11            $11
 | |
| #define r12            $12
 | |
| #define r13            $13
 | |
| #define r14            $14
 | |
| #define r15            $15
 | |
| #define r16            $16
 | |
| #define r17            $17
 | |
| #define r18            $18
 | |
| #define r19            $19
 | |
| #define r20            $20
 | |
| #define r21            $21
 | |
| #define r22            $22
 | |
| #define r23            $23
 | |
| #define r24            $24
 | |
| #ifdef MIPSAVPENV
 | |
| #define r25            r25_unknown
 | |
| #define r26            r26_unknown
 | |
| #define r27            r27_unknown
 | |
| #else
 | |
| #define r25            $25
 | |
| #define r26            $26
 | |
| #define r27            $27
 | |
| #endif
 | |
| #define r28            $28
 | |
| #define r29            $29
 | |
| #ifdef MIPSAVPENV
 | |
| #define r30            r30_unknown
 | |
| #else
 | |
| #define r30            $30
 | |
| #endif
 | |
| #define r31            $31
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                H A R D W A R E   G P R   I N D I C E S                *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * These definitions provide the index (number) of the GPR, as opposed
 | |
|  * to the assembler register name ($n).
 | |
|  */
 | |
| 
 | |
| #define R_r0             0
 | |
| #define R_r1             1
 | |
| #define R_r2             2
 | |
| #define R_r3             3
 | |
| #define R_r4             4
 | |
| #define R_r5             5
 | |
| #define R_r6             6
 | |
| #define R_r7             7
 | |
| #define R_r8             8
 | |
| #define R_r9             9
 | |
| #define R_r10            10
 | |
| #define R_r11            11
 | |
| #define R_r12            12
 | |
| #define R_r13            13
 | |
| #define R_r14            14
 | |
| #define R_r15            15
 | |
| #define R_r16            16
 | |
| #define R_r17            17
 | |
| #define R_r18            18
 | |
| #define R_r19            19
 | |
| #define R_r20            20
 | |
| #define R_r21            21
 | |
| #define R_r22            22
 | |
| #define R_r23            23
 | |
| #define R_r24            24
 | |
| #define R_r25            25
 | |
| #define R_r26            26
 | |
| #define R_r27            27
 | |
| #define R_r28            28
 | |
| #define R_r29            29
 | |
| #define R_r30            30
 | |
| #define R_r31            31
 | |
| #define R_hi            32            /* Hi register */
 | |
| #define R_lo            33            /* Lo register */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  S O F T W A R E   G P R   M A S K S                  *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * These definitions provide the bit mask corresponding to the GPR number
 | |
|  */
 | |
| 
 | |
| #define M_AT             (1<<1)
 | |
| #define M_v0             (1<<2)
 | |
| #define M_v1             (1<<3)
 | |
| #define M_a0             (1<<4)
 | |
| #define M_a1             (1<<5)
 | |
| #define M_a2             (1<<6)
 | |
| #define M_a3             (1<<7)
 | |
| #define M_t0             (1<<8)
 | |
| #define M_t1             (1<<9)
 | |
| #define M_t2            (1<<10)
 | |
| #define M_t3            (1<<11)
 | |
| #define M_t4            (1<<12)
 | |
| #define M_t5            (1<<13)
 | |
| #define M_t6            (1<<14)
 | |
| #define M_t7            (1<<15)
 | |
| #define M_s0            (1<<16)
 | |
| #define M_s1            (1<<17)
 | |
| #define M_s2            (1<<18)
 | |
| #define M_s3            (1<<19)
 | |
| #define M_s4            (1<<20)
 | |
| #define M_s5            (1<<21)
 | |
| #define M_s6            (1<<22)
 | |
| #define M_s7            (1<<23)
 | |
| #define M_t8            (1<<24)
 | |
| #define M_t9            (1<<25)
 | |
| #define M_k0            (1<<26)
 | |
| #define M_k1            (1<<27)
 | |
| #define M_gp            (1<<28)
 | |
| #define M_sp            (1<<29)
 | |
| #define M_fp            (1<<30)
 | |
| #define M_ra            (1<<31)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *             C P 0   R E G I S T E R   D E F I N I T I O N S           *
 | |
|  *************************************************************************
 | |
|  * Each register has the following definitions:
 | |
|  *
 | |
|  *    C0_rrr        The register number (as a $n value)
 | |
|  *    R_C0_rrr    The register index (as an integer corresponding
 | |
|  *            to the register number)
 | |
|  *
 | |
|  * Each field in a register has the following definitions:
 | |
|  *
 | |
|  *    S_rrrfff    The shift count required to right-justify
 | |
|  *            the field.  This corresponds to the bit
 | |
|  *            number of the right-most bit in the field.
 | |
|  *    M_rrrfff    The Mask required to isolate the field.
 | |
|  *
 | |
|  * Register diagrams included below as comments correspond to the
 | |
|  * MIPS32 and MIPS64 architecture specifications.  Refer to other
 | |
|  * sources for register diagrams for older architectures.
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 I N D E X   R E G I S T E R   ( 0 )                  *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |P|                         0                       |   Index   | Index
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Index        $0
 | |
| #define R_C0_Index        0
 | |
| #define C0_INX            C0_Index        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_IndexP        31            /* Probe failure (R)*/
 | |
| #define M_IndexP        (0x1 << S_IndexP)
 | |
| 
 | |
| #define S_IndexIndex        0            /* TLB index (R/W)*/
 | |
| #define M_IndexIndex        (0x3f << S_IndexIndex)
 | |
| 
 | |
| #define M_Index0Fields        0x7fffffc0
 | |
| #define M_IndexRFields        0x80000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                R A N D O M   R E G I S T E R   ( 1 )                 *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                            0                      |   Index   | Random
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Random        $1
 | |
| #define R_C0_Random        1
 | |
| #define C0_RAND            $1            /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_RandomIndex        0            /* TLB random index (R)*/
 | |
| #define M_RandomIndex        (0x3f << S_RandomIndex)
 | |
| 
 | |
| #define M_Random0Fields        0xffffffc0
 | |
| #define M_RandomRFields        0x0000003f
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              E N T R Y L O 0   R E G I S T E R   ( 2 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * | Fill (0) //| 0 |                     PFN                       |  C  |D|V|G| EntryLo0
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_EntryLo0        $2
 | |
| #define R_C0_EntryLo0        2
 | |
| #define C0_TLBLO_0        C0_EntryLo0        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_EntryLoPFN        6            /* PFN (R/W) */
 | |
| #define M_EntryLoPFN        (0xffffff << S_EntryLoPFN)
 | |
| #define S_EntryLoC        3            /* Coherency attribute (R/W) */
 | |
| #define M_EntryLoC        (0x7 << S_EntryLoC)
 | |
| #define S_EntryLoD        2            /* Dirty (R/W) */
 | |
| #define M_EntryLoD        (0x1 << S_EntryLoD)
 | |
| #define S_EntryLoV        1            /* Valid (R/W) */
 | |
| #define M_EntryLoV        (0x1 << S_EntryLoV)
 | |
| #define S_EntryLoG        0            /* Global (R/W) */
 | |
| #define M_EntryLoG        (0x1 << S_EntryLoG)
 | |
| #define M_EntryLoOddPFN        (0x1 << S_EntryLoPFN)    /* Odd PFN bit */
 | |
| #define S_EntryLo_RS        K_PageAlign        /* Right-justify PFN */
 | |
| #define S_EntryLo_LS        S_EntryLoPFN        /* Position PFN to appropriate position */
 | |
| 
 | |
| #define M_EntryLo0Fields    0x00000000
 | |
| #define M_EntryLoRFields    0xc0000000
 | |
| #define M_EntryLo0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_EntryLoRFields64    UNS64Const(0xffffffffc0000000)
 | |
| 
 | |
| /*
 | |
|  * Cache attribute values in the C field of EntryLo and the
 | |
|  * K0 field of Config
 | |
|  */
 | |
| #define K_CacheAttrCWTnWA    0            /* Cacheable, write-thru, no write allocate */
 | |
| #define K_CacheAttrCWTWA    1            /* Cacheable, write-thru, write allocate */
 | |
| #define K_CacheAttrU        2            /* Uncached */
 | |
| #define K_CacheAttrC        3            /* Cacheable */
 | |
| #define K_CacheAttrCN        3            /* Cacheable, non-coherent */
 | |
| #define K_CacheAttrCCE        4            /* Cacheable, coherent, exclusive */
 | |
| #define K_CacheAttrCCS        5            /* Cacheable, coherent, shared */
 | |
| #define K_CacheAttrCCU        6            /* Cacheable, coherent, update */
 | |
| #define K_CacheAttrUA        7            /* Uncached accelerated */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              E N T R Y L O 1   R E G I S T E R   ( 3 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * | Fill (0) //| 0 |                     PFN                       |  C  |D|V|G| EntryLo1
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_EntryLo1        $3
 | |
| #define R_C0_EntryLo1        3
 | |
| #define C0_TLBLO_1        C0_EntryLo1        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| /*
 | |
|  * Field definitions are as given for EntryLo0 above
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               C O N T E X T   R E G I S T E R   ( 4 )                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //       PTEBase    |            BadVPN<31:13>            |   0   | Context
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Context        $4
 | |
| #define R_C0_Context        4
 | |
| #define C0_CTXT            C0_Context        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_ContextPTEBase    23            /* PTE base (R/W) */
 | |
| #define M_ContextPTEBase    (0x1ff << S_ContextPTEBase)
 | |
| #define S_ContextBadVPN        4            /* BadVPN2 (R) */
 | |
| #define M_ContextBadVPN        (0x7ffff << S_ContextBadVPN)
 | |
| #define S_ContextBadVPN_LS    9            /* Position BadVPN to bit 31 */
 | |
| #define S_ContextBadVPN_RS    13            /* Right-justify shifted BadVPN field */
 | |
| 
 | |
| #define M_Context0Fields    0x0000000f
 | |
| #define M_ContextRFields    0x007ffff0
 | |
| #define M_Context0Fields64    UNS64Const(0x000000000000000f)
 | |
| #define M_ContextRFields64    UNS64Const(0x00000000007ffff0)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              P A G E M A S K   R E G I S T E R   ( 5 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |      0      |        Mask           |            0            | PageMask
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_PageMask        $5
 | |
| #define R_C0_PageMask        5            /* Mask (R/W) */
 | |
| #define C0_PGMASK        C0_PageMask        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_PageMaskMask        13
 | |
| #define M_PageMaskMask        (0xfff << S_PageMaskMask)
 | |
| 
 | |
| #define M_PageMask0Fields    0xfe001fff
 | |
| #define M_PageMaskRFields    0x00000000
 | |
| 
 | |
| /*
 | |
|  * Values in the Mask field
 | |
|  */
 | |
| #define K_PageMask4K        0x000            /* K_PageMasknn values are values for use */
 | |
| #define K_PageMask16K        0x003            /* with KReqPageAttributes or KReqPageMask macros */
 | |
| #define K_PageMask64K        0x00f
 | |
| #define K_PageMask256K        0x03f
 | |
| #define K_PageMask1M        0x0ff
 | |
| #define K_PageMask4M        0x3ff
 | |
| #define K_PageMask16M        0xfff
 | |
| 
 | |
| #define M_PageMask4K        (K_PageMask4K << S_PageMaskMask) /* M_PageMasknn values are masks */
 | |
| #define M_PageMask16K        (K_PageMask16K << S_PageMaskMask) /* in position in the PageMask register */
 | |
| #define M_PageMask64K        (K_PageMask64K << S_PageMaskMask)
 | |
| #define M_PageMask256K        (K_PageMask256K << S_PageMaskMask)
 | |
| #define M_PageMask1M        (K_PageMask1M << S_PageMaskMask)
 | |
| #define M_PageMask4M        (K_PageMask4M << S_PageMaskMask)
 | |
| #define M_PageMask16M        (K_PageMask16M << S_PageMaskMask)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 W I R E D   R E G I S T E R   ( 6 )                  *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                            0                      |   Index   | Wired
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Wired        $6
 | |
| #define R_C0_Wired        6
 | |
| #define C0_TLBWIRED        C0_Wired        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_WiredIndex        0            /* TLB wired boundary (R/W) */
 | |
| #define M_WiredIndex        (0x3f << S_WiredIndex)
 | |
| 
 | |
| #define M_Wired0Fields        0xffffffc0
 | |
| #define M_WiredRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              B A D V A D D R   R E G I S T E R   ( 8 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                     Bad Virtual Address                        | BadVAddr
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_BadVAddr        $8
 | |
| #define R_C0_BadVAddr        8
 | |
| #define C0_BADVADDR        C0_BadVAddr        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_BadVAddrOddPage    K_PageSize        /* Even/Odd VA bit for pair of PAs */
 | |
| 
 | |
| #define M_BadVAddr0Fields    0x00000000
 | |
| #define M_BadVAddrRFields    0xffffffff
 | |
| #define M_BadVAddr0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_BadVAddrRFields64    UNS64Const(0xffffffffffffffff)
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 C O U N T   R E G I S T E R   ( 9 )                  *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                         Count Value                           | Count
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Count        $9
 | |
| #define R_C0_Count        9
 | |
| #define C0_COUNT        C0_Count        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_Count0Fields        0x00000000
 | |
| #define M_CountRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              E N T R Y H I   R E G I S T E R   ( 1 0 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 6 6 6 5 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 2 1 0 9 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * | R | Fill //                 VPN2                 |    0    |     ASID      | EntryHi
 | |
|  * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_EntryHi        $10
 | |
| #define R_C0_EntryHi        10
 | |
| #define C0_TLBHI        C0_EntryHi        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_EntryHiR64        62            /* Region (R/W) */
 | |
| #define M_EntryHiR64        UNS64Const(0xc000000000000000)
 | |
| #define S_EntryHiVPN2        13            /* VPN/2 (R/W) */
 | |
| #define M_EntryHiVPN2        (0x7ffff << S_EntryHiVPN2)
 | |
| #define M_EntryHiVPN264        UNS64Const(0x000000ffffffe000)
 | |
| #define S_EntryHiASID        0            /* ASID (R/W) */
 | |
| #define M_EntryHiASID        (0xff << S_EntryHiASID)
 | |
| #define S_EntryHiVPN_Shf    S_EntryHiVPN2
 | |
| 
 | |
| #define M_EntryHi0Fields    0x00001f00
 | |
| #define M_EntryHiRFields    0x00000000
 | |
| #define M_EntryHi0Fields64    UNS64Const(0x0000000000001f00)
 | |
| #define M_EntryHiRFields64    UNS64Const(0x3fffff0000000000)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              C O M P A R E   R E G I S T E R   ( 1 1 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                        Compare Value                          | Compare
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Compare        $11
 | |
| #define R_C0_Compare        11
 | |
| #define C0_COMPARE        C0_Compare        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_Compare0Fields    0x00000000
 | |
| #define M_CompareRFields    0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               S T A T U S   R E G I S T E R   ( 1 2 )                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |C|C|C|C|R|F|R|M|P|B|T|S|M| | R |I|I|I|I|I|I|I|I|K|S|U|U|R|E|E|I|
 | |
|  * |U|U|U|U|P|R|E|X|X|E|S|R|M| | s |M|M|M|M|M|M|M|M|X|X|X|M|s|R|X|E| Status
 | |
|  * |3|2|1|0| | | | | |V| | |I| | v |7|6|5|4|3|2|1|0| | | | |v|L|L| |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Status        $12
 | |
| #define R_C0_Status        12
 | |
| #define C0_SR            C0_Status        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_StatusCU        28            /* Coprocessor enable (R/W) */
 | |
| #define M_StatusCU        (0xf << S_StatusCU)
 | |
| #define S_StatusCU3        31
 | |
| #define M_StatusCU3         (0x1 << S_StatusCU3)
 | |
| #define S_StatusCU2        30
 | |
| #define M_StatusCU2        (0x1 << S_StatusCU2)
 | |
| #define S_StatusCU1        29
 | |
| #define M_StatusCU1        (0x1 << S_StatusCU1)
 | |
| #define S_StatusCU0        28
 | |
| #define M_StatusCU0        (0x1 << S_StatusCU0)
 | |
| #define S_StatusRP        27            /* Enable reduced power mode (R/W) */
 | |
| #define M_StatusRP        (0x1 << S_StatusRP)
 | |
| #define S_StatusFR        26            /* Enable 64-bit FPRs (MIPS64 only) (R/W) */
 | |
| #define M_StatusFR        (0x1 << S_StatusFR)
 | |
| #define S_StatusRE        25            /* Enable reverse endian (R/W) */
 | |
| #define M_StatusRE        (0x1 << S_StatusRE)
 | |
| #define S_StatusMX        24            /* Enable access to MDMX resources (MIPS64 only) (R/W) */
 | |
| #define M_StatusMX        (0x1 << S_StatusMX)
 | |
| #define S_StatusPX        23            /* Enable access to 64-bit instructions/data (MIPS64 only) (R/W) */
 | |
| #define M_StatusPX        (0x1 << S_StatusPX)
 | |
| #define S_StatusBEV        22            /* Enable Boot Exception Vectors (R/W) */
 | |
| #define M_StatusBEV        (0x1 << S_StatusBEV)
 | |
| #define S_StatusTS        21            /* Denote TLB shutdown (R/W) */
 | |
| #define M_StatusTS        (0x1 << S_StatusTS)
 | |
| #define S_StatusSR        20            /* Denote soft reset (R/W) */
 | |
| #define M_StatusSR        (0x1 << S_StatusSR)
 | |
| #define S_StatusNMI        19
 | |
| #define M_StatusNMI        (0x1 << S_StatusNMI)    /* Denote NMI (R/W) */
 | |
| #define S_StatusIM        8            /* Interrupt mask (R/W) */
 | |
| #define M_StatusIM        (0xff << S_StatusIM)
 | |
| #define S_StatusIM7        15
 | |
| #define M_StatusIM7        (0x1 << S_StatusIM7)
 | |
| #define S_StatusIM6        14
 | |
| #define M_StatusIM6        (0x1 << S_StatusIM6)
 | |
| #define S_StatusIM5        13
 | |
| #define M_StatusIM5        (0x1 << S_StatusIM5)
 | |
| #define S_StatusIM4        12
 | |
| #define M_StatusIM4        (0x1 << S_StatusIM4)
 | |
| #define S_StatusIM3        11
 | |
| #define M_StatusIM3        (0x1 << S_StatusIM3)
 | |
| #define S_StatusIM2        10
 | |
| #define M_StatusIM2        (0x1 << S_StatusIM2)
 | |
| #define S_StatusIM1        9
 | |
| #define M_StatusIM1        (0x1 << S_StatusIM1)
 | |
| #define S_StatusIM0        8
 | |
| #define M_StatusIM0        (0x1 << S_StatusIM0)
 | |
| #define S_StatusKX        7            /* Enable access to extended kernel addresses (MIPS64 only) (R/W) */
 | |
| #define M_StatusKX        (0x1 << S_StatusKX)
 | |
| #define S_StatusSX        6            /* Enable access to extended supervisor addresses (MIPS64 only) (R/W) */
 | |
| #define M_StatusSX        (0x1 << S_StatusSX)
 | |
| #define S_StatusUX        5            /* Enable access to extended user addresses (MIPS64 only) (R/W) */
 | |
| #define M_StatusUX        (0x1 << S_StatusUX)
 | |
| #define S_StatusKSU        3            /* Two-bit current mode (R/W) */
 | |
| #define M_StatusKSU        (0x3 << S_StatusKSU)
 | |
| #define S_StatusUM        4            /* User mode if supervisor mode not implemented (R/W) */
 | |
| #define M_StatusUM        (0x1 << S_StatusUM)
 | |
| #define S_StatusSM        3            /* Supervisor mode (R/W) */
 | |
| #define M_StatusSM        (0x1 << S_StatusSM)
 | |
| #define S_StatusERL        2            /* Denotes error level (R/W) */
 | |
| #define M_StatusERL        (0x1 << S_StatusERL)
 | |
| #define S_StatusEXL        1            /* Denotes exception level (R/W) */
 | |
| #define M_StatusEXL        (0x1 << S_StatusEXL)
 | |
| #define S_StatusIE        0            /* Enables interrupts (R/W) */
 | |
| #define M_StatusIE        (0x1 << S_StatusIE)
 | |
| 
 | |
| #define M_Status0Fields        0x00040000
 | |
| #define M_StatusRFields        0x058000e0        /* FR, MX, PX, KX, SX, UX unused in MIPS32 */
 | |
| #define M_Status0Fields64    0x00040000
 | |
| #define M_StatusRFields64    0x00000000
 | |
| 
 | |
| /*
 | |
|  * Values in the KSU field
 | |
|  */
 | |
| #define K_StatusKSU_U        2            /* User mode in KSU field */
 | |
| #define K_StatusKSU_S        1            /* Supervisor mode in KSU field */
 | |
| #define K_StatusKSU_K        0            /* Kernel mode in KSU field */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                C A U S E   R E G I S T E R   ( 1 3 )                 *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |B| | C |       |I|W|           |I|I|I|I|I|I|I|I| |         | R |
 | |
|  * |D| | E | Rsvd  |V|P|    Rsvd   |P|P|P|P|P|P|P|P| | ExcCode | s | Cause
 | |
|  * | | |   |       | | |           |7|6|5|4|3|2|1|0| |         | v |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Cause        $13
 | |
| #define R_C0_Cause        13
 | |
| #define C0_CAUSE        C0_Cause        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_CauseBD        31
 | |
| #define M_CauseBD        (0x1 << S_CauseBD)
 | |
| #define S_CauseCE        28
 | |
| #define M_CauseCE        (0x3<< S_CauseCE)
 | |
| #define S_CauseIV        23
 | |
| #define M_CauseIV        (0x1 << S_CauseIV)
 | |
| #define S_CauseWP        22
 | |
| #define M_CauseWP        (0x1 << S_CauseWP)
 | |
| #define S_CauseIP        8
 | |
| #define M_CauseIP        (0xff << S_CauseIP)
 | |
| #define S_CauseIPEXT        10
 | |
| #define M_CauseIPEXT        (0x3f << S_CauseIPEXT)
 | |
| #define S_CauseIP7        15
 | |
| #define M_CauseIP7        (0x1 << S_CauseIP7)
 | |
| #define S_CauseIP6        14
 | |
| #define M_CauseIP6        (0x1 << S_CauseIP6)
 | |
| #define S_CauseIP5        13
 | |
| #define M_CauseIP5        (0x1 << S_CauseIP5)
 | |
| #define S_CauseIP4        12
 | |
| #define M_CauseIP4        (0x1 << S_CauseIP4)
 | |
| #define S_CauseIP3        11
 | |
| #define M_CauseIP3        (0x1 << S_CauseIP3)
 | |
| #define S_CauseIP2        10
 | |
| #define M_CauseIP2        (0x1 << S_CauseIP2)
 | |
| #define S_CauseIP1        9
 | |
| #define M_CauseIP1        (0x1 << S_CauseIP1)
 | |
| #define S_CauseIP0        8
 | |
| #define M_CauseIP0        (0x1 << S_CauseIP0)
 | |
| #define S_CauseExcCode        2
 | |
| #define M_CauseExcCode        (0x1f << S_CauseExcCode)
 | |
| 
 | |
| #define M_Cause0Fields        0x4f3f0083
 | |
| #define M_CauseRFields        0xb000fc7c
 | |
| 
 | |
| /*
 | |
|  * Values in the CE field
 | |
|  */
 | |
| #define K_CauseCE0        0            /* Coprocessor 0 in the CE field */
 | |
| #define K_CauseCE1        1            /* Coprocessor 1 in the CE field */
 | |
| #define K_CauseCE2        2            /* Coprocessor 2 in the CE field */
 | |
| #define K_CauseCE3        3            /* Coprocessor 3 in the CE field */
 | |
| 
 | |
| /*
 | |
|  * Values in the ExcCode field
 | |
|  */
 | |
| #define    EX_INT            0            /* Interrupt */
 | |
| #define    EXC_INT            (EX_INT << S_CauseExcCode)
 | |
| #define    EX_MOD            1            /* TLB modified */
 | |
| #define    EXC_MOD            (EX_MOD << S_CauseExcCode)
 | |
| #define    EX_TLBL                2            /* TLB exception (load or ifetch) */
 | |
| #define    EXC_TLBL        (EX_TLBL << S_CauseExcCode)
 | |
| #define    EX_TLBS                3            /* TLB exception (store) */
 | |
| #define    EXC_TLBS        (EX_TLBS << S_CauseExcCode)
 | |
| #define    EX_ADEL                4            /* Address error (load or ifetch) */
 | |
| #define    EXC_ADEL        (EX_ADEL << S_CauseExcCode)
 | |
| #define    EX_ADES                5            /* Address error (store) */
 | |
| #define    EXC_ADES        (EX_ADES << S_CauseExcCode)
 | |
| #define    EX_IBE            6            /* Instruction Bus Error */
 | |
| #define    EXC_IBE            (EX_IBE << S_CauseExcCode)
 | |
| #define    EX_DBE            7            /* Data Bus Error */
 | |
| #define    EXC_DBE            (EX_DBE << S_CauseExcCode)
 | |
| #define    EX_SYS            8            /* Syscall */
 | |
| #define    EXC_SYS            (EX_SYS << S_CauseExcCode)
 | |
| #define    EX_SYSCALL        EX_SYS
 | |
| #define    EXC_SYSCALL        EXC_SYS
 | |
| #define    EX_BP            9            /* Breakpoint */
 | |
| #define    EXC_BP            (EX_BP << S_CauseExcCode)
 | |
| #define    EX_BREAK        EX_BP
 | |
| #define    EXC_BREAK        EXC_BP
 | |
| #define    EX_RI            10            /* Reserved instruction */
 | |
| #define    EXC_RI            (EX_RI << S_CauseExcCode)
 | |
| #define    EX_CPU            11            /* CoProcessor Unusable */
 | |
| #define    EXC_CPU            (EX_CPU << S_CauseExcCode)
 | |
| #define    EX_OV            12            /* OVerflow */
 | |
| #define    EXC_OV            (EX_OV << S_CauseExcCode)
 | |
| #define    EX_TR                13            /* Trap instruction */
 | |
| #define    EXC_TR            (EX_TR << S_CauseExcCode)
 | |
| #define    EX_TRAP            EX_TR
 | |
| #define    EXC_TRAP        EXC_TR
 | |
| #define EX_FPE            15            /* floating point exception */
 | |
| #define EXC_FPE            (EX_FPE << S_CauseExcCode)
 | |
| #define EX_C2E            18            /* COP2 exception */
 | |
| #define EXC_C2E            (EX_C2E << S_CauseExcCode)
 | |
| #define EX_MDMX            22            /* MDMX exception */
 | |
| #define EXC_MDMX        (EX_MDMX << S_CauseExcCode)
 | |
| #define EX_WATCH        23            /* Watch exception */
 | |
| #define EXC_WATCH        (EX_WATCH << S_CauseExcCode)
 | |
| #define    EX_MCHECK            24            /* Machine check exception */
 | |
| #define    EXC_MCHECK         (EX_MCHECK << S_CauseExcCode)
 | |
| #define    EX_CacheErr            30            /* Cache error caused re-entry to Debug Mode */
 | |
| #define    EXC_CacheErr         (EX_CacheErr << S_CauseExcCode)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                   E P C   R E G I S T E R   ( 1 4 )                  *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                        Exception PC                            | EPC
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_EPC            $14
 | |
| #define R_C0_EPC        14
 | |
| 
 | |
| #define M_EPC0Fields        0x00000000
 | |
| #define M_EPCRFields        0x00000000
 | |
| #define M_EPC0Fields64        UNS64Const(0x0000000000000000)
 | |
| #define M_EPCRFields64        UNS64Const(0x0000000000000000)
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                  P R I D   R E G I S T E R   ( 1 5 )                 *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  Company Opts |   Company ID  |  Procesor ID  |   Revision    | PRId
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_PRId            $15
 | |
| #define R_C0_PRId        15
 | |
| #define C0_PRID            C0_PRID            /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_PRIdCoOpt        24            /* Company options (R) */
 | |
| #define M_PRIdCoOpt        (0xff << S_PRIdCoOpt)
 | |
| #define S_PRIdCoID        16            /* Company ID (R) */
 | |
| #define M_PRIdCoID        (0xff << S_PRIdCoID)
 | |
| #define S_PRIdImp        8            /* Implementation ID (R) */
 | |
| #define M_PRIdImp        (0xff << S_PRIdImp)
 | |
| #define S_PRIdRev        0            /* Revision (R) */
 | |
| #define M_PRIdRev        (0xff << S_PRIdRev)
 | |
| 
 | |
| #define M_PRId0Fields        0x00000000
 | |
| #define M_PRIdRFields        0xffffffff
 | |
| /*
 | |
|  * Values in the Company ID field
 | |
|  */
 | |
| #define K_PRIdCoID_MIPS    1
 | |
| #define K_PRIdCoID_Broadcom 2
 | |
| #define K_PRIdCoID_Alchemy 3
 | |
| #define K_PRIdCoID_SiByte 4
 | |
| #define K_PRIdCoID_SandCraft 5
 | |
| #define K_PRIdCoID_Philips 6
 | |
| #define K_PRIdCoID_NextAvailable 7 /* Next available encoding */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * Values in the implementation number field
 | |
|  */
 | |
| #define K_PRIdImp_Jade        0x80
 | |
| #define K_PRIdImp_Opal        0x81
 | |
| #define K_PRIdImp_Ruby        0x82
 | |
| #define K_PRIdImp_JadeLite    0x83
 | |
| #define K_PRIdImp_4KEc          0x84    /* Emerald with TLB MMU */
 | |
| #define K_PRIdImp_4KEmp         0x85    /* Emerald with FM MMU */
 | |
| #define K_PRIdImp_4KSc          0x86    /* Coral */
 | |
| 
 | |
| #define K_PRIdImp_R3000        0x01
 | |
| #define K_PRIdImp_R4000        0x04
 | |
| #define K_PRIdImp_R10000    0x09
 | |
| #define K_PRIdImp_R4300        0x0b
 | |
| #define K_PRIdImp_R5000        0x23
 | |
| #define K_PRIdImp_R5200        0x28
 | |
| #define K_PRIdImp_R5400        0x54
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               C O N F I G   R E G I S T E R   ( 1 6 )                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |M|                             |B| A |  A  |               | K | Config
 | |
|  * | | Reserved for Implementations|E| T |  R  |    Reserved   | 0 |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Config        $16
 | |
| #define R_C0_Config        16
 | |
| #define C0_CONFIG        C0_Config        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_ConfigMore        31            /* Additional config registers present (R) */
 | |
| #define M_ConfigMore        (0x1 << S_ConfigMore)
 | |
| #define S_ConfigImpl        16            /* Implementation-specific fields */
 | |
| #define M_ConfigImpl        (0x7fff << S_ConfigImpl)
 | |
| #define S_ConfigBE        15            /* Denotes big-endian operation (R) */
 | |
| #define M_ConfigBE        (0x1 << S_ConfigBE)
 | |
| #define S_ConfigAT        13            /* Architecture type (R) */
 | |
| #define M_ConfigAT        (0x3 << S_ConfigAT)
 | |
| #define S_ConfigAR        10            /* Architecture revision (R) */
 | |
| #define M_ConfigAR        (0x7 << S_ConfigAR)
 | |
| #define S_ConfigMT        7            /* MMU Type (R) */
 | |
| #define M_ConfigMT        (0x7 << S_ConfigMT)
 | |
| #define S_ConfigK0        0            /* Kseg0 coherency algorithm (R/W) */
 | |
| #define M_ConfigK0        (0x7 << S_ConfigK0)
 | |
| 
 | |
| /*
 | |
|  * The following definitions are technically part of the "reserved for
 | |
|  * implementations" field, but are the semi-standard definition used in
 | |
|  * fixed-mapping MMUs to control the cacheability of kuseg and kseg2/3
 | |
|  * references.  For that reason, they are included here, but may be
 | |
|  * overridden by true implementation-specific definitions
 | |
|  */
 | |
| #define S_ConfigK23        28            /* Kseg2/3 coherency algorithm (FM MMU only) (R/W) */
 | |
| #define M_ConfigK23        (0x7 << S_ConfigK23)
 | |
| #define S_ConfigKU        25            /* Kuseg coherency algorithm (FM MMU only) (R/W) */
 | |
| #define M_ConfigKU        (0x7 << S_ConfigKU)
 | |
| 
 | |
| #define M_Config0Fields        0x00000078
 | |
| #define M_ConfigRFields        0x8000ff80
 | |
| 
 | |
| /*
 | |
|  * Values in the AT field
 | |
|  */
 | |
| #define K_ConfigAT_MIPS32    0            /* MIPS32 */
 | |
| #define K_ConfigAT_MIPS64S    1            /* MIPS64 with 32-bit addresses */
 | |
| #define K_ConfigAT_MIPS64    2            /* MIPS64 with 32/64-bit addresses */
 | |
| 
 | |
| /*
 | |
|  * Values in the MT field
 | |
|  */
 | |
| #define K_ConfigMT_NoMMU    0            /* No MMU */
 | |
| #define K_ConfigMT_TLBMMU    1            /* Standard TLB MMU */
 | |
| #define K_ConfigMT_BATMMU    2            /* Standard BAT MMU */
 | |
| #define K_ConfigMT_FMMMU    3            /* Standard Fixed Mapping MMU */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *         C O N F I G 1   R E G I S T E R   ( 1 6, SELECT 1 )          *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |M|  MMU Size |  IS |  IL |  IA |  DS |  DL |  DA |C|M|P|W|C|E|F| Config1
 | |
|  * | |           |     |     |     |     |     |     |2|D|C|R|A|P|P|
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Config1        $16,1
 | |
| #define R_C0_Config1        16
 | |
| 
 | |
| #define S_Config1More        31            /* Additional Config registers present (R) */
 | |
| #define M_Config1More        (0x1 << S_Config1More)
 | |
| #define S_Config1MMUSize     25            /* Number of MMU entries - 1 (R) */
 | |
| #define M_Config1MMUSize     (0x3f << S_Config1MMUSize)
 | |
| #define S_Config1IS        22            /* Icache sets per way (R) */
 | |
| #define M_Config1IS        (0x7 << S_Config1IS)
 | |
| #define S_Config1IL        19            /* Icache line size (R) */
 | |
| #define M_Config1IL        (0x7 << S_Config1IL)
 | |
| #define S_Config1IA        16            /* Icache associativity - 1 (R) */
 | |
| #define M_Config1IA        (0x7 << S_Config1IA)
 | |
| #define S_Config1DS        13            /* Dcache sets per way (R) */
 | |
| #define M_Config1DS        (0x7 << S_Config1DS)
 | |
| #define S_Config1DL        10            /* Dcache line size (R) */
 | |
| #define M_Config1DL        (0x7 << S_Config1DL)
 | |
| #define S_Config1DA        7            /* Dcache associativity (R) */
 | |
| #define M_Config1DA        (0x7 << S_Config1DA)
 | |
| #define S_Config1C2        6            /* Coprocessor 2 present (R) */
 | |
| #define M_Config1C2        (0x1 << S_Config1C2)
 | |
| #define S_Config1MD        5            /* Denotes MDMX present (R) */
 | |
| #define M_Config1MD        (0x1 << S_Config1MD)
 | |
| #define S_Config1PC        4            /* Denotes performance counters present (R) */
 | |
| #define M_Config1PC        (0x1 << S_Config1PC)
 | |
| #define S_Config1WR        3            /* Denotes watch registers present (R) */
 | |
| #define M_Config1WR        (0x1 << S_Config1WR)
 | |
| #define S_Config1CA        2            /* Denotes MIPS-16 present (R) */
 | |
| #define M_Config1CA        (0x1 << S_Config1CA)
 | |
| #define S_Config1EP        1            /* Denotes EJTAG present (R) */
 | |
| #define M_Config1EP        (0x1 << S_Config1EP)
 | |
| #define S_Config1FP        0            /* Denotes floating point present (R) */
 | |
| #define M_Config1FP        (0x1 << S_Config1FP)
 | |
| 
 | |
| #define M_Config10Fields    0x00000060
 | |
| #define M_Config1RFields    0x7fffff9f
 | |
| 
 | |
| /*
 | |
|  * The following macro generates a table that is indexed
 | |
|  * by the Icache or Dcache sets field in Config1 and
 | |
|  * contains the decoded value of sets per way
 | |
|  */
 | |
| #define Config1CacheSets()    \
 | |
|     HALF(64);        \
 | |
|     HALF(128);        \
 | |
|     HALF(256);        \
 | |
|     HALF(512);        \
 | |
|     HALF(1024);        \
 | |
|     HALF(2048);        \
 | |
|     HALF(4096);        \
 | |
|     HALF(8192);
 | |
| 
 | |
| /*
 | |
|  * The following macro generates a table that is indexed
 | |
|  * by the Icache or Dcache line size field in Config1 and
 | |
|  * contains the decoded value of the cache line size, in bytes
 | |
|  */
 | |
| #define Config1CacheLineSize()    \
 | |
|     HALF(0);        \
 | |
|     HALF(4);        \
 | |
|     HALF(8);        \
 | |
|     HALF(16);        \
 | |
|     HALF(32);        \
 | |
|     HALF(64);        \
 | |
|     HALF(128);        \
 | |
|     HALF(256);
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *         C O N F I G 2   R E G I S T E R   ( 1 6, SELECT 2 )          *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |M|           |     |     |     |     |     |     | | | | | |S|T| Config1
 | |
|  * | |           |     |     |     |     |     |     | | | | | |M|L|
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Config2        $16,2
 | |
| #define R_C0_Config2        16
 | |
| 
 | |
| #define S_Config2More        31            /* Additional Config registers present (R) */
 | |
| #define M_Config2More        (0x1 << S_Config2More)
 | |
| #define S_Config2SM        1            /* Denotes SmartMIPS ASE present (R) */
 | |
| #define M_Config2SM        (0x1 << S_Config2SM)
 | |
| #define S_Config2TL        0            /* Denotes Tracing Logic present (R) */
 | |
| #define M_Config2TL        (0x1 << S_Config2TL)
 | |
| 
 | |
| #define M_Config20Fields    0xfffffffc
 | |
| #define M_Config2RFields    0x00000003
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                L L A D D R   R E G I S T E R   ( 1 7 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 6    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 2    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |    //                      LL Physical Address                       | LLAddr
 | |
|  * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_LLAddr        $17
 | |
| #define R_C0_LLAddr        17
 | |
| #define C0_LLADDR        C0_LLAddr        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_LLAddr0Fields        0x00000000
 | |
| #define M_LLAddrRFields        0x00000000
 | |
| #define M_LLAddr0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_LLAddrRFields64    UNS64Const(0x0000000000000000)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               W A T C H L O   R E G I S T E R   ( 1 8 )              *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                    Watch Virtual Address                 |I|R|W| WatchLo
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_WatchLo        $18
 | |
| #define R_C0_WatchLo        18
 | |
| #define C0_WATCHLO        C0_WatchLo        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_WatchLoVAddr        3            /* Watch virtual address (R/W) */
 | |
| #define M_WatchLoVAddr        (0x1fffffff << S_WatchLoVAddr)
 | |
| #define S_WatchLoI        2            /* Enable Istream watch (R/W) */
 | |
| #define M_WatchLoI        (0x1 << S_WatchLoI)
 | |
| #define S_WatchLoR        1            /* Enable data read watch (R/W) */
 | |
| #define M_WatchLoR        (0x1 << S_WatchLoR)
 | |
| #define S_WatchLoW        0            /* Enable data write watch (R/W) */
 | |
| #define M_WatchLoW        (0x1 << S_WatchLoW)
 | |
| 
 | |
| #define M_WatchLo0Fields    0x00000000
 | |
| #define M_WatchLoRFields    0x00000000
 | |
| #define M_WatchLo0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_WatchLoRFields64    UNS64Const(0x0000000000000000)
 | |
| 
 | |
| #define M_WatchLoEnables    (M_WatchLoI | M_WatchLoR | M_WatchLoW)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               W A T C H H I   R E G I S T E R   ( 1 9 )              *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |M|G|    Rsvd   |      ASID     |  Rsvd |       Mask      |  0  | WatchHi
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_WatchHi        $19
 | |
| #define R_C0_WatchHi        19
 | |
| #define C0_WATCHHI        C0_WatchHi        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_WatchHiM        31            /* Denotes additional Watch registers present (R) */
 | |
| #define M_WatchHiM        (0x1 << S_WatchHiM)
 | |
| #define S_WatchHiG        30            /* Enable ASID-independent Watch match (R/W) */
 | |
| #define M_WatchHiG        (0x1 << S_WatchHiG)
 | |
| #define S_WatchHiASID        16            /* ASID value to match (R/W) */
 | |
| #define M_WatchHiASID        (0xff << S_WatchHiASID)
 | |
| #define S_WatchHiMask        3            /* Address inhibit mask (R/W) */
 | |
| #define M_WatchHiMask        (0x1ff << S_WatchHiMask)
 | |
| 
 | |
| #define M_WatchHi0Fields    0x3f00f007
 | |
| #define M_WatchHiRFields    0x80000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *             X C O N T E X T   R E G I S T E R   ( 2 0 )              *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  // PTEBase  | R |                      BadVPN2<39:13>                 |   0   | XContext
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_XContext        $20
 | |
| #define R_C0_XContext        20
 | |
| #define C0_EXTCTXT        C0_XContext        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_XContextBadVPN2    4            /* BadVPN2 (R) */
 | |
| #define S_XContextBadVPN    S_XContextBadVPN2
 | |
| 
 | |
| #define M_XContext0Fields    0x0000000f
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 D E B U G   R E G I S T E R   ( 2 3 )                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |D|D|N|L|D|H|C|I|M|C|D|I|D|D|     |         |N|S|   |D|D|D|D|D|D|
 | |
|  * |B|M|o|S|o|a|o|B|C|a|B|E|D|D|EJTAG|DExcCode |o|S|   |I|I|D|D|B|S|
 | |
|  * |D| |D|N|z|l|u|u|h|c|u|X|B|B| ver |         |S|t|   |N|B|B|B|p|S|
 | |
|  * | | |C|M|e|t|n|s|e|h|s|I|S|L|     |         |S| | 0 |T| |S|L| | | Debug
 | |
|  * | | |R| | | |t|E|c|e|E| |I|I|     |         |t| |   | | | | | | |
 | |
|  * | | | | | | |D|P|k|E|P| |m|m|     |         | | |   | | | | | | |
 | |
|  * | | | | | | |M| |P|P| | |p|p|     |         | | |   | | | | | | |
 | |
|  * | | | | | | | | | | | | |r|r|     |         | | |   | | | | | | |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_Debug        $23    /* EJTAG */
 | |
| #define R_C0_Debug        23
 | |
| 
 | |
| #define S_DebugDBD        31            /* Debug branch delay (R) */
 | |
| #define M_DebugDBD        (0x1 << S_DebugDBD)
 | |
| #define S_DebugDM        30            /* Debug mode (R) */
 | |
| #define M_DebugDM        (0x1 << S_DebugDM)
 | |
| #define S_DebugNoDCR        29            /* No debug control register present (R) */
 | |
| #define M_DebugNoDCR        (0x1 << S_DebugNoDCR)
 | |
| #define S_DebugLSNM        28            /* Load/Store Normal Memory (R/W) */
 | |
| #define M_DebugLSNM        (0x1 << S_DebugLSNM)
 | |
| #define S_DebugDoze        27            /* Doze (R) */
 | |
| #define M_DebugDoze        (0x1 << S_DebugDoze)
 | |
| #define S_DebugHalt        26            /* Halt (R) */
 | |
| #define M_DebugHalt        (0x1 << S_DebugHalt)
 | |
| #define S_DebugCountDM        25            /* Count register behavior in debug mode (R/W) */
 | |
| #define M_DebugCountDM        (0x1 << S_DebugCountDM)
 | |
| #define S_DebugIBusEP        24            /* Imprecise Instn Bus Error Pending (R/W) */
 | |
| #define M_DebugIBusEP        (0x1 << S_DebugIBusEP)
 | |
| #define S_DebugMCheckP        23            /* Imprecise Machine Check Pending (R/W) */
 | |
| #define M_DebugMCheckP        (0x1 << S_DebugMCheckP)
 | |
| #define S_DebugCacheEP        22            /* Imprecise Cache Error Pending (R/W) */
 | |
| #define M_DebugCacheEP        (0x1 << S_DebugCacheEP)
 | |
| #define S_DebugDBusEP        21            /* Imprecise Data Bus Error Pending (R/W) */
 | |
| #define M_DebugDBusEP        (0x1 << S_DebugDBusEP)
 | |
| #define S_DebugIEXI        20            /* Imprecise Exception Inhibit (R/W) */
 | |
| #define M_DebugIEXI        (0x1 << S_DebugIEXI)
 | |
| #define S_DebugDDBSImpr        19            /* Debug data break store imprecise (R) */
 | |
| #define M_DebugDDBSImpr        (0x1 << S_DebugDDBSImpr)
 | |
| #define S_DebugDDBLImpr        18            /* Debug data break load imprecise (R) */
 | |
| #define M_DebugDDBLImpr        (0x1 << S_DebugDDBLImpr)
 | |
| #define S_DebugEJTAGver        15            /* EJTAG version number (R) */
 | |
| #define M_DebugEJTAGver        (0x7 << S_DebugEJTAGver)
 | |
| #define S_DebugDExcCode        10            /* Debug exception code (R) */
 | |
| #define M_DebugDExcCode        (0x1f << S_DebugDExcCode)
 | |
| #define S_DebugNoSSt        9            /* No single step implemented (R) */
 | |
| #define M_DebugNoSSt        (0x1 << S_DebugNoSSt)
 | |
| #define S_DebugSSt        8            /* Single step enable (R/W) */
 | |
| #define M_DebugSSt        (0x1 << S_DebugSSt)
 | |
| #define S_DebugDINT        5            /* Debug interrupt (R) */
 | |
| #define M_DebugDINT        (0x1 << S_DebugDINT)
 | |
| #define S_DebugDIB        4            /* Debug instruction break (R) */
 | |
| #define M_DebugDIB        (0x1 << S_DebugDIB)
 | |
| #define S_DebugDDBS        3            /* Debug data break store (R) */
 | |
| #define M_DebugDDBS        (0x1 << S_DebugDDBS)
 | |
| #define S_DebugDDBL        2            /* Debug data break load (R) */
 | |
| #define M_DebugDDBL        (0x1 << S_DebugDDBL)
 | |
| #define S_DebugDBp        1            /* Debug breakpoint (R) */
 | |
| #define M_DebugDBp        (0x1 << S_DebugDBp)
 | |
| #define S_DebugDSS        0            /* Debug single step (R) */
 | |
| #define M_DebugDSS        (0x1 << S_DebugDSS)
 | |
| 
 | |
| #define M_Debug0Fields    0x01f000c0
 | |
| #define M_DebugRFields    0xec0ffe3f
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 D E P C   R E G I S T E R   ( 2 4 )                  *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                  EJTAG Debug Exception PC                      | DEPC
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| 
 | |
| #define C0_DEPC            $24
 | |
| #define R_C0_DEPC        24
 | |
| 
 | |
| #define M_DEEPC0Fields        0x00000000
 | |
| #define M_DEEPCRFields        0x00000000
 | |
| #define M_DEEPC0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_DEEPCRFields64    UNS64Const(0x0000000000000000)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *              P E R F C N T   R E G I S T E R   ( 2 5 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * | |                                       |           |I| | | |E|
 | |
|  * |M|                    0                  |   Event   |E|U|S|K|X| PerfCnt
 | |
|  * | |                                       |           | | | | |L|
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  *
 | |
|  *
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                          Event Count                          | PerfCnt
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_PerfCnt        $25
 | |
| #define R_C0_PerfCnt        25
 | |
| #define C0_PRFCNT0        C0_PerfCnt        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| #define C0_PRFCNT1        C0_PerfCnt        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define S_PerfCntM        31            /* More performance counters exist (R) */
 | |
| #define M_PerfCntM        (1 << S_PerfCntM)
 | |
| #define S_PerfCntEvent        5            /* Enabled event (R/W) */
 | |
| #define M_PerfCntEvent        (0x3f << S_PerfCntEvent)
 | |
| #define S_PerfCntIE        4            /* Interrupt Enable (R/W) */
 | |
| #define M_PerfCntIE        (1 << S_PerfCntIE)
 | |
| #define S_PerfCntU        3            /* Enable counting in User Mode (R/W) */
 | |
| #define M_PerfCntU        (1 << S_PerfCntU)
 | |
| #define S_PerfCntS        2            /* Enable counting in Supervisor Mode (R/W) */
 | |
| #define M_PerfCntS        (1 << S_PerfCntS)
 | |
| #define S_PerfCntK        1            /* Enable counting in Kernel Mode (R/W) */
 | |
| #define M_PerfCntK        (1 << S_PerfCntK)
 | |
| #define S_PerfCntEXL        0            /* Enable counting while EXL==1 (R/W) */
 | |
| #define M_PerfCntEXL        (1 << S_PerfCntEXL)
 | |
| 
 | |
| #define M_PerfCnt0Fields    0x7ffff800
 | |
| #define M_PerfCntRFields    0x80000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *               E R R C T L   R E G I S T E R   ( 2 6 )                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                        Error Control                          | ErrCtl
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_ErrCtl        $26
 | |
| #define R_C0_ErrCtl        26
 | |
| #define C0_ECC            $26        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| #define R_C0_ECC        26        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_ErrCtl0Fields        0x00000000
 | |
| #define M_ErrCtlRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *             C A C H E E R R   R E G I S T E R   ( 2 7 )              * CacheErr
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                     Cache Error Control                       | CacheErr
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_CacheErr        $27
 | |
| #define R_C0_CacheErr        27
 | |
| #define C0_CACHE_ERR        C0_CacheErr        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_CacheErr0Fields    0x00000000
 | |
| #define M_CachErrRFields    0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                T A G L O   R E G I S T E R   ( 2 8 )                 * TagLo
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                            TagLo                              | TagLo
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_TagLo        $28
 | |
| #define R_C0_TagLo        28
 | |
| #define C0_TAGLO        C0_TagLo        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| /*
 | |
|  * Some implementations use separate TagLo registers for the
 | |
|  * instruction and data caches.  In those cases, the following
 | |
|  * definitions can be used in relevant code
 | |
|  */
 | |
| 
 | |
| #define C0_ITagLo        $28,0
 | |
| #define C0_DTagLo        $28,2
 | |
| 
 | |
| #define M_TagLo0Fields        0x00000000
 | |
| #define M_TagLoRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *        D A T A L O   R E G I S T E R   ( 2 8, SELECT 1 )             * DataLo
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                           DataLo                              | DataLo
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_DataLo        $28,1
 | |
| #define R_C0_DataLo        28
 | |
| 
 | |
| /*
 | |
|  * Some implementations use separate DataLo registers for the
 | |
|  * instruction and data caches.  In those cases, the following
 | |
|  * definitions can be used in relevant code
 | |
|  */
 | |
| 
 | |
| #define C0_IDataLo        $28,1
 | |
| #define C0_DDataLo        $28,3
 | |
| 
 | |
| #define M_DataLo0Fields        0x00000000
 | |
| #define M_DataLoRFields        0xffffffff
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                T A G H I   R E G I S T E R   ( 2 9 )                 * TagHi
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                            TagHi                              | TagHi
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_TagHi        $29
 | |
| #define R_C0_TagHi        29
 | |
| #define C0_TAGHI        C0_TagHi        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| /*
 | |
|  * Some implementations use separate TagHi registers for the
 | |
|  * instruction and data caches.  In those cases, the following
 | |
|  * definitions can be used in relevant code
 | |
|  */
 | |
| 
 | |
| #define C0_ITagHi        $29,0
 | |
| #define C0_DTagHi        $29,2
 | |
| 
 | |
| #define M_TagHi0Fields        0x00000000
 | |
| #define M_TagHiRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *        D A T A H I   R E G I S T E R   ( 2 9, SELECT 1 )             * DataHi
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                           DataHi                              | DataHi
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_DataHi        $29,1
 | |
| #define R_C0_DataHi        29
 | |
| 
 | |
| /*
 | |
|  * Some implementations use separate DataHi registers for the
 | |
|  * instruction and data caches.  In those cases, the following
 | |
|  * definitions can be used in relevant code
 | |
|  */
 | |
| 
 | |
| #define C0_IDataHi        $29,1
 | |
| #define C0_DDataHi        $29,3
 | |
| 
 | |
| #define M_DataHi0Fields        0x00000000
 | |
| #define M_DataHiRFields        0xffffffff
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *            E R R O R E P C   R E G I S T E R   ( 3 0 )               *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                          Error PC                              | ErrorEPC
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_ErrorEPC        $30
 | |
| #define R_C0_ErrorEPC        30
 | |
| #define C0_ERROR_EPC        C0_ErrorEPC        /* OBSOLETE - DO NOT USE IN NEW CODE */
 | |
| 
 | |
| #define M_ErrorEPC0Fields    0x00000000
 | |
| #define M_ErrorEPCRFields    0x00000000
 | |
| #define M_ErrorEPC0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_ErrorEPCRFields64    UNS64Const(0x0000000000000000)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *            D E S A V E   R E G I S T E R   ( 3 1 )                   *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  3 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |  //                   EJTAG Register Save Value                    | DESAVE
 | |
|  * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C0_DESAVE        $31
 | |
| #define R_C0_DESAVE        31
 | |
| 
 | |
| #define M_DESAVE0Fields        0x00000000
 | |
| #define M_DESAVERFields        0x00000000
 | |
| #define M_DESAVE0Fields64    UNS64Const(0x0000000000000000)
 | |
| #define M_DESAVERFields64    UNS64Const(0x0000000000000000)
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *             C P 1   R E G I S T E R   D E F I N I T I O N S           *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  H A R D W A R E   F P R   N A M E S                  *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #define fp0            $f0
 | |
| #define fp1            $f1
 | |
| #define fp2            $f2
 | |
| #define fp3            $f3
 | |
| #define fp4            $f4
 | |
| #define fp5            $f5
 | |
| #define fp6            $f6
 | |
| #define fp7            $f7
 | |
| #define fp8            $f8
 | |
| #define fp9            $f9
 | |
| #define fp10            $f10
 | |
| #define fp11            $f11
 | |
| #define fp12            $f12
 | |
| #define fp13            $f13
 | |
| #define fp14            $f14
 | |
| #define fp15            $f15
 | |
| #define fp16            $f16
 | |
| #define fp17            $f17
 | |
| #define fp18            $f18
 | |
| #define fp19            $f19
 | |
| #define fp20            $f20
 | |
| #define fp21            $f21
 | |
| #define fp22            $f22
 | |
| #define fp23            $f23
 | |
| #define fp24            $f24
 | |
| #define fp25            $f25
 | |
| #define fp26            $f26
 | |
| #define fp27            $f27
 | |
| #define fp28            $f28
 | |
| #define fp29            $f29
 | |
| #define fp30            $f30
 | |
| #define fp31            $f31
 | |
| 
 | |
| /*
 | |
|  * The following definitions are used to convert an FPR name
 | |
|  * into the corresponding even or odd name, respectively.
 | |
|  * This is used in macro substitution in the AVPs.
 | |
|  */
 | |
| 
 | |
| #define fp1_even        $f0
 | |
| #define fp3_even        $f2
 | |
| #define fp5_even        $f4
 | |
| #define fp7_even        $f6
 | |
| #define fp9_even        $f8
 | |
| #define fp11_even        $f10
 | |
| #define fp13_even        $f12
 | |
| #define fp15_even        $f14
 | |
| #define fp17_even        $f16
 | |
| #define fp19_even        $f18
 | |
| #define fp21_even        $f20
 | |
| #define fp23_even        $f22
 | |
| #define fp25_even        $f24
 | |
| #define fp27_even        $f26
 | |
| #define fp29_even        $f28
 | |
| #define fp31_even        $f30
 | |
| 
 | |
| #define fp0_odd            $f1
 | |
| #define fp2_odd            $f3
 | |
| #define fp4_odd            $f5
 | |
| #define fp6_odd            $f7
 | |
| #define fp8_odd            $f9
 | |
| #define fp10_odd        $f11
 | |
| #define fp12_odd        $f13
 | |
| #define fp14_odd        $f15
 | |
| #define fp16_odd        $f17
 | |
| #define fp18_odd        $f19
 | |
| #define fp20_odd        $f21
 | |
| #define fp22_odd        $f23
 | |
| #define fp24_odd        $f25
 | |
| #define fp26_odd        $f27
 | |
| #define fp28_odd        $f29
 | |
| #define fp30_odd        $f31
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                H A R D W A R E   F P R   I N D I C E S                *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * These definitions provide the index (number) of the FPR, as opposed
 | |
|  * to the assembler register name ($n).
 | |
|  */
 | |
| 
 | |
| #define R_fp0             0
 | |
| #define R_fp1             1
 | |
| #define R_fp2             2
 | |
| #define R_fp3             3
 | |
| #define R_fp4             4
 | |
| #define R_fp5             5
 | |
| #define R_fp6             6
 | |
| #define R_fp7             7
 | |
| #define R_fp8             8
 | |
| #define R_fp9             9
 | |
| #define R_fp10            10
 | |
| #define R_fp11            11
 | |
| #define R_fp12            12
 | |
| #define R_fp13            13
 | |
| #define R_fp14            14
 | |
| #define R_fp15            15
 | |
| #define R_fp16            16
 | |
| #define R_fp17            17
 | |
| #define R_fp18            18
 | |
| #define R_fp19            19
 | |
| #define R_fp20            20
 | |
| #define R_fp21            21
 | |
| #define R_fp22            22
 | |
| #define R_fp23            23
 | |
| #define R_fp24            24
 | |
| #define R_fp25            25
 | |
| #define R_fp26            26
 | |
| #define R_fp27            27
 | |
| #define R_fp28            28
 | |
| #define R_fp29            29
 | |
| #define R_fp30            30
 | |
| #define R_fp31            31
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  H A R D W A R E   F C R   N A M E S                  *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #define fc0            $0
 | |
| #define fc25            $25
 | |
| #define fc26            $26
 | |
| #define fc28            $28
 | |
| #define fc31            $31
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                H A R D W A R E   F C R   I N D I C E S                *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * These definitions provide the index (number) of the FCR, as opposed
 | |
|  * to the assembler register name ($n).
 | |
|  */
 | |
| 
 | |
| #define R_fc0             0
 | |
| #define R_fc25            25
 | |
| #define R_fc26            26
 | |
| #define R_fc28            28
 | |
| #define R_fc31            31
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                  H A R D W A R E   F C C   N A M E S                  *
 | |
|  *************************************************************************
 | |
|  */
 | |
| 
 | |
| #define cc0            $fcc0
 | |
| #define cc1            $fcc1
 | |
| #define cc2            $fcc2
 | |
| #define cc3            $fcc3
 | |
| #define cc4            $fcc4
 | |
| #define cc5            $fcc5
 | |
| #define cc6            $fcc6
 | |
| #define cc7            $fcc7
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *************************************************************************
 | |
|  *                H A R D W A R E   F C C   I N D I C E S                *
 | |
|  *************************************************************************
 | |
|  *
 | |
|  * These definitions provide the index (number) of the CC, as opposed
 | |
|  * to the assembler register name ($n).
 | |
|  */
 | |
| 
 | |
| #define R_cc0            0
 | |
| #define R_cc1            1
 | |
| #define R_cc2            2
 | |
| #define R_cc3            3
 | |
| #define R_cc4            4
 | |
| #define R_cc5            5
 | |
| #define R_cc6            6
 | |
| #define R_cc7            7
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *             I M P L E M E N T A T I O N   R E G I S T E R            *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |Reserved for Additional|3|P|D|S| Implementation|   Revision    | FIR
 | |
|  * |  Configuration Bits   |D|S| | |               |               |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C1_FIR            $0
 | |
| #define R_C1_FIR            0
 | |
| 
 | |
| #define S_FIRConfigS        16
 | |
| #define M_FIRConfigS        (0x1 << S_FIRConfigS)
 | |
| #define S_FIRConfigD        17
 | |
| #define M_FIRConfigD        (0x1 << S_FIRConfigD)
 | |
| #define S_FIRConfigPS        18
 | |
| #define M_FIRConfigPS       (0x1 << S_FIRConfigPS)
 | |
| #define S_FIRConfig3D        19
 | |
| #define M_FIRConfig3D        (0x1 << S_FIRConfig3D)
 | |
| #define M_FIRConfigAll        (M_FIRConfigS|M_FIRConfigD|M_FIRConfigPS|M_FIRConfig3D)
 | |
| 
 | |
| #define S_FIRImp        8
 | |
| #define M_FIRImp        (0xff << S_FIRImp)
 | |
| 
 | |
| #define S_FIRRev        0
 | |
| #define M_FIRRev        (0xff << S_FIRRev)
 | |
| 
 | |
| #define M_FIR0Fields        0xfff00000
 | |
| #define M_FIRRFields        0x000fffff
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *          C O N D I T I O N   C O D E S   R E G I S T E R             *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                      0                        |      CC       | FCCR
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C1_FCCR            $25
 | |
| #define R_C1_FCCR        25
 | |
| 
 | |
| #define S_FCCRCC        0
 | |
| #define M_FCCRCC        (0xff << S_FCCRCC)
 | |
| #define S_FCCRCC7        7
 | |
| #define M_FCCRCC7        (0x1 << S_FCCRCC7)
 | |
| #define S_FCCRCC6        6
 | |
| #define M_FCCRCC6        (0x1 << S_FCCRCC6)
 | |
| #define S_FCCRCC5        5
 | |
| #define M_FCCRCC5        (0x1 << S_FCCRCC5)
 | |
| #define S_FCCRCC4        4
 | |
| #define M_FCCRCC4        (0x1 << S_FCCRCC4)
 | |
| #define S_FCCRCC3        3
 | |
| #define M_FCCRCC3        (0x1 << S_FCCRCC3)
 | |
| #define S_FCCRCC2        2
 | |
| #define M_FCCRCC2        (0x1 << S_FCCRCC2)
 | |
| #define S_FCCRCC1        1
 | |
| #define M_FCCRCC1        (0x1 << S_FCCRCC1)
 | |
| #define S_FCCRCC0        0
 | |
| #define M_FCCRCC0        (0x1 << S_FCCRCC0)
 | |
| 
 | |
| #define M_FCCR0Fields        0xffffff00
 | |
| #define M_FCCRRFields        0x000000ff
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                 E X C E P T I O N S   R E G I S T E R                *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |             0             |   Cause   |    0    |  Flags  | 0 | FEXR
 | |
|  * |                           |E|V|Z|O|U|I|         |V|Z|O|U|I|   |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C1_FEXR            $26
 | |
| #define R_C1_FEXR        26
 | |
| 
 | |
| #define S_FEXRExc        12
 | |
| #define M_FEXRExc        (0x3f << S_FEXRExc)
 | |
| #define S_FEXRExcE        17
 | |
| #define M_FEXRExcE        (0x1 << S_FEXRExcE)
 | |
| #define S_FEXRExcV        16
 | |
| #define M_FEXRExcV        (0x1 << S_FEXRExcV)
 | |
| #define S_FEXRExcZ        15
 | |
| #define M_FEXRExcZ        (0x1 << S_FEXRExcZ)
 | |
| #define S_FEXRExcO        14
 | |
| #define M_FEXRExcO        (0x1 << S_FEXRExcO)
 | |
| #define S_FEXRExcU        13
 | |
| #define M_FEXRExcU        (0x1 << S_FEXRExcU)
 | |
| #define S_FEXRExcI        12
 | |
| #define M_FEXRExcI        (0x1 << S_FEXRExcI)
 | |
| 
 | |
| #define S_FEXRFlg        2
 | |
| #define M_FEXRFlg        (0x1f << S_FEXRFlg)
 | |
| #define S_FEXRFlgV        6
 | |
| #define M_FEXRFlgV        (0x1 << S_FEXRFlgV)
 | |
| #define S_FEXRFlgZ        5
 | |
| #define M_FEXRFlgZ        (0x1 << S_FEXRFlgZ)
 | |
| #define S_FEXRFlgO        4
 | |
| #define M_FEXRFlgO        (0x1 << S_FEXRFlgO)
 | |
| #define S_FEXRFlgU        3
 | |
| #define M_FEXRFlgU        (0x1 << S_FEXRFlgU)
 | |
| #define S_FEXRFlgI        2
 | |
| #define M_FEXRFlgI        (0x1 << S_FEXRFlgI)
 | |
| 
 | |
| #define M_FEXR0Fields        0xfffc0f83
 | |
| #define M_FEXRRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *                    E N A B L E S   R E G I S T E R                   *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |                   0                   | Enables |   0   |F|RM | FENR
 | |
|  * |                                       |V|Z|O|U|I|       |S|   |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C1_FENR            $28
 | |
| #define R_C1_FENR        28
 | |
| 
 | |
| #define S_FENREna        7
 | |
| #define M_FENREna        (0x1f << S_FENREna)
 | |
| #define S_FENREnaV        11
 | |
| #define M_FENREnaV        (0x1 << S_FENREnaV)
 | |
| #define S_FENREnaZ        10
 | |
| #define M_FENREnaZ        (0x1 << S_FENREnaZ)
 | |
| #define S_FENREnaO        9
 | |
| #define M_FENREnaO        (0x1 << S_FENREnaO)
 | |
| #define S_FENREnaU        8
 | |
| #define M_FENREnaU        (0x1 << S_FENREnaU)
 | |
| #define S_FENREnaI        7
 | |
| #define M_FENREnaI        (0x1 << S_FENREnaI)
 | |
| 
 | |
| #define S_FENRFS        2
 | |
| #define M_FENRFS        (0x1 << S_FENRFS)
 | |
| 
 | |
| #define S_FENRRM        0
 | |
| #define M_FENRRM        (0x3 << S_FENRRM)
 | |
| 
 | |
| #define M_FENR0Fields        0xfffff078
 | |
| #define M_FENRRFields        0x00000000
 | |
| 
 | |
| 
 | |
| /*
 | |
|  ************************************************************************
 | |
|  *           C O N T R O L  /  S T A T U S   R E G I S T E R            *
 | |
|  ************************************************************************
 | |
|  *     
 | |
|  *  3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 | |
|  *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  * |     FCC     |F|C|Imp|  0  |   Cause   | Enables |  Flags  | RM| FCSR
 | |
|  * |7|6|5|4|3|2|1|S|C|   |     |E|V|Z|O|U|I|V|Z|O|U|I|V|Z|O|U|I|   |
 | |
|  * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | |
|  */
 | |
| 
 | |
| #define C1_FCSR            $31
 | |
| #define R_C1_FCSR        31
 | |
| 
 | |
| #define S_FCSRFCC7_1        25            /* Floating point condition codes 7..1 (R/W) */
 | |
| #define M_FCSRFCC7_1        (0x7f << S_FCSRFCC7_1)
 | |
| #define S_FCSRCC7        31
 | |
| #define M_FCSRCC7        (0x1 << S_FCSRCC7)
 | |
| #define S_FCSRCC6        30
 | |
| #define M_FCSRCC6        (0x1 << S_FCSRCC6)
 | |
| #define S_FCSRCC5        29
 | |
| #define M_FCSRCC5        (0x1 << S_FCSRCC5)
 | |
| #define S_FCSRCC4        28
 | |
| #define M_FCSRCC4        (0x1 << S_FCSRCC4)
 | |
| #define S_FCSRCC3        27
 | |
| #define M_FCSRCC3        (0x1 << S_FCSRCC3)
 | |
| #define S_FCSRCC2        26
 | |
| #define M_FCSRCC2        (0x1 << S_FCSRCC2)
 | |
| #define S_FCSRCC1        25
 | |
| #define M_FCSRCC1        (0x1 << S_FCSRCC1)
 | |
| 
 | |
| #define S_FCSRFS        24            /* Flush denorms to zero (R/W) */
 | |
| #define M_FCSRFS        (0x1 << S_FCSRFS)
 | |
| 
 | |
| #define S_FCSRCC0        23            /* Floating point condition code 0 (R/W) */
 | |
| #define M_FCSRCC0        (0x1 << S_FCSRCC0)
 | |
| #define S_FCSRCC        S_FCSRCC0
 | |
| #define M_FCSRCC        M_FCSRCC0
 | |
| 
 | |
| #define S_FCSRImpl        21            /* Implementation-specific control bits (R/W) */
 | |
| #define M_FCSRImpl        (0x3 << S_FCSRImpl)
 | |
| 
 | |
| #define S_FCSRExc        12            /* Exception cause (R/W) */
 | |
| #define M_FCSRExc        (0x3f << S_FCSRExc)
 | |
| #define S_FCSRExcE        17
 | |
| #define M_FCSRExcE        (0x1 << S_FCSRExcE)
 | |
| #define S_FCSRExcV        16
 | |
| #define M_FCSRExcV        (0x1 << S_FCSRExcV)
 | |
| #define S_FCSRExcZ        15
 | |
| #define M_FCSRExcZ        (0x1 << S_FCSRExcZ)
 | |
| #define S_FCSRExcO        14
 | |
| #define M_FCSRExcO        (0x1 << S_FCSRExcO)
 | |
| #define S_FCSRExcU        13
 | |
| #define M_FCSRExcU        (0x1 << S_FCSRExcU)
 | |
| #define S_FCSRExcI        12
 | |
| #define M_FCSRExcI        (0x1 << S_FCSRExcI)
 | |
| 
 | |
| #define S_FCSREna        7            /* Exception enable (R/W) */
 | |
| #define M_FCSREna        (0x1f << S_FCSREna)
 | |
| #define S_FCSREnaV        11
 | |
| #define M_FCSREnaV        (0x1 << S_FCSREnaV)
 | |
| #define S_FCSREnaZ        10
 | |
| #define M_FCSREnaZ        (0x1 << S_FCSREnaZ)
 | |
| #define S_FCSREnaO        9
 | |
| #define M_FCSREnaO        (0x1 << S_FCSREnaO)
 | |
| #define S_FCSREnaU        8
 | |
| #define M_FCSREnaU        (0x1 << S_FCSREnaU)
 | |
| #define S_FCSREnaI        7
 | |
| #define M_FCSREnaI        (0x1 << S_FCSREnaI)
 | |
| 
 | |
| #define S_FCSRFlg        2            /* Exception flags (R/W) */
 | |
| #define M_FCSRFlg        (0x1f << S_FCSRFlg)
 | |
| #define S_FCSRFlgV        6
 | |
| #define M_FCSRFlgV        (0x1 << S_FCSRFlgV)
 | |
| #define S_FCSRFlgZ        5
 | |
| #define M_FCSRFlgZ        (0x1 << S_FCSRFlgZ)
 | |
| #define S_FCSRFlgO        4
 | |
| #define M_FCSRFlgO        (0x1 << S_FCSRFlgO)
 | |
| #define S_FCSRFlgU        3
 | |
| #define M_FCSRFlgU        (0x1 << S_FCSRFlgU)
 | |
| #define S_FCSRFlgI        2
 | |
| #define M_FCSRFlgI        (0x1 << S_FCSRFlgI)
 | |
| 
 | |
| #define S_FCSRRM        0            /* Rounding mode (R/W) */
 | |
| #define M_FCSRRM        (0x3 << S_FCSRRM)
 | |
| 
 | |
| #define M_FCSR0Fields        0x001c0000
 | |
| #define M_FCSRRFields        0x00000000
 | |
| 
 | |
| /*
 | |
|  * Values in the rounding mode field (of both FCSR and FCCR)
 | |
|  */
 | |
| #define K_FCSRRM_RN        0
 | |
| #define K_FCSRRM_RZ        1
 | |
| #define K_FCSRRM_RP        2
 | |
| #define K_FCSRRM_RM        3
 | |
| 
 | |
| 
 | |
| /* ********************************************************************* */
 | |
| /* Interface function definition */
 | |
| 
 | |
| 
 | |
| /* ********************************************************************* */
 | |
| 
 | |
| #endif /* __ARCHDEFS_H__ */
 |