1*10465441SEvalZero /* 2*10465441SEvalZero * File : mips_def.h 3*10465441SEvalZero * This file is part of RT-Thread RTOS 4*10465441SEvalZero * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team 5*10465441SEvalZero * 6*10465441SEvalZero * This program is free software; you can redistribute it and/or modify 7*10465441SEvalZero * it under the terms of the GNU General Public License as published by 8*10465441SEvalZero * the Free Software Foundation; either version 2 of the License, or 9*10465441SEvalZero * (at your option) any later version. 10*10465441SEvalZero * 11*10465441SEvalZero * This program is distributed in the hope that it will be useful, 12*10465441SEvalZero * but WITHOUT ANY WARRANTY; without even the implied warranty of 13*10465441SEvalZero * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*10465441SEvalZero * GNU General Public License for more details. 15*10465441SEvalZero * 16*10465441SEvalZero * You should have received a copy of the GNU General Public License along 17*10465441SEvalZero * with this program; if not, write to the Free Software Foundation, Inc., 18*10465441SEvalZero * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19*10465441SEvalZero * 20*10465441SEvalZero * Change Logs: 21*10465441SEvalZero * Date Author Notes 22*10465441SEvalZero * 2016��9��7�� Urey the first version 23*10465441SEvalZero */ 24*10465441SEvalZero 25*10465441SEvalZero #ifndef _COMMON_MIPS_DEF_H_ 26*10465441SEvalZero #define _COMMON_MIPS_DEF_H_ 27*10465441SEvalZero 28*10465441SEvalZero 29*10465441SEvalZero /* 30*10465441SEvalZero ************************************************************************ 31*10465441SEvalZero * I N S T R U C T I O N F O R M A T S * 32*10465441SEvalZero ************************************************************************ 33*10465441SEvalZero * 34*10465441SEvalZero * The following definitions describe each field in an instruction. There 35*10465441SEvalZero * is one diagram for each type of instruction, with field definitions 36*10465441SEvalZero * following the diagram for that instruction. Note that if a field of 37*10465441SEvalZero * the same name and position is defined in an earlier diagram, it is 38*10465441SEvalZero * not defined again in the subsequent diagram. Only new fields are 39*10465441SEvalZero * defined for each diagram. 40*10465441SEvalZero * 41*10465441SEvalZero * R-Type (operate) 42*10465441SEvalZero * 43*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 44*10465441SEvalZero * 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 45*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 46*10465441SEvalZero * | | rs | rt | rd | sa | | 47*10465441SEvalZero * | Opcode | | | Tcode | func | 48*10465441SEvalZero * | | Bcode | | sel | 49*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 50*10465441SEvalZero */ 51*10465441SEvalZero 52*10465441SEvalZero #define S_InstnOpcode 26 53*10465441SEvalZero #define M_InstnOpcode (0x3f << S_InstnOpcode) 54*10465441SEvalZero #define S_InstnRS 21 55*10465441SEvalZero #define M_InstnRS (0x1f << S_InstnRS) 56*10465441SEvalZero #define S_InstnRT 16 57*10465441SEvalZero #define M_InstnRT (0x1f << S_InstnRT) 58*10465441SEvalZero #define S_InstnRD 11 59*10465441SEvalZero #define M_InstnRD (0x1f << S_InstnRD) 60*10465441SEvalZero #define S_InstnSA 6 61*10465441SEvalZero #define M_InstnSA (0x1f << S_InstnSA) 62*10465441SEvalZero #define S_InstnTcode 6 63*10465441SEvalZero #define M_InstnTcode (0x3ff << S_InstnTcode) 64*10465441SEvalZero #define S_InstnBcode 6 65*10465441SEvalZero #define M_InstnBcode (0xfffff << S_InstnBcode) 66*10465441SEvalZero #define S_InstnFunc 0 67*10465441SEvalZero #define M_InstnFunc (0x3f << S_InstnFunc) 68*10465441SEvalZero #define S_InstnSel 0 69*10465441SEvalZero #define M_InstnSel (0x7 << S_InstnSel) 70*10465441SEvalZero 71*10465441SEvalZero /* 72*10465441SEvalZero * I-Type (load, store, branch, immediate) 73*10465441SEvalZero * 74*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 75*10465441SEvalZero * 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 76*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 77*10465441SEvalZero * | Opcode | rs | rt | Offset | 78*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 79*10465441SEvalZero */ 80*10465441SEvalZero 81*10465441SEvalZero #define S_InstnOffset 0 82*10465441SEvalZero #define M_InstnOffset (0xffff << S_InstnOffset) 83*10465441SEvalZero 84*10465441SEvalZero /* 85*10465441SEvalZero * I-Type (pref) 86*10465441SEvalZero * 87*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 88*10465441SEvalZero * 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 89*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 90*10465441SEvalZero * | Opcode | rs | hint | Offset | 91*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 92*10465441SEvalZero */ 93*10465441SEvalZero 94*10465441SEvalZero #define S_InstnHint S_InstnRT 95*10465441SEvalZero #define M_InstnHint M_InstnRT 96*10465441SEvalZero 97*10465441SEvalZero /* 98*10465441SEvalZero * J-Type (jump) 99*10465441SEvalZero * 100*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 101*10465441SEvalZero * 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 102*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 103*10465441SEvalZero * | Opcode | JIndex | 104*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 105*10465441SEvalZero */ 106*10465441SEvalZero 107*10465441SEvalZero #define S_InstnJIndex 0 108*10465441SEvalZero #define M_InstnJIndex (0x03ffffff << S_InstnJIndex) 109*10465441SEvalZero 110*10465441SEvalZero /* 111*10465441SEvalZero * FP R-Type (operate) 112*10465441SEvalZero * 113*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 114*10465441SEvalZero * 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 115*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 116*10465441SEvalZero * | Opcode | fmt | ft | fs | fd | func | 117*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 118*10465441SEvalZero */ 119*10465441SEvalZero 120*10465441SEvalZero #define S_InstnFmt S_InstnRS 121*10465441SEvalZero #define M_InstnFmt M_InstnRS 122*10465441SEvalZero #define S_InstnFT S_InstnRT 123*10465441SEvalZero #define M_InstnFT M_InstnRT 124*10465441SEvalZero #define S_InstnFS S_InstnRD 125*10465441SEvalZero #define M_InstnFS M_InstnRD 126*10465441SEvalZero #define S_InstnFD S_InstnSA 127*10465441SEvalZero #define M_InstnFD M_InstnSA 128*10465441SEvalZero 129*10465441SEvalZero /* 130*10465441SEvalZero * FP R-Type (cpu <-> cpu data movement)) 131*10465441SEvalZero * 132*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 133*10465441SEvalZero * 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 134*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 135*10465441SEvalZero * | Opcode | sub | rt | fs | 0 | 136*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 137*10465441SEvalZero */ 138*10465441SEvalZero 139*10465441SEvalZero #define S_InstnSub S_InstnRS 140*10465441SEvalZero #define M_InstnSub M_InstnRS 141*10465441SEvalZero 142*10465441SEvalZero /* 143*10465441SEvalZero * FP R-Type (compare) 144*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 145*10465441SEvalZero * 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 146*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 147*10465441SEvalZero * | | | | | | |C| | 148*10465441SEvalZero * | Opcode | fmt | ft | fs | cc |0|A| func | 149*10465441SEvalZero * | | | | | | |B| | 150*10465441SEvalZero * | | | | | | |S| | 151*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 152*10465441SEvalZero */ 153*10465441SEvalZero 154*10465441SEvalZero #define S_InstnCCcmp 8 155*10465441SEvalZero #define M_InstnCCcmp (0x7 << S_InstnCCcmp) 156*10465441SEvalZero #define S_InstnCABS 6 157*10465441SEvalZero #define M_InstnCABS (0x1 << S_InstnCABS) 158*10465441SEvalZero 159*10465441SEvalZero /* 160*10465441SEvalZero * FP R-Type (FPR conditional move on FP cc) 161*10465441SEvalZero * 162*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 163*10465441SEvalZero * 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 164*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 165*10465441SEvalZero * | Opcode | fmt | cc |n|t| fs | fd | func | 166*10465441SEvalZero * | | | |d|f| | | | 167*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 168*10465441SEvalZero */ 169*10465441SEvalZero 170*10465441SEvalZero #define S_InstnCC 18 171*10465441SEvalZero #define M_InstnCC (0x7 << S_InstnCC) 172*10465441SEvalZero #define S_InstnND 17 173*10465441SEvalZero #define M_InstnND (0x1 << S_InstnND) 174*10465441SEvalZero #define S_InstnTF 16 175*10465441SEvalZero #define M_InstnTF (0x1 << S_InstnTF) 176*10465441SEvalZero 177*10465441SEvalZero /* 178*10465441SEvalZero * FP R-Type (3-operand operate) 179*10465441SEvalZero * 180*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 181*10465441SEvalZero * 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 182*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 183*10465441SEvalZero * | Opcode | fr | ft | fs | fd | op4 | fmt3| 184*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 185*10465441SEvalZero */ 186*10465441SEvalZero 187*10465441SEvalZero #define S_InstnFR S_InstnRS 188*10465441SEvalZero #define M_InstnFR M_InstnRS 189*10465441SEvalZero #define S_InstnOp4 3 190*10465441SEvalZero #define M_InstnOp4 (0x7 << S_InstnOp4) 191*10465441SEvalZero #define S_InstnFmt3 0 192*10465441SEvalZero #define M_InstnFmt3 (0x7 << S_InstnFmt3) 193*10465441SEvalZero 194*10465441SEvalZero /* 195*10465441SEvalZero * FP R-Type (Indexed load, store) 196*10465441SEvalZero * 197*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 198*10465441SEvalZero * 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 199*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 200*10465441SEvalZero * | Opcode | rs | rt | 0 | fd | func | 201*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 202*10465441SEvalZero */ 203*10465441SEvalZero /* 204*10465441SEvalZero * FP R-Type (prefx) 205*10465441SEvalZero * 206*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 207*10465441SEvalZero * 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 208*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 209*10465441SEvalZero * | Opcode | rs | rt | hint | 0 | func | 210*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 211*10465441SEvalZero */ 212*10465441SEvalZero 213*10465441SEvalZero #define S_InstnHintX S_InstnRD 214*10465441SEvalZero #define M_InstnHintX M_InstnRD 215*10465441SEvalZero 216*10465441SEvalZero /* 217*10465441SEvalZero * FP R-Type (GPR conditional move on FP cc) 218*10465441SEvalZero * 219*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 220*10465441SEvalZero * 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 221*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 222*10465441SEvalZero * | Opcode | rs | cc |n|t| rd | 0 | func | 223*10465441SEvalZero * | | | |d|f| | | | 224*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 225*10465441SEvalZero */ 226*10465441SEvalZero 227*10465441SEvalZero /* 228*10465441SEvalZero * FP I-Type (load, store) 229*10465441SEvalZero * 230*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 231*10465441SEvalZero * 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 232*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 233*10465441SEvalZero * | Opcode | rs | ft | Offset | 234*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 235*10465441SEvalZero */ 236*10465441SEvalZero 237*10465441SEvalZero /* 238*10465441SEvalZero * FP I-Type (branch) 239*10465441SEvalZero * 240*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 241*10465441SEvalZero * 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 242*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 243*10465441SEvalZero * | Opcode | fmt | cc |n|t| Offset | 244*10465441SEvalZero * | | | |d|f| | 245*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 246*10465441SEvalZero */ 247*10465441SEvalZero 248*10465441SEvalZero 249*10465441SEvalZero /* 250*10465441SEvalZero ************************************************************************* 251*10465441SEvalZero * 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 * 252*10465441SEvalZero ************************************************************************* 253*10465441SEvalZero */ 254*10465441SEvalZero 255*10465441SEvalZero #ifdef MIPSADDR64 256*10465441SEvalZero #define A_K0BASE UNS64Const(0xffffffff80000000) 257*10465441SEvalZero #define A_K1BASE UNS64Const(0xffffffffa0000000) 258*10465441SEvalZero #define A_K2BASE UNS64Const(0xffffffffc0000000) 259*10465441SEvalZero #define A_K3BASE UNS64Const(0xffffffffe0000000) 260*10465441SEvalZero #define A_REGION UNS64Const(0xc000000000000000) 261*10465441SEvalZero #define A_XKPHYS_ATTR UNS64Const(0x3800000000000000) 262*10465441SEvalZero #else 263*10465441SEvalZero #define A_K0BASE 0x80000000 264*10465441SEvalZero #define A_K1BASE 0xa0000000 265*10465441SEvalZero #define A_K2BASE 0xc0000000 266*10465441SEvalZero #define A_K3BASE 0xe0000000 267*10465441SEvalZero #endif 268*10465441SEvalZero #define M_KMAPPED 0x40000000 /* KnSEG address is mapped if bit is one */ 269*10465441SEvalZero 270*10465441SEvalZero 271*10465441SEvalZero #ifdef MIPS_Model64 272*10465441SEvalZero 273*10465441SEvalZero #define S_VMAP64 62 274*10465441SEvalZero #define M_VMAP64 UNS64Const(0xc000000000000000) 275*10465441SEvalZero 276*10465441SEvalZero #define K_VMode11 3 277*10465441SEvalZero #define K_VMode10 2 278*10465441SEvalZero #define K_VMode01 1 279*10465441SEvalZero #define K_VMode00 0 280*10465441SEvalZero 281*10465441SEvalZero #define S_KSEG3 29 282*10465441SEvalZero #define M_KSEG3 (0x7 << S_KSEG3) 283*10465441SEvalZero #define K_KSEG3 7 284*10465441SEvalZero 285*10465441SEvalZero #define S_SSEG 29 286*10465441SEvalZero #define M_SSEG (0x7 << S_KSEG3) 287*10465441SEvalZero #define K_SSEG 6 288*10465441SEvalZero 289*10465441SEvalZero #define S_KSSEG 29 290*10465441SEvalZero #define M_KSSEG (0x7 << S_KSEG3) 291*10465441SEvalZero #define K_KSSEG 6 292*10465441SEvalZero 293*10465441SEvalZero #define S_KSEG1 29 294*10465441SEvalZero #define M_KSEG1 (0x7 << S_KSEG3) 295*10465441SEvalZero #define K_KSEG1 5 296*10465441SEvalZero 297*10465441SEvalZero #define S_KSEG0 29 298*10465441SEvalZero #define M_KSEG0 (0x7 << S_KSEG3) 299*10465441SEvalZero #define K_KSEG0 4 300*10465441SEvalZero 301*10465441SEvalZero #define S_XKSEG 29 302*10465441SEvalZero #define M_XKSEG (0x7 << S_KSEG3) 303*10465441SEvalZero #define K_XKSEG 3 304*10465441SEvalZero 305*10465441SEvalZero #define S_USEG 31 306*10465441SEvalZero #define M_USEG (0x1 << S_USEG) 307*10465441SEvalZero #define K_USEG 0 308*10465441SEvalZero 309*10465441SEvalZero #define S_EjtagProbeMem 20 310*10465441SEvalZero #define M_EjtagProbeMem (0x1 << S_EjtagProbeMem) 311*10465441SEvalZero #define K_EjtagProbeMem 0 312*10465441SEvalZero 313*10465441SEvalZero 314*10465441SEvalZero 315*10465441SEvalZero #else 316*10465441SEvalZero 317*10465441SEvalZero #define S_KSEG3 29 318*10465441SEvalZero #define M_KSEG3 (0x7 << S_KSEG3) 319*10465441SEvalZero #define K_KSEG3 7 320*10465441SEvalZero 321*10465441SEvalZero #define S_KSSEG 29 322*10465441SEvalZero #define M_KSSEG (0x7 << S_KSSEG) 323*10465441SEvalZero #define K_KSSEG 6 324*10465441SEvalZero 325*10465441SEvalZero #define S_SSEG 29 326*10465441SEvalZero #define M_SSEG (0x7 << S_SSEG) 327*10465441SEvalZero #define K_SSEG 6 328*10465441SEvalZero 329*10465441SEvalZero #define S_KSEG1 29 330*10465441SEvalZero #define M_KSEG1 (0x7 << S_KSEG1) 331*10465441SEvalZero #define K_KSEG1 5 332*10465441SEvalZero 333*10465441SEvalZero #define S_KSEG0 29 334*10465441SEvalZero #define M_KSEG0 (0x7 << S_KSEG0) 335*10465441SEvalZero #define K_KSEG0 4 336*10465441SEvalZero 337*10465441SEvalZero #define S_KUSEG 31 338*10465441SEvalZero #define M_KUSEG (0x1 << S_KUSEG) 339*10465441SEvalZero #define K_KUSEG 0 340*10465441SEvalZero 341*10465441SEvalZero #define S_SUSEG 31 342*10465441SEvalZero #define M_SUSEG (0x1 << S_SUSEG) 343*10465441SEvalZero #define K_SUSEG 0 344*10465441SEvalZero 345*10465441SEvalZero #define S_USEG 31 346*10465441SEvalZero #define M_USEG (0x1 << S_USEG) 347*10465441SEvalZero #define K_USEG 0 348*10465441SEvalZero 349*10465441SEvalZero #define K_EjtagLower 0xff200000 350*10465441SEvalZero #define K_EjtagUpper 0xff3fffff 351*10465441SEvalZero 352*10465441SEvalZero #define S_EjtagProbeMem 20 353*10465441SEvalZero #define M_EjtagProbeMem (0x1 << S_EjtagProbeMem) 354*10465441SEvalZero #define K_EjtagProbeMem 0 355*10465441SEvalZero 356*10465441SEvalZero #endif 357*10465441SEvalZero 358*10465441SEvalZero 359*10465441SEvalZero 360*10465441SEvalZero /* 361*10465441SEvalZero ************************************************************************* 362*10465441SEvalZero * 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 * 363*10465441SEvalZero ************************************************************************* 364*10465441SEvalZero */ 365*10465441SEvalZero 366*10465441SEvalZero /* 367*10465441SEvalZero * Cache encodings 368*10465441SEvalZero */ 369*10465441SEvalZero #define K_CachePriI 0 /* Primary Icache */ 370*10465441SEvalZero #define K_CachePriD 1 /* Primary Dcache */ 371*10465441SEvalZero #define K_CachePriU 1 /* Unified primary */ 372*10465441SEvalZero #define K_CacheTerU 2 /* Unified Tertiary */ 373*10465441SEvalZero #define K_CacheSecU 3 /* Unified secondary */ 374*10465441SEvalZero 375*10465441SEvalZero 376*10465441SEvalZero /* 377*10465441SEvalZero * Function encodings 378*10465441SEvalZero */ 379*10465441SEvalZero #define S_CacheFunc 2 /* Amount to shift function encoding within 5-bit field */ 380*10465441SEvalZero #define K_CacheIndexInv 0 /* Index invalidate */ 381*10465441SEvalZero #define K_CacheIndexWBInv 0 /* Index writeback invalidate */ 382*10465441SEvalZero #define K_CacheIndexLdTag 1 /* Index load tag */ 383*10465441SEvalZero #define K_CacheIndexStTag 2 /* Index store tag */ 384*10465441SEvalZero #define K_CacheHitInv 4 /* Hit Invalidate */ 385*10465441SEvalZero #define K_CacheFill 5 /* Fill (Icache only) */ 386*10465441SEvalZero #define K_CacheHitWBInv 5 /* Hit writeback invalidate */ 387*10465441SEvalZero #define K_CacheHitWB 6 /* Hit writeback */ 388*10465441SEvalZero #define K_CacheFetchLock 7 /* Fetch and lock */ 389*10465441SEvalZero 390*10465441SEvalZero #define ICIndexInv ((K_CacheIndexInv << S_CacheFunc) | K_CachePriI) 391*10465441SEvalZero #define DCIndexWBInv ((K_CacheIndexWBInv << S_CacheFunc) | K_CachePriD) 392*10465441SEvalZero #define DCIndexInv DCIndexWBInv 393*10465441SEvalZero #define ICIndexLdTag ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriI) 394*10465441SEvalZero #define DCIndexLdTag ((K_CacheIndexLdTag << S_CacheFunc) | K_CachePriD) 395*10465441SEvalZero #define ICIndexStTag ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriI) 396*10465441SEvalZero #define DCIndexStTag ((K_CacheIndexStTag << S_CacheFunc) | K_CachePriD) 397*10465441SEvalZero #define ICHitInv ((K_CacheHitInv << S_CacheFunc) | K_CachePriI) 398*10465441SEvalZero #define DCHitInv ((K_CacheHitInv << S_CacheFunc) | K_CachePriD) 399*10465441SEvalZero #define ICFill ((K_CacheFill << S_CacheFunc) | K_CachePriI) 400*10465441SEvalZero #define DCHitWBInv ((K_CacheHitWBInv << S_CacheFunc) | K_CachePriD) 401*10465441SEvalZero #define DCHitWB ((K_CacheHitWB << S_CacheFunc) | K_CachePriD) 402*10465441SEvalZero #define ICFetchLock ((K_CacheFetchLock << S_CacheFunc) | K_CachePriI) 403*10465441SEvalZero #define DCFetchLock ((K_CacheFetchLock << S_CacheFunc) | K_CachePriD) 404*10465441SEvalZero 405*10465441SEvalZero 406*10465441SEvalZero /* 407*10465441SEvalZero ************************************************************************* 408*10465441SEvalZero * P R E F E T C H I N S T R U C T I O N H I N T S * 409*10465441SEvalZero ************************************************************************* 410*10465441SEvalZero */ 411*10465441SEvalZero 412*10465441SEvalZero #define PrefLoad 0 413*10465441SEvalZero #define PrefStore 1 414*10465441SEvalZero #define PrefLoadStreamed 4 415*10465441SEvalZero #define PrefStoreStreamed 5 416*10465441SEvalZero #define PrefLoadRetained 6 417*10465441SEvalZero #define PrefStoreRetained 7 418*10465441SEvalZero #define PrefWBInval 25 419*10465441SEvalZero #define PrefNudge 25 420*10465441SEvalZero 421*10465441SEvalZero 422*10465441SEvalZero /* 423*10465441SEvalZero ************************************************************************* 424*10465441SEvalZero * C P U R E G I S T E R D E F I N I T I O N S * 425*10465441SEvalZero ************************************************************************* 426*10465441SEvalZero */ 427*10465441SEvalZero 428*10465441SEvalZero 429*10465441SEvalZero /* 430*10465441SEvalZero ************************************************************************* 431*10465441SEvalZero * S O F T W A R E G P R N A M E S * 432*10465441SEvalZero ************************************************************************* 433*10465441SEvalZero */ 434*10465441SEvalZero #ifdef __ASSEMBLY__ 435*10465441SEvalZero #define zero $0 436*10465441SEvalZero #define AT $1 437*10465441SEvalZero #define v0 $2 438*10465441SEvalZero #define v1 $3 439*10465441SEvalZero #define a0 $4 440*10465441SEvalZero #define a1 $5 441*10465441SEvalZero #define a2 $6 442*10465441SEvalZero #define a3 $7 443*10465441SEvalZero #define t0 $8 444*10465441SEvalZero #define t1 $9 445*10465441SEvalZero #define t2 $10 446*10465441SEvalZero #define t3 $11 447*10465441SEvalZero #define t4 $12 448*10465441SEvalZero #define t5 $13 449*10465441SEvalZero #define t6 $14 450*10465441SEvalZero #define t7 $15 451*10465441SEvalZero #define s0 $16 452*10465441SEvalZero #define s1 $17 453*10465441SEvalZero #define s2 $18 454*10465441SEvalZero #define s3 $19 455*10465441SEvalZero #define s4 $20 456*10465441SEvalZero #define s5 $21 457*10465441SEvalZero #define s6 $22 458*10465441SEvalZero #define s7 $23 459*10465441SEvalZero #define t8 $24 460*10465441SEvalZero #define t9 $25 461*10465441SEvalZero #define k0 $26 462*10465441SEvalZero #define k1 $27 463*10465441SEvalZero #define gp $28 464*10465441SEvalZero #define sp $29 465*10465441SEvalZero #define fp $30 466*10465441SEvalZero #define ra $31 467*10465441SEvalZero 468*10465441SEvalZero /* 469*10465441SEvalZero * The following registers are used by the AVP environment and 470*10465441SEvalZero * are not part of the normal software definitions. 471*10465441SEvalZero */ 472*10465441SEvalZero 473*10465441SEvalZero #ifdef MIPSAVPENV 474*10465441SEvalZero #define repc $25 /* Expected exception PC */ 475*10465441SEvalZero #define tid $30 /* Current test case address */ 476*10465441SEvalZero #endif 477*10465441SEvalZero 478*10465441SEvalZero 479*10465441SEvalZero /* 480*10465441SEvalZero ************************************************************************* 481*10465441SEvalZero * H A R D W A R E G P R N A M E S * 482*10465441SEvalZero ************************************************************************* 483*10465441SEvalZero * 484*10465441SEvalZero * In the AVP environment, several of the `r' names are removed from the 485*10465441SEvalZero * name space because they are used by the kernel for special purposes. 486*10465441SEvalZero * Removing them causes assembly rather than runtime errors for tests that 487*10465441SEvalZero * use the `r' names. 488*10465441SEvalZero * 489*10465441SEvalZero * - r25 (repc) is used as the expected PC on an exception 490*10465441SEvalZero * - r26-r27 (k0, k1) are used in the exception handler 491*10465441SEvalZero * - r30 (tid) is used as the current test address 492*10465441SEvalZero */ 493*10465441SEvalZero 494*10465441SEvalZero #define r0 $0 495*10465441SEvalZero #define r1 $1 496*10465441SEvalZero #define r2 $2 497*10465441SEvalZero #define r3 $3 498*10465441SEvalZero #define r4 $4 499*10465441SEvalZero #define r5 $5 500*10465441SEvalZero #define r6 $6 501*10465441SEvalZero #define r7 $7 502*10465441SEvalZero #define r8 $8 503*10465441SEvalZero #define r9 $9 504*10465441SEvalZero #define r10 $10 505*10465441SEvalZero #define r11 $11 506*10465441SEvalZero #define r12 $12 507*10465441SEvalZero #define r13 $13 508*10465441SEvalZero #define r14 $14 509*10465441SEvalZero #define r15 $15 510*10465441SEvalZero #define r16 $16 511*10465441SEvalZero #define r17 $17 512*10465441SEvalZero #define r18 $18 513*10465441SEvalZero #define r19 $19 514*10465441SEvalZero #define r20 $20 515*10465441SEvalZero #define r21 $21 516*10465441SEvalZero #define r22 $22 517*10465441SEvalZero #define r23 $23 518*10465441SEvalZero #define r24 $24 519*10465441SEvalZero #ifdef MIPSAVPENV 520*10465441SEvalZero #define r25 r25_unknown 521*10465441SEvalZero #define r26 r26_unknown 522*10465441SEvalZero #define r27 r27_unknown 523*10465441SEvalZero #else 524*10465441SEvalZero #define r25 $25 525*10465441SEvalZero #define r26 $26 526*10465441SEvalZero #define r27 $27 527*10465441SEvalZero #endif 528*10465441SEvalZero #define r28 $28 529*10465441SEvalZero #define r29 $29 530*10465441SEvalZero #ifdef MIPSAVPENV 531*10465441SEvalZero #define r30 r30_unknown 532*10465441SEvalZero #else 533*10465441SEvalZero #define r30 $30 534*10465441SEvalZero #endif 535*10465441SEvalZero #define r31 $31 536*10465441SEvalZero 537*10465441SEvalZero #endif 538*10465441SEvalZero 539*10465441SEvalZero /* 540*10465441SEvalZero ************************************************************************* 541*10465441SEvalZero * H A R D W A R E G P R I N D I C E S * 542*10465441SEvalZero ************************************************************************* 543*10465441SEvalZero * 544*10465441SEvalZero * These definitions provide the index (number) of the GPR, as opposed 545*10465441SEvalZero * to the assembler register name ($n). 546*10465441SEvalZero */ 547*10465441SEvalZero 548*10465441SEvalZero #define R_r0 0 549*10465441SEvalZero #define R_r1 1 550*10465441SEvalZero #define R_r2 2 551*10465441SEvalZero #define R_r3 3 552*10465441SEvalZero #define R_r4 4 553*10465441SEvalZero #define R_r5 5 554*10465441SEvalZero #define R_r6 6 555*10465441SEvalZero #define R_r7 7 556*10465441SEvalZero #define R_r8 8 557*10465441SEvalZero #define R_r9 9 558*10465441SEvalZero #define R_r10 10 559*10465441SEvalZero #define R_r11 11 560*10465441SEvalZero #define R_r12 12 561*10465441SEvalZero #define R_r13 13 562*10465441SEvalZero #define R_r14 14 563*10465441SEvalZero #define R_r15 15 564*10465441SEvalZero #define R_r16 16 565*10465441SEvalZero #define R_r17 17 566*10465441SEvalZero #define R_r18 18 567*10465441SEvalZero #define R_r19 19 568*10465441SEvalZero #define R_r20 20 569*10465441SEvalZero #define R_r21 21 570*10465441SEvalZero #define R_r22 22 571*10465441SEvalZero #define R_r23 23 572*10465441SEvalZero #define R_r24 24 573*10465441SEvalZero #define R_r25 25 574*10465441SEvalZero #define R_r26 26 575*10465441SEvalZero #define R_r27 27 576*10465441SEvalZero #define R_r28 28 577*10465441SEvalZero #define R_r29 29 578*10465441SEvalZero #define R_r30 30 579*10465441SEvalZero #define R_r31 31 580*10465441SEvalZero #define R_hi 32 /* Hi register */ 581*10465441SEvalZero #define R_lo 33 /* Lo register */ 582*10465441SEvalZero 583*10465441SEvalZero 584*10465441SEvalZero /* 585*10465441SEvalZero ************************************************************************* 586*10465441SEvalZero * S O F T W A R E G P R M A S K S * 587*10465441SEvalZero ************************************************************************* 588*10465441SEvalZero * 589*10465441SEvalZero * These definitions provide the bit mask corresponding to the GPR number 590*10465441SEvalZero */ 591*10465441SEvalZero 592*10465441SEvalZero #define M_AT (1<<1) 593*10465441SEvalZero #define M_v0 (1<<2) 594*10465441SEvalZero #define M_v1 (1<<3) 595*10465441SEvalZero #define M_a0 (1<<4) 596*10465441SEvalZero #define M_a1 (1<<5) 597*10465441SEvalZero #define M_a2 (1<<6) 598*10465441SEvalZero #define M_a3 (1<<7) 599*10465441SEvalZero #define M_t0 (1<<8) 600*10465441SEvalZero #define M_t1 (1<<9) 601*10465441SEvalZero #define M_t2 (1<<10) 602*10465441SEvalZero #define M_t3 (1<<11) 603*10465441SEvalZero #define M_t4 (1<<12) 604*10465441SEvalZero #define M_t5 (1<<13) 605*10465441SEvalZero #define M_t6 (1<<14) 606*10465441SEvalZero #define M_t7 (1<<15) 607*10465441SEvalZero #define M_s0 (1<<16) 608*10465441SEvalZero #define M_s1 (1<<17) 609*10465441SEvalZero #define M_s2 (1<<18) 610*10465441SEvalZero #define M_s3 (1<<19) 611*10465441SEvalZero #define M_s4 (1<<20) 612*10465441SEvalZero #define M_s5 (1<<21) 613*10465441SEvalZero #define M_s6 (1<<22) 614*10465441SEvalZero #define M_s7 (1<<23) 615*10465441SEvalZero #define M_t8 (1<<24) 616*10465441SEvalZero #define M_t9 (1<<25) 617*10465441SEvalZero #define M_k0 (1<<26) 618*10465441SEvalZero #define M_k1 (1<<27) 619*10465441SEvalZero #define M_gp (1<<28) 620*10465441SEvalZero #define M_sp (1<<29) 621*10465441SEvalZero #define M_fp (1<<30) 622*10465441SEvalZero #define M_ra (1<<31) 623*10465441SEvalZero 624*10465441SEvalZero 625*10465441SEvalZero /* 626*10465441SEvalZero ************************************************************************* 627*10465441SEvalZero * C P 0 R E G I S T E R D E F I N I T I O N S * 628*10465441SEvalZero ************************************************************************* 629*10465441SEvalZero * Each register has the following definitions: 630*10465441SEvalZero * 631*10465441SEvalZero * C0_rrr The register number (as a $n value) 632*10465441SEvalZero * R_C0_rrr The register index (as an integer corresponding 633*10465441SEvalZero * to the register number) 634*10465441SEvalZero * 635*10465441SEvalZero * Each field in a register has the following definitions: 636*10465441SEvalZero * 637*10465441SEvalZero * S_rrrfff The shift count required to right-justify 638*10465441SEvalZero * the field. This corresponds to the bit 639*10465441SEvalZero * number of the right-most bit in the field. 640*10465441SEvalZero * M_rrrfff The Mask required to isolate the field. 641*10465441SEvalZero * 642*10465441SEvalZero * Register diagrams included below as comments correspond to the 643*10465441SEvalZero * MIPS32 and MIPS64 architecture specifications. Refer to other 644*10465441SEvalZero * sources for register diagrams for older architectures. 645*10465441SEvalZero */ 646*10465441SEvalZero 647*10465441SEvalZero 648*10465441SEvalZero /* 649*10465441SEvalZero ************************************************************************ 650*10465441SEvalZero * I N D E X R E G I S T E R ( 0 ) * 651*10465441SEvalZero ************************************************************************ 652*10465441SEvalZero * 653*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 654*10465441SEvalZero * 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 655*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 656*10465441SEvalZero * |P| 0 | Index | Index 657*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 658*10465441SEvalZero */ 659*10465441SEvalZero 660*10465441SEvalZero #define C0_Index $0 661*10465441SEvalZero #define R_C0_Index 0 662*10465441SEvalZero #define C0_INX C0_Index /* OBSOLETE - DO NOT USE IN NEW CODE */ 663*10465441SEvalZero 664*10465441SEvalZero #define S_IndexP 31 /* Probe failure (R)*/ 665*10465441SEvalZero #define M_IndexP (0x1 << S_IndexP) 666*10465441SEvalZero 667*10465441SEvalZero #define S_IndexIndex 0 /* TLB index (R/W)*/ 668*10465441SEvalZero #define M_IndexIndex (0x3f << S_IndexIndex) 669*10465441SEvalZero 670*10465441SEvalZero #define M_Index0Fields 0x7fffffc0 671*10465441SEvalZero #define M_IndexRFields 0x80000000 672*10465441SEvalZero 673*10465441SEvalZero 674*10465441SEvalZero /* 675*10465441SEvalZero ************************************************************************ 676*10465441SEvalZero * R A N D O M R E G I S T E R ( 1 ) * 677*10465441SEvalZero ************************************************************************ 678*10465441SEvalZero * 679*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 680*10465441SEvalZero * 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 681*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 682*10465441SEvalZero * | 0 | Index | Random 683*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 684*10465441SEvalZero */ 685*10465441SEvalZero 686*10465441SEvalZero #define C0_Random $1 687*10465441SEvalZero #define R_C0_Random 1 688*10465441SEvalZero #define C0_RAND $1 /* OBSOLETE - DO NOT USE IN NEW CODE */ 689*10465441SEvalZero 690*10465441SEvalZero #define S_RandomIndex 0 /* TLB random index (R)*/ 691*10465441SEvalZero #define M_RandomIndex (0x3f << S_RandomIndex) 692*10465441SEvalZero 693*10465441SEvalZero #define M_Random0Fields 0xffffffc0 694*10465441SEvalZero #define M_RandomRFields 0x0000003f 695*10465441SEvalZero 696*10465441SEvalZero 697*10465441SEvalZero /* 698*10465441SEvalZero ************************************************************************ 699*10465441SEvalZero * E N T R Y L O 0 R E G I S T E R ( 2 ) * 700*10465441SEvalZero ************************************************************************ 701*10465441SEvalZero * 702*10465441SEvalZero * 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 703*10465441SEvalZero * 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 704*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 705*10465441SEvalZero * | Fill (0) //| 0 | PFN | C |D|V|G| EntryLo0 706*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 707*10465441SEvalZero */ 708*10465441SEvalZero 709*10465441SEvalZero #define C0_EntryLo0 $2 710*10465441SEvalZero #define R_C0_EntryLo0 2 711*10465441SEvalZero #define C0_TLBLO_0 C0_EntryLo0 /* OBSOLETE - DO NOT USE IN NEW CODE */ 712*10465441SEvalZero 713*10465441SEvalZero #define S_EntryLoPFN 6 /* PFN (R/W) */ 714*10465441SEvalZero #define M_EntryLoPFN (0xffffff << S_EntryLoPFN) 715*10465441SEvalZero #define S_EntryLoC 3 /* Coherency attribute (R/W) */ 716*10465441SEvalZero #define M_EntryLoC (0x7 << S_EntryLoC) 717*10465441SEvalZero #define S_EntryLoD 2 /* Dirty (R/W) */ 718*10465441SEvalZero #define M_EntryLoD (0x1 << S_EntryLoD) 719*10465441SEvalZero #define S_EntryLoV 1 /* Valid (R/W) */ 720*10465441SEvalZero #define M_EntryLoV (0x1 << S_EntryLoV) 721*10465441SEvalZero #define S_EntryLoG 0 /* Global (R/W) */ 722*10465441SEvalZero #define M_EntryLoG (0x1 << S_EntryLoG) 723*10465441SEvalZero #define M_EntryLoOddPFN (0x1 << S_EntryLoPFN) /* Odd PFN bit */ 724*10465441SEvalZero #define S_EntryLo_RS K_PageAlign /* Right-justify PFN */ 725*10465441SEvalZero #define S_EntryLo_LS S_EntryLoPFN /* Position PFN to appropriate position */ 726*10465441SEvalZero 727*10465441SEvalZero #define M_EntryLo0Fields 0x00000000 728*10465441SEvalZero #define M_EntryLoRFields 0xc0000000 729*10465441SEvalZero #define M_EntryLo0Fields64 UNS64Const(0x0000000000000000) 730*10465441SEvalZero #define M_EntryLoRFields64 UNS64Const(0xffffffffc0000000) 731*10465441SEvalZero 732*10465441SEvalZero /* 733*10465441SEvalZero * Cache attribute values in the C field of EntryLo and the 734*10465441SEvalZero * K0 field of Config 735*10465441SEvalZero */ 736*10465441SEvalZero #define K_CacheAttrCWTnWA 0 /* Cacheable, write-thru, no write allocate */ 737*10465441SEvalZero #define K_CacheAttrCWTWA 1 /* Cacheable, write-thru, write allocate */ 738*10465441SEvalZero #define K_CacheAttrU 2 /* Uncached */ 739*10465441SEvalZero #define K_CacheAttrC 3 /* Cacheable */ 740*10465441SEvalZero #define K_CacheAttrCN 3 /* Cacheable, non-coherent */ 741*10465441SEvalZero #define K_CacheAttrCCE 4 /* Cacheable, coherent, exclusive */ 742*10465441SEvalZero #define K_CacheAttrCCS 5 /* Cacheable, coherent, shared */ 743*10465441SEvalZero #define K_CacheAttrCCU 6 /* Cacheable, coherent, update */ 744*10465441SEvalZero #define K_CacheAttrUA 7 /* Uncached accelerated */ 745*10465441SEvalZero 746*10465441SEvalZero 747*10465441SEvalZero /* 748*10465441SEvalZero ************************************************************************ 749*10465441SEvalZero * E N T R Y L O 1 R E G I S T E R ( 3 ) * 750*10465441SEvalZero ************************************************************************ 751*10465441SEvalZero * 752*10465441SEvalZero * 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 753*10465441SEvalZero * 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 754*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 755*10465441SEvalZero * | Fill (0) //| 0 | PFN | C |D|V|G| EntryLo1 756*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 757*10465441SEvalZero */ 758*10465441SEvalZero 759*10465441SEvalZero #define C0_EntryLo1 $3 760*10465441SEvalZero #define R_C0_EntryLo1 3 761*10465441SEvalZero #define C0_TLBLO_1 C0_EntryLo1 /* OBSOLETE - DO NOT USE IN NEW CODE */ 762*10465441SEvalZero 763*10465441SEvalZero /* 764*10465441SEvalZero * Field definitions are as given for EntryLo0 above 765*10465441SEvalZero */ 766*10465441SEvalZero 767*10465441SEvalZero 768*10465441SEvalZero /* 769*10465441SEvalZero ************************************************************************ 770*10465441SEvalZero * C O N T E X T R E G I S T E R ( 4 ) * 771*10465441SEvalZero ************************************************************************ 772*10465441SEvalZero * 773*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 774*10465441SEvalZero * 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 775*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 776*10465441SEvalZero * | // PTEBase | BadVPN<31:13> | 0 | Context 777*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 778*10465441SEvalZero */ 779*10465441SEvalZero 780*10465441SEvalZero #define C0_Context $4 781*10465441SEvalZero #define R_C0_Context 4 782*10465441SEvalZero #define C0_CTXT C0_Context /* OBSOLETE - DO NOT USE IN NEW CODE */ 783*10465441SEvalZero 784*10465441SEvalZero #define S_ContextPTEBase 23 /* PTE base (R/W) */ 785*10465441SEvalZero #define M_ContextPTEBase (0x1ff << S_ContextPTEBase) 786*10465441SEvalZero #define S_ContextBadVPN 4 /* BadVPN2 (R) */ 787*10465441SEvalZero #define M_ContextBadVPN (0x7ffff << S_ContextBadVPN) 788*10465441SEvalZero #define S_ContextBadVPN_LS 9 /* Position BadVPN to bit 31 */ 789*10465441SEvalZero #define S_ContextBadVPN_RS 13 /* Right-justify shifted BadVPN field */ 790*10465441SEvalZero 791*10465441SEvalZero #define M_Context0Fields 0x0000000f 792*10465441SEvalZero #define M_ContextRFields 0x007ffff0 793*10465441SEvalZero #define M_Context0Fields64 UNS64Const(0x000000000000000f) 794*10465441SEvalZero #define M_ContextRFields64 UNS64Const(0x00000000007ffff0) 795*10465441SEvalZero 796*10465441SEvalZero 797*10465441SEvalZero /* 798*10465441SEvalZero ************************************************************************ 799*10465441SEvalZero * P A G E M A S K R E G I S T E R ( 5 ) * 800*10465441SEvalZero ************************************************************************ 801*10465441SEvalZero * 802*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 803*10465441SEvalZero * 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 804*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 805*10465441SEvalZero * | 0 | Mask | 0 | PageMask 806*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 807*10465441SEvalZero */ 808*10465441SEvalZero 809*10465441SEvalZero #define C0_PageMask $5 810*10465441SEvalZero #define R_C0_PageMask 5 /* Mask (R/W) */ 811*10465441SEvalZero #define C0_PGMASK C0_PageMask /* OBSOLETE - DO NOT USE IN NEW CODE */ 812*10465441SEvalZero 813*10465441SEvalZero #define S_PageMaskMask 13 814*10465441SEvalZero #define M_PageMaskMask (0xfff << S_PageMaskMask) 815*10465441SEvalZero 816*10465441SEvalZero #define M_PageMask0Fields 0xfe001fff 817*10465441SEvalZero #define M_PageMaskRFields 0x00000000 818*10465441SEvalZero 819*10465441SEvalZero /* 820*10465441SEvalZero * Values in the Mask field 821*10465441SEvalZero */ 822*10465441SEvalZero #define K_PageMask4K 0x000 /* K_PageMasknn values are values for use */ 823*10465441SEvalZero #define K_PageMask16K 0x003 /* with KReqPageAttributes or KReqPageMask macros */ 824*10465441SEvalZero #define K_PageMask64K 0x00f 825*10465441SEvalZero #define K_PageMask256K 0x03f 826*10465441SEvalZero #define K_PageMask1M 0x0ff 827*10465441SEvalZero #define K_PageMask4M 0x3ff 828*10465441SEvalZero #define K_PageMask16M 0xfff 829*10465441SEvalZero 830*10465441SEvalZero #define M_PageMask4K (K_PageMask4K << S_PageMaskMask) /* M_PageMasknn values are masks */ 831*10465441SEvalZero #define M_PageMask16K (K_PageMask16K << S_PageMaskMask) /* in position in the PageMask register */ 832*10465441SEvalZero #define M_PageMask64K (K_PageMask64K << S_PageMaskMask) 833*10465441SEvalZero #define M_PageMask256K (K_PageMask256K << S_PageMaskMask) 834*10465441SEvalZero #define M_PageMask1M (K_PageMask1M << S_PageMaskMask) 835*10465441SEvalZero #define M_PageMask4M (K_PageMask4M << S_PageMaskMask) 836*10465441SEvalZero #define M_PageMask16M (K_PageMask16M << S_PageMaskMask) 837*10465441SEvalZero 838*10465441SEvalZero 839*10465441SEvalZero /* 840*10465441SEvalZero ************************************************************************ 841*10465441SEvalZero * W I R E D R E G I S T E R ( 6 ) * 842*10465441SEvalZero ************************************************************************ 843*10465441SEvalZero * 844*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 845*10465441SEvalZero * 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 846*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 847*10465441SEvalZero * | 0 | Index | Wired 848*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 849*10465441SEvalZero */ 850*10465441SEvalZero 851*10465441SEvalZero #define C0_Wired $6 852*10465441SEvalZero #define R_C0_Wired 6 853*10465441SEvalZero #define C0_TLBWIRED C0_Wired /* OBSOLETE - DO NOT USE IN NEW CODE */ 854*10465441SEvalZero 855*10465441SEvalZero #define S_WiredIndex 0 /* TLB wired boundary (R/W) */ 856*10465441SEvalZero #define M_WiredIndex (0x3f << S_WiredIndex) 857*10465441SEvalZero 858*10465441SEvalZero #define M_Wired0Fields 0xffffffc0 859*10465441SEvalZero #define M_WiredRFields 0x00000000 860*10465441SEvalZero 861*10465441SEvalZero 862*10465441SEvalZero /* 863*10465441SEvalZero ************************************************************************ 864*10465441SEvalZero * B A D V A D D R R E G I S T E R ( 8 ) * 865*10465441SEvalZero ************************************************************************ 866*10465441SEvalZero * 867*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 868*10465441SEvalZero * 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 869*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 870*10465441SEvalZero * | // Bad Virtual Address | BadVAddr 871*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 872*10465441SEvalZero */ 873*10465441SEvalZero 874*10465441SEvalZero #define C0_BadVAddr $8 875*10465441SEvalZero #define R_C0_BadVAddr 8 876*10465441SEvalZero #define C0_BADVADDR C0_BadVAddr /* OBSOLETE - DO NOT USE IN NEW CODE */ 877*10465441SEvalZero 878*10465441SEvalZero #define M_BadVAddrOddPage K_PageSize /* Even/Odd VA bit for pair of PAs */ 879*10465441SEvalZero 880*10465441SEvalZero #define M_BadVAddr0Fields 0x00000000 881*10465441SEvalZero #define M_BadVAddrRFields 0xffffffff 882*10465441SEvalZero #define M_BadVAddr0Fields64 UNS64Const(0x0000000000000000) 883*10465441SEvalZero #define M_BadVAddrRFields64 UNS64Const(0xffffffffffffffff) 884*10465441SEvalZero 885*10465441SEvalZero /* 886*10465441SEvalZero ************************************************************************ 887*10465441SEvalZero * C O U N T R E G I S T E R ( 9 ) * 888*10465441SEvalZero ************************************************************************ 889*10465441SEvalZero * 890*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 891*10465441SEvalZero * 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 892*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 893*10465441SEvalZero * | Count Value | Count 894*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 895*10465441SEvalZero */ 896*10465441SEvalZero 897*10465441SEvalZero #define C0_Count $9 898*10465441SEvalZero #define R_C0_Count 9 899*10465441SEvalZero #define C0_COUNT C0_Count /* OBSOLETE - DO NOT USE IN NEW CODE */ 900*10465441SEvalZero 901*10465441SEvalZero #define M_Count0Fields 0x00000000 902*10465441SEvalZero #define M_CountRFields 0x00000000 903*10465441SEvalZero 904*10465441SEvalZero 905*10465441SEvalZero /* 906*10465441SEvalZero ************************************************************************ 907*10465441SEvalZero * E N T R Y H I R E G I S T E R ( 1 0 ) * 908*10465441SEvalZero ************************************************************************ 909*10465441SEvalZero * 910*10465441SEvalZero * 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 911*10465441SEvalZero * 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 912*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 913*10465441SEvalZero * | R | Fill // VPN2 | 0 | ASID | EntryHi 914*10465441SEvalZero * +-+-+-+-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 915*10465441SEvalZero */ 916*10465441SEvalZero 917*10465441SEvalZero #define C0_EntryHi $10 918*10465441SEvalZero #define R_C0_EntryHi 10 919*10465441SEvalZero #define C0_TLBHI C0_EntryHi /* OBSOLETE - DO NOT USE IN NEW CODE */ 920*10465441SEvalZero 921*10465441SEvalZero #define S_EntryHiR64 62 /* Region (R/W) */ 922*10465441SEvalZero #define M_EntryHiR64 UNS64Const(0xc000000000000000) 923*10465441SEvalZero #define S_EntryHiVPN2 13 /* VPN/2 (R/W) */ 924*10465441SEvalZero #define M_EntryHiVPN2 (0x7ffff << S_EntryHiVPN2) 925*10465441SEvalZero #define M_EntryHiVPN264 UNS64Const(0x000000ffffffe000) 926*10465441SEvalZero #define S_EntryHiASID 0 /* ASID (R/W) */ 927*10465441SEvalZero #define M_EntryHiASID (0xff << S_EntryHiASID) 928*10465441SEvalZero #define S_EntryHiVPN_Shf S_EntryHiVPN2 929*10465441SEvalZero 930*10465441SEvalZero #define M_EntryHi0Fields 0x00001f00 931*10465441SEvalZero #define M_EntryHiRFields 0x00000000 932*10465441SEvalZero #define M_EntryHi0Fields64 UNS64Const(0x0000000000001f00) 933*10465441SEvalZero #define M_EntryHiRFields64 UNS64Const(0x3fffff0000000000) 934*10465441SEvalZero 935*10465441SEvalZero 936*10465441SEvalZero /* 937*10465441SEvalZero ************************************************************************ 938*10465441SEvalZero * C O M P A R E R E G I S T E R ( 1 1 ) * 939*10465441SEvalZero ************************************************************************ 940*10465441SEvalZero * 941*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 942*10465441SEvalZero * 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 943*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 944*10465441SEvalZero * | Compare Value | Compare 945*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 946*10465441SEvalZero */ 947*10465441SEvalZero 948*10465441SEvalZero #define C0_Compare $11 949*10465441SEvalZero #define R_C0_Compare 11 950*10465441SEvalZero #define C0_COMPARE C0_Compare /* OBSOLETE - DO NOT USE IN NEW CODE */ 951*10465441SEvalZero 952*10465441SEvalZero #define M_Compare0Fields 0x00000000 953*10465441SEvalZero #define M_CompareRFields 0x00000000 954*10465441SEvalZero 955*10465441SEvalZero 956*10465441SEvalZero /* 957*10465441SEvalZero ************************************************************************ 958*10465441SEvalZero * S T A T U S R E G I S T E R ( 1 2 ) * 959*10465441SEvalZero ************************************************************************ 960*10465441SEvalZero * 961*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 962*10465441SEvalZero * 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 963*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 964*10465441SEvalZero * |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| 965*10465441SEvalZero * |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 966*10465441SEvalZero * |3|2|1|0| | | | | |V| | |I| | v |7|6|5|4|3|2|1|0| | | | |v|L|L| | 967*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 968*10465441SEvalZero */ 969*10465441SEvalZero 970*10465441SEvalZero #define C0_Status $12 971*10465441SEvalZero #define R_C0_Status 12 972*10465441SEvalZero #define C0_SR C0_Status /* OBSOLETE - DO NOT USE IN NEW CODE */ 973*10465441SEvalZero 974*10465441SEvalZero #define S_StatusCU 28 /* Coprocessor enable (R/W) */ 975*10465441SEvalZero #define M_StatusCU (0xf << S_StatusCU) 976*10465441SEvalZero #define S_StatusCU3 31 977*10465441SEvalZero #define M_StatusCU3 (0x1 << S_StatusCU3) 978*10465441SEvalZero #define S_StatusCU2 30 979*10465441SEvalZero #define M_StatusCU2 (0x1 << S_StatusCU2) 980*10465441SEvalZero #define S_StatusCU1 29 981*10465441SEvalZero #define M_StatusCU1 (0x1 << S_StatusCU1) 982*10465441SEvalZero #define S_StatusCU0 28 983*10465441SEvalZero #define M_StatusCU0 (0x1 << S_StatusCU0) 984*10465441SEvalZero #define S_StatusRP 27 /* Enable reduced power mode (R/W) */ 985*10465441SEvalZero #define M_StatusRP (0x1 << S_StatusRP) 986*10465441SEvalZero #define S_StatusFR 26 /* Enable 64-bit FPRs (MIPS64 only) (R/W) */ 987*10465441SEvalZero #define M_StatusFR (0x1 << S_StatusFR) 988*10465441SEvalZero #define S_StatusRE 25 /* Enable reverse endian (R/W) */ 989*10465441SEvalZero #define M_StatusRE (0x1 << S_StatusRE) 990*10465441SEvalZero #define S_StatusMX 24 /* Enable access to MDMX resources (MIPS64 only) (R/W) */ 991*10465441SEvalZero #define M_StatusMX (0x1 << S_StatusMX) 992*10465441SEvalZero #define S_StatusPX 23 /* Enable access to 64-bit instructions/data (MIPS64 only) (R/W) */ 993*10465441SEvalZero #define M_StatusPX (0x1 << S_StatusPX) 994*10465441SEvalZero #define S_StatusBEV 22 /* Enable Boot Exception Vectors (R/W) */ 995*10465441SEvalZero #define M_StatusBEV (0x1 << S_StatusBEV) 996*10465441SEvalZero #define S_StatusTS 21 /* Denote TLB shutdown (R/W) */ 997*10465441SEvalZero #define M_StatusTS (0x1 << S_StatusTS) 998*10465441SEvalZero #define S_StatusSR 20 /* Denote soft reset (R/W) */ 999*10465441SEvalZero #define M_StatusSR (0x1 << S_StatusSR) 1000*10465441SEvalZero #define S_StatusNMI 19 1001*10465441SEvalZero #define M_StatusNMI (0x1 << S_StatusNMI) /* Denote NMI (R/W) */ 1002*10465441SEvalZero #define S_StatusIM 8 /* Interrupt mask (R/W) */ 1003*10465441SEvalZero #define M_StatusIM (0xff << S_StatusIM) 1004*10465441SEvalZero #define S_StatusIM7 15 1005*10465441SEvalZero #define M_StatusIM7 (0x1 << S_StatusIM7) 1006*10465441SEvalZero #define S_StatusIM6 14 1007*10465441SEvalZero #define M_StatusIM6 (0x1 << S_StatusIM6) 1008*10465441SEvalZero #define S_StatusIM5 13 1009*10465441SEvalZero #define M_StatusIM5 (0x1 << S_StatusIM5) 1010*10465441SEvalZero #define S_StatusIM4 12 1011*10465441SEvalZero #define M_StatusIM4 (0x1 << S_StatusIM4) 1012*10465441SEvalZero #define S_StatusIM3 11 1013*10465441SEvalZero #define M_StatusIM3 (0x1 << S_StatusIM3) 1014*10465441SEvalZero #define S_StatusIM2 10 1015*10465441SEvalZero #define M_StatusIM2 (0x1 << S_StatusIM2) 1016*10465441SEvalZero #define S_StatusIM1 9 1017*10465441SEvalZero #define M_StatusIM1 (0x1 << S_StatusIM1) 1018*10465441SEvalZero #define S_StatusIM0 8 1019*10465441SEvalZero #define M_StatusIM0 (0x1 << S_StatusIM0) 1020*10465441SEvalZero #define S_StatusKX 7 /* Enable access to extended kernel addresses (MIPS64 only) (R/W) */ 1021*10465441SEvalZero #define M_StatusKX (0x1 << S_StatusKX) 1022*10465441SEvalZero #define S_StatusSX 6 /* Enable access to extended supervisor addresses (MIPS64 only) (R/W) */ 1023*10465441SEvalZero #define M_StatusSX (0x1 << S_StatusSX) 1024*10465441SEvalZero #define S_StatusUX 5 /* Enable access to extended user addresses (MIPS64 only) (R/W) */ 1025*10465441SEvalZero #define M_StatusUX (0x1 << S_StatusUX) 1026*10465441SEvalZero #define S_StatusKSU 3 /* Two-bit current mode (R/W) */ 1027*10465441SEvalZero #define M_StatusKSU (0x3 << S_StatusKSU) 1028*10465441SEvalZero #define S_StatusUM 4 /* User mode if supervisor mode not implemented (R/W) */ 1029*10465441SEvalZero #define M_StatusUM (0x1 << S_StatusUM) 1030*10465441SEvalZero #define S_StatusSM 3 /* Supervisor mode (R/W) */ 1031*10465441SEvalZero #define M_StatusSM (0x1 << S_StatusSM) 1032*10465441SEvalZero #define S_StatusERL 2 /* Denotes error level (R/W) */ 1033*10465441SEvalZero #define M_StatusERL (0x1 << S_StatusERL) 1034*10465441SEvalZero #define S_StatusEXL 1 /* Denotes exception level (R/W) */ 1035*10465441SEvalZero #define M_StatusEXL (0x1 << S_StatusEXL) 1036*10465441SEvalZero #define S_StatusIE 0 /* Enables interrupts (R/W) */ 1037*10465441SEvalZero #define M_StatusIE (0x1 << S_StatusIE) 1038*10465441SEvalZero 1039*10465441SEvalZero #define M_Status0Fields 0x00040000 1040*10465441SEvalZero #define M_StatusRFields 0x058000e0 /* FR, MX, PX, KX, SX, UX unused in MIPS32 */ 1041*10465441SEvalZero #define M_Status0Fields64 0x00040000 1042*10465441SEvalZero #define M_StatusRFields64 0x00000000 1043*10465441SEvalZero 1044*10465441SEvalZero /* 1045*10465441SEvalZero * Values in the KSU field 1046*10465441SEvalZero */ 1047*10465441SEvalZero #define K_StatusKSU_U 2 /* User mode in KSU field */ 1048*10465441SEvalZero #define K_StatusKSU_S 1 /* Supervisor mode in KSU field */ 1049*10465441SEvalZero #define K_StatusKSU_K 0 /* Kernel mode in KSU field */ 1050*10465441SEvalZero 1051*10465441SEvalZero 1052*10465441SEvalZero /* 1053*10465441SEvalZero ************************************************************************ 1054*10465441SEvalZero * C A U S E R E G I S T E R ( 1 3 ) * 1055*10465441SEvalZero ************************************************************************ 1056*10465441SEvalZero * 1057*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1058*10465441SEvalZero * 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 1059*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1060*10465441SEvalZero * |B| | C | |I|W| |I|I|I|I|I|I|I|I| | | R | 1061*10465441SEvalZero * |D| | E | Rsvd |V|P| Rsvd |P|P|P|P|P|P|P|P| | ExcCode | s | Cause 1062*10465441SEvalZero * | | | | | | | |7|6|5|4|3|2|1|0| | | v | 1063*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1064*10465441SEvalZero */ 1065*10465441SEvalZero 1066*10465441SEvalZero #define C0_Cause $13 1067*10465441SEvalZero #define R_C0_Cause 13 1068*10465441SEvalZero #define C0_CAUSE C0_Cause /* OBSOLETE - DO NOT USE IN NEW CODE */ 1069*10465441SEvalZero 1070*10465441SEvalZero #define S_CauseBD 31 1071*10465441SEvalZero #define M_CauseBD (0x1 << S_CauseBD) 1072*10465441SEvalZero #define S_CauseCE 28 1073*10465441SEvalZero #define M_CauseCE (0x3<< S_CauseCE) 1074*10465441SEvalZero #define S_CauseIV 23 1075*10465441SEvalZero #define M_CauseIV (0x1 << S_CauseIV) 1076*10465441SEvalZero #define S_CauseWP 22 1077*10465441SEvalZero #define M_CauseWP (0x1 << S_CauseWP) 1078*10465441SEvalZero #define S_CauseIP 8 1079*10465441SEvalZero #define M_CauseIP (0xff << S_CauseIP) 1080*10465441SEvalZero #define S_CauseIPEXT 10 1081*10465441SEvalZero #define M_CauseIPEXT (0x3f << S_CauseIPEXT) 1082*10465441SEvalZero #define S_CauseIP7 15 1083*10465441SEvalZero #define M_CauseIP7 (0x1 << S_CauseIP7) 1084*10465441SEvalZero #define S_CauseIP6 14 1085*10465441SEvalZero #define M_CauseIP6 (0x1 << S_CauseIP6) 1086*10465441SEvalZero #define S_CauseIP5 13 1087*10465441SEvalZero #define M_CauseIP5 (0x1 << S_CauseIP5) 1088*10465441SEvalZero #define S_CauseIP4 12 1089*10465441SEvalZero #define M_CauseIP4 (0x1 << S_CauseIP4) 1090*10465441SEvalZero #define S_CauseIP3 11 1091*10465441SEvalZero #define M_CauseIP3 (0x1 << S_CauseIP3) 1092*10465441SEvalZero #define S_CauseIP2 10 1093*10465441SEvalZero #define M_CauseIP2 (0x1 << S_CauseIP2) 1094*10465441SEvalZero #define S_CauseIP1 9 1095*10465441SEvalZero #define M_CauseIP1 (0x1 << S_CauseIP1) 1096*10465441SEvalZero #define S_CauseIP0 8 1097*10465441SEvalZero #define M_CauseIP0 (0x1 << S_CauseIP0) 1098*10465441SEvalZero #define S_CauseExcCode 2 1099*10465441SEvalZero #define M_CauseExcCode (0x1f << S_CauseExcCode) 1100*10465441SEvalZero 1101*10465441SEvalZero #define M_Cause0Fields 0x4f3f0083 1102*10465441SEvalZero #define M_CauseRFields 0xb000fc7c 1103*10465441SEvalZero 1104*10465441SEvalZero /* 1105*10465441SEvalZero * Values in the CE field 1106*10465441SEvalZero */ 1107*10465441SEvalZero #define K_CauseCE0 0 /* Coprocessor 0 in the CE field */ 1108*10465441SEvalZero #define K_CauseCE1 1 /* Coprocessor 1 in the CE field */ 1109*10465441SEvalZero #define K_CauseCE2 2 /* Coprocessor 2 in the CE field */ 1110*10465441SEvalZero #define K_CauseCE3 3 /* Coprocessor 3 in the CE field */ 1111*10465441SEvalZero 1112*10465441SEvalZero /* 1113*10465441SEvalZero * Values in the ExcCode field 1114*10465441SEvalZero */ 1115*10465441SEvalZero #define EX_INT 0 /* Interrupt */ 1116*10465441SEvalZero #define EXC_INT (EX_INT << S_CauseExcCode) 1117*10465441SEvalZero #define EX_MOD 1 /* TLB modified */ 1118*10465441SEvalZero #define EXC_MOD (EX_MOD << S_CauseExcCode) 1119*10465441SEvalZero #define EX_TLBL 2 /* TLB exception (load or ifetch) */ 1120*10465441SEvalZero #define EXC_TLBL (EX_TLBL << S_CauseExcCode) 1121*10465441SEvalZero #define EX_TLBS 3 /* TLB exception (store) */ 1122*10465441SEvalZero #define EXC_TLBS (EX_TLBS << S_CauseExcCode) 1123*10465441SEvalZero #define EX_ADEL 4 /* Address error (load or ifetch) */ 1124*10465441SEvalZero #define EXC_ADEL (EX_ADEL << S_CauseExcCode) 1125*10465441SEvalZero #define EX_ADES 5 /* Address error (store) */ 1126*10465441SEvalZero #define EXC_ADES (EX_ADES << S_CauseExcCode) 1127*10465441SEvalZero #define EX_IBE 6 /* Instruction Bus Error */ 1128*10465441SEvalZero #define EXC_IBE (EX_IBE << S_CauseExcCode) 1129*10465441SEvalZero #define EX_DBE 7 /* Data Bus Error */ 1130*10465441SEvalZero #define EXC_DBE (EX_DBE << S_CauseExcCode) 1131*10465441SEvalZero #define EX_SYS 8 /* Syscall */ 1132*10465441SEvalZero #define EXC_SYS (EX_SYS << S_CauseExcCode) 1133*10465441SEvalZero #define EX_SYSCALL EX_SYS 1134*10465441SEvalZero #define EXC_SYSCALL EXC_SYS 1135*10465441SEvalZero #define EX_BP 9 /* Breakpoint */ 1136*10465441SEvalZero #define EXC_BP (EX_BP << S_CauseExcCode) 1137*10465441SEvalZero #define EX_BREAK EX_BP 1138*10465441SEvalZero #define EXC_BREAK EXC_BP 1139*10465441SEvalZero #define EX_RI 10 /* Reserved instruction */ 1140*10465441SEvalZero #define EXC_RI (EX_RI << S_CauseExcCode) 1141*10465441SEvalZero #define EX_CPU 11 /* CoProcessor Unusable */ 1142*10465441SEvalZero #define EXC_CPU (EX_CPU << S_CauseExcCode) 1143*10465441SEvalZero #define EX_OV 12 /* OVerflow */ 1144*10465441SEvalZero #define EXC_OV (EX_OV << S_CauseExcCode) 1145*10465441SEvalZero #define EX_TR 13 /* Trap instruction */ 1146*10465441SEvalZero #define EXC_TR (EX_TR << S_CauseExcCode) 1147*10465441SEvalZero #define EX_TRAP EX_TR 1148*10465441SEvalZero #define EXC_TRAP EXC_TR 1149*10465441SEvalZero #define EX_FPE 15 /* floating point exception */ 1150*10465441SEvalZero #define EXC_FPE (EX_FPE << S_CauseExcCode) 1151*10465441SEvalZero #define EX_C2E 18 /* COP2 exception */ 1152*10465441SEvalZero #define EXC_C2E (EX_C2E << S_CauseExcCode) 1153*10465441SEvalZero #define EX_MDMX 22 /* MDMX exception */ 1154*10465441SEvalZero #define EXC_MDMX (EX_MDMX << S_CauseExcCode) 1155*10465441SEvalZero #define EX_WATCH 23 /* Watch exception */ 1156*10465441SEvalZero #define EXC_WATCH (EX_WATCH << S_CauseExcCode) 1157*10465441SEvalZero #define EX_MCHECK 24 /* Machine check exception */ 1158*10465441SEvalZero #define EXC_MCHECK (EX_MCHECK << S_CauseExcCode) 1159*10465441SEvalZero #define EX_CacheErr 30 /* Cache error caused re-entry to Debug Mode */ 1160*10465441SEvalZero #define EXC_CacheErr (EX_CacheErr << S_CauseExcCode) 1161*10465441SEvalZero 1162*10465441SEvalZero 1163*10465441SEvalZero /* 1164*10465441SEvalZero ************************************************************************ 1165*10465441SEvalZero * E P C R E G I S T E R ( 1 4 ) * 1166*10465441SEvalZero ************************************************************************ 1167*10465441SEvalZero * 1168*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1169*10465441SEvalZero * 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 1170*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1171*10465441SEvalZero * | // Exception PC | EPC 1172*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1173*10465441SEvalZero */ 1174*10465441SEvalZero 1175*10465441SEvalZero #define C0_EPC $14 1176*10465441SEvalZero #define R_C0_EPC 14 1177*10465441SEvalZero 1178*10465441SEvalZero #define M_EPC0Fields 0x00000000 1179*10465441SEvalZero #define M_EPCRFields 0x00000000 1180*10465441SEvalZero #define M_EPC0Fields64 UNS64Const(0x0000000000000000) 1181*10465441SEvalZero #define M_EPCRFields64 UNS64Const(0x0000000000000000) 1182*10465441SEvalZero 1183*10465441SEvalZero /* 1184*10465441SEvalZero ************************************************************************ 1185*10465441SEvalZero * P R I D R E G I S T E R ( 1 5 ) * 1186*10465441SEvalZero ************************************************************************ 1187*10465441SEvalZero * 1188*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1189*10465441SEvalZero * 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 1190*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1191*10465441SEvalZero * | Company Opts | Company ID | Procesor ID | Revision | PRId 1192*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1193*10465441SEvalZero */ 1194*10465441SEvalZero 1195*10465441SEvalZero #define C0_PRId $15 1196*10465441SEvalZero #define R_C0_PRId 15 1197*10465441SEvalZero #define C0_PRID C0_PRID /* OBSOLETE - DO NOT USE IN NEW CODE */ 1198*10465441SEvalZero 1199*10465441SEvalZero #define S_PRIdCoOpt 24 /* Company options (R) */ 1200*10465441SEvalZero #define M_PRIdCoOpt (0xff << S_PRIdCoOpt) 1201*10465441SEvalZero #define S_PRIdCoID 16 /* Company ID (R) */ 1202*10465441SEvalZero #define M_PRIdCoID (0xff << S_PRIdCoID) 1203*10465441SEvalZero #define S_PRIdImp 8 /* Implementation ID (R) */ 1204*10465441SEvalZero #define M_PRIdImp (0xff << S_PRIdImp) 1205*10465441SEvalZero #define S_PRIdRev 0 /* Revision (R) */ 1206*10465441SEvalZero #define M_PRIdRev (0xff << S_PRIdRev) 1207*10465441SEvalZero 1208*10465441SEvalZero #define M_PRId0Fields 0x00000000 1209*10465441SEvalZero #define M_PRIdRFields 0xffffffff 1210*10465441SEvalZero /* 1211*10465441SEvalZero * Values in the Company ID field 1212*10465441SEvalZero */ 1213*10465441SEvalZero #define K_PRIdCoID_MIPS 1 1214*10465441SEvalZero #define K_PRIdCoID_Broadcom 2 1215*10465441SEvalZero #define K_PRIdCoID_Alchemy 3 1216*10465441SEvalZero #define K_PRIdCoID_SiByte 4 1217*10465441SEvalZero #define K_PRIdCoID_SandCraft 5 1218*10465441SEvalZero #define K_PRIdCoID_Philips 6 1219*10465441SEvalZero #define K_PRIdCoID_NextAvailable 7 /* Next available encoding */ 1220*10465441SEvalZero 1221*10465441SEvalZero 1222*10465441SEvalZero /* 1223*10465441SEvalZero * Values in the implementation number field 1224*10465441SEvalZero */ 1225*10465441SEvalZero #define K_PRIdImp_Jade 0x80 1226*10465441SEvalZero #define K_PRIdImp_Opal 0x81 1227*10465441SEvalZero #define K_PRIdImp_Ruby 0x82 1228*10465441SEvalZero #define K_PRIdImp_JadeLite 0x83 1229*10465441SEvalZero #define K_PRIdImp_4KEc 0x84 /* Emerald with TLB MMU */ 1230*10465441SEvalZero #define K_PRIdImp_4KEmp 0x85 /* Emerald with FM MMU */ 1231*10465441SEvalZero #define K_PRIdImp_4KSc 0x86 /* Coral */ 1232*10465441SEvalZero 1233*10465441SEvalZero #define K_PRIdImp_R3000 0x01 1234*10465441SEvalZero #define K_PRIdImp_R4000 0x04 1235*10465441SEvalZero #define K_PRIdImp_R10000 0x09 1236*10465441SEvalZero #define K_PRIdImp_R4300 0x0b 1237*10465441SEvalZero #define K_PRIdImp_R5000 0x23 1238*10465441SEvalZero #define K_PRIdImp_R5200 0x28 1239*10465441SEvalZero #define K_PRIdImp_R5400 0x54 1240*10465441SEvalZero 1241*10465441SEvalZero /* 1242*10465441SEvalZero ************************************************************************ 1243*10465441SEvalZero * C O N F I G R E G I S T E R ( 1 6 ) * 1244*10465441SEvalZero ************************************************************************ 1245*10465441SEvalZero * 1246*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1247*10465441SEvalZero * 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 1248*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1249*10465441SEvalZero * |M| |B| A | A | | K | Config 1250*10465441SEvalZero * | | Reserved for Implementations|E| T | R | Reserved | 0 | 1251*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1252*10465441SEvalZero */ 1253*10465441SEvalZero 1254*10465441SEvalZero #define C0_Config $16 1255*10465441SEvalZero #define R_C0_Config 16 1256*10465441SEvalZero #define C0_CONFIG C0_Config /* OBSOLETE - DO NOT USE IN NEW CODE */ 1257*10465441SEvalZero 1258*10465441SEvalZero #define S_ConfigMore 31 /* Additional config registers present (R) */ 1259*10465441SEvalZero #define M_ConfigMore (0x1 << S_ConfigMore) 1260*10465441SEvalZero #define S_ConfigImpl 16 /* Implementation-specific fields */ 1261*10465441SEvalZero #define M_ConfigImpl (0x7fff << S_ConfigImpl) 1262*10465441SEvalZero #define S_ConfigBE 15 /* Denotes big-endian operation (R) */ 1263*10465441SEvalZero #define M_ConfigBE (0x1 << S_ConfigBE) 1264*10465441SEvalZero #define S_ConfigAT 13 /* Architecture type (R) */ 1265*10465441SEvalZero #define M_ConfigAT (0x3 << S_ConfigAT) 1266*10465441SEvalZero #define S_ConfigAR 10 /* Architecture revision (R) */ 1267*10465441SEvalZero #define M_ConfigAR (0x7 << S_ConfigAR) 1268*10465441SEvalZero #define S_ConfigMT 7 /* MMU Type (R) */ 1269*10465441SEvalZero #define M_ConfigMT (0x7 << S_ConfigMT) 1270*10465441SEvalZero #define S_ConfigK0 0 /* Kseg0 coherency algorithm (R/W) */ 1271*10465441SEvalZero #define M_ConfigK0 (0x7 << S_ConfigK0) 1272*10465441SEvalZero 1273*10465441SEvalZero /* 1274*10465441SEvalZero * The following definitions are technically part of the "reserved for 1275*10465441SEvalZero * implementations" field, but are the semi-standard definition used in 1276*10465441SEvalZero * fixed-mapping MMUs to control the cacheability of kuseg and kseg2/3 1277*10465441SEvalZero * references. For that reason, they are included here, but may be 1278*10465441SEvalZero * overridden by true implementation-specific definitions 1279*10465441SEvalZero */ 1280*10465441SEvalZero #define S_ConfigK23 28 /* Kseg2/3 coherency algorithm (FM MMU only) (R/W) */ 1281*10465441SEvalZero #define M_ConfigK23 (0x7 << S_ConfigK23) 1282*10465441SEvalZero #define S_ConfigKU 25 /* Kuseg coherency algorithm (FM MMU only) (R/W) */ 1283*10465441SEvalZero #define M_ConfigKU (0x7 << S_ConfigKU) 1284*10465441SEvalZero 1285*10465441SEvalZero #define M_Config0Fields 0x00000078 1286*10465441SEvalZero #define M_ConfigRFields 0x8000ff80 1287*10465441SEvalZero 1288*10465441SEvalZero /* 1289*10465441SEvalZero * Values in the AT field 1290*10465441SEvalZero */ 1291*10465441SEvalZero #define K_ConfigAT_MIPS32 0 /* MIPS32 */ 1292*10465441SEvalZero #define K_ConfigAT_MIPS64S 1 /* MIPS64 with 32-bit addresses */ 1293*10465441SEvalZero #define K_ConfigAT_MIPS64 2 /* MIPS64 with 32/64-bit addresses */ 1294*10465441SEvalZero 1295*10465441SEvalZero /* 1296*10465441SEvalZero * Values in the MT field 1297*10465441SEvalZero */ 1298*10465441SEvalZero #define K_ConfigMT_NoMMU 0 /* No MMU */ 1299*10465441SEvalZero #define K_ConfigMT_TLBMMU 1 /* Standard TLB MMU */ 1300*10465441SEvalZero #define K_ConfigMT_BATMMU 2 /* Standard BAT MMU */ 1301*10465441SEvalZero #define K_ConfigMT_FMMMU 3 /* Standard Fixed Mapping MMU */ 1302*10465441SEvalZero 1303*10465441SEvalZero 1304*10465441SEvalZero /* 1305*10465441SEvalZero ************************************************************************ 1306*10465441SEvalZero * C O N F I G 1 R E G I S T E R ( 1 6, SELECT 1 ) * 1307*10465441SEvalZero ************************************************************************ 1308*10465441SEvalZero * 1309*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1310*10465441SEvalZero * 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 1311*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1312*10465441SEvalZero * |M| MMU Size | IS | IL | IA | DS | DL | DA |C|M|P|W|C|E|F| Config1 1313*10465441SEvalZero * | | | | | | | | |2|D|C|R|A|P|P| 1314*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1315*10465441SEvalZero */ 1316*10465441SEvalZero 1317*10465441SEvalZero #define C0_Config1 $16,1 1318*10465441SEvalZero #define R_C0_Config1 16 1319*10465441SEvalZero 1320*10465441SEvalZero #define S_Config1More 31 /* Additional Config registers present (R) */ 1321*10465441SEvalZero #define M_Config1More (0x1 << S_Config1More) 1322*10465441SEvalZero #define S_Config1MMUSize 25 /* Number of MMU entries - 1 (R) */ 1323*10465441SEvalZero #define M_Config1MMUSize (0x3f << S_Config1MMUSize) 1324*10465441SEvalZero #define S_Config1IS 22 /* Icache sets per way (R) */ 1325*10465441SEvalZero #define M_Config1IS (0x7 << S_Config1IS) 1326*10465441SEvalZero #define S_Config1IL 19 /* Icache line size (R) */ 1327*10465441SEvalZero #define M_Config1IL (0x7 << S_Config1IL) 1328*10465441SEvalZero #define S_Config1IA 16 /* Icache associativity - 1 (R) */ 1329*10465441SEvalZero #define M_Config1IA (0x7 << S_Config1IA) 1330*10465441SEvalZero #define S_Config1DS 13 /* Dcache sets per way (R) */ 1331*10465441SEvalZero #define M_Config1DS (0x7 << S_Config1DS) 1332*10465441SEvalZero #define S_Config1DL 10 /* Dcache line size (R) */ 1333*10465441SEvalZero #define M_Config1DL (0x7 << S_Config1DL) 1334*10465441SEvalZero #define S_Config1DA 7 /* Dcache associativity (R) */ 1335*10465441SEvalZero #define M_Config1DA (0x7 << S_Config1DA) 1336*10465441SEvalZero #define S_Config1C2 6 /* Coprocessor 2 present (R) */ 1337*10465441SEvalZero #define M_Config1C2 (0x1 << S_Config1C2) 1338*10465441SEvalZero #define S_Config1MD 5 /* Denotes MDMX present (R) */ 1339*10465441SEvalZero #define M_Config1MD (0x1 << S_Config1MD) 1340*10465441SEvalZero #define S_Config1PC 4 /* Denotes performance counters present (R) */ 1341*10465441SEvalZero #define M_Config1PC (0x1 << S_Config1PC) 1342*10465441SEvalZero #define S_Config1WR 3 /* Denotes watch registers present (R) */ 1343*10465441SEvalZero #define M_Config1WR (0x1 << S_Config1WR) 1344*10465441SEvalZero #define S_Config1CA 2 /* Denotes MIPS-16 present (R) */ 1345*10465441SEvalZero #define M_Config1CA (0x1 << S_Config1CA) 1346*10465441SEvalZero #define S_Config1EP 1 /* Denotes EJTAG present (R) */ 1347*10465441SEvalZero #define M_Config1EP (0x1 << S_Config1EP) 1348*10465441SEvalZero #define S_Config1FP 0 /* Denotes floating point present (R) */ 1349*10465441SEvalZero #define M_Config1FP (0x1 << S_Config1FP) 1350*10465441SEvalZero 1351*10465441SEvalZero #define M_Config10Fields 0x00000060 1352*10465441SEvalZero #define M_Config1RFields 0x7fffff9f 1353*10465441SEvalZero 1354*10465441SEvalZero /* 1355*10465441SEvalZero * The following macro generates a table that is indexed 1356*10465441SEvalZero * by the Icache or Dcache sets field in Config1 and 1357*10465441SEvalZero * contains the decoded value of sets per way 1358*10465441SEvalZero */ 1359*10465441SEvalZero #define Config1CacheSets() \ 1360*10465441SEvalZero HALF(64); \ 1361*10465441SEvalZero HALF(128); \ 1362*10465441SEvalZero HALF(256); \ 1363*10465441SEvalZero HALF(512); \ 1364*10465441SEvalZero HALF(1024); \ 1365*10465441SEvalZero HALF(2048); \ 1366*10465441SEvalZero HALF(4096); \ 1367*10465441SEvalZero HALF(8192); 1368*10465441SEvalZero 1369*10465441SEvalZero /* 1370*10465441SEvalZero * The following macro generates a table that is indexed 1371*10465441SEvalZero * by the Icache or Dcache line size field in Config1 and 1372*10465441SEvalZero * contains the decoded value of the cache line size, in bytes 1373*10465441SEvalZero */ 1374*10465441SEvalZero #define Config1CacheLineSize() \ 1375*10465441SEvalZero HALF(0); \ 1376*10465441SEvalZero HALF(4); \ 1377*10465441SEvalZero HALF(8); \ 1378*10465441SEvalZero HALF(16); \ 1379*10465441SEvalZero HALF(32); \ 1380*10465441SEvalZero HALF(64); \ 1381*10465441SEvalZero HALF(128); \ 1382*10465441SEvalZero HALF(256); 1383*10465441SEvalZero 1384*10465441SEvalZero 1385*10465441SEvalZero /* 1386*10465441SEvalZero ************************************************************************ 1387*10465441SEvalZero * C O N F I G 2 R E G I S T E R ( 1 6, SELECT 2 ) * 1388*10465441SEvalZero ************************************************************************ 1389*10465441SEvalZero * 1390*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1391*10465441SEvalZero * 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 1392*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1393*10465441SEvalZero * |M| | | | | | | | | | | | |S|T| Config1 1394*10465441SEvalZero * | | | | | | | | | | | | | |M|L| 1395*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1396*10465441SEvalZero */ 1397*10465441SEvalZero 1398*10465441SEvalZero #define C0_Config2 $16,2 1399*10465441SEvalZero #define R_C0_Config2 16 1400*10465441SEvalZero 1401*10465441SEvalZero #define S_Config2More 31 /* Additional Config registers present (R) */ 1402*10465441SEvalZero #define M_Config2More (0x1 << S_Config2More) 1403*10465441SEvalZero #define S_Config2SM 1 /* Denotes SmartMIPS ASE present (R) */ 1404*10465441SEvalZero #define M_Config2SM (0x1 << S_Config2SM) 1405*10465441SEvalZero #define S_Config2TL 0 /* Denotes Tracing Logic present (R) */ 1406*10465441SEvalZero #define M_Config2TL (0x1 << S_Config2TL) 1407*10465441SEvalZero 1408*10465441SEvalZero #define M_Config20Fields 0xfffffffc 1409*10465441SEvalZero #define M_Config2RFields 0x00000003 1410*10465441SEvalZero 1411*10465441SEvalZero /* 1412*10465441SEvalZero ************************************************************************ 1413*10465441SEvalZero * L L A D D R R E G I S T E R ( 1 7 ) * 1414*10465441SEvalZero ************************************************************************ 1415*10465441SEvalZero * 1416*10465441SEvalZero * 6 6 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1417*10465441SEvalZero * 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 1418*10465441SEvalZero * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1419*10465441SEvalZero * | // LL Physical Address | LLAddr 1420*10465441SEvalZero * +-+-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1421*10465441SEvalZero */ 1422*10465441SEvalZero 1423*10465441SEvalZero #define C0_LLAddr $17 1424*10465441SEvalZero #define R_C0_LLAddr 17 1425*10465441SEvalZero #define C0_LLADDR C0_LLAddr /* OBSOLETE - DO NOT USE IN NEW CODE */ 1426*10465441SEvalZero 1427*10465441SEvalZero #define M_LLAddr0Fields 0x00000000 1428*10465441SEvalZero #define M_LLAddrRFields 0x00000000 1429*10465441SEvalZero #define M_LLAddr0Fields64 UNS64Const(0x0000000000000000) 1430*10465441SEvalZero #define M_LLAddrRFields64 UNS64Const(0x0000000000000000) 1431*10465441SEvalZero 1432*10465441SEvalZero 1433*10465441SEvalZero /* 1434*10465441SEvalZero ************************************************************************ 1435*10465441SEvalZero * W A T C H L O R E G I S T E R ( 1 8 ) * 1436*10465441SEvalZero ************************************************************************ 1437*10465441SEvalZero * 1438*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1439*10465441SEvalZero * 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 1440*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1441*10465441SEvalZero * | // Watch Virtual Address |I|R|W| WatchLo 1442*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1443*10465441SEvalZero */ 1444*10465441SEvalZero 1445*10465441SEvalZero #define C0_WatchLo $18 1446*10465441SEvalZero #define R_C0_WatchLo 18 1447*10465441SEvalZero #define C0_WATCHLO C0_WatchLo /* OBSOLETE - DO NOT USE IN NEW CODE */ 1448*10465441SEvalZero 1449*10465441SEvalZero #define S_WatchLoVAddr 3 /* Watch virtual address (R/W) */ 1450*10465441SEvalZero #define M_WatchLoVAddr (0x1fffffff << S_WatchLoVAddr) 1451*10465441SEvalZero #define S_WatchLoI 2 /* Enable Istream watch (R/W) */ 1452*10465441SEvalZero #define M_WatchLoI (0x1 << S_WatchLoI) 1453*10465441SEvalZero #define S_WatchLoR 1 /* Enable data read watch (R/W) */ 1454*10465441SEvalZero #define M_WatchLoR (0x1 << S_WatchLoR) 1455*10465441SEvalZero #define S_WatchLoW 0 /* Enable data write watch (R/W) */ 1456*10465441SEvalZero #define M_WatchLoW (0x1 << S_WatchLoW) 1457*10465441SEvalZero 1458*10465441SEvalZero #define M_WatchLo0Fields 0x00000000 1459*10465441SEvalZero #define M_WatchLoRFields 0x00000000 1460*10465441SEvalZero #define M_WatchLo0Fields64 UNS64Const(0x0000000000000000) 1461*10465441SEvalZero #define M_WatchLoRFields64 UNS64Const(0x0000000000000000) 1462*10465441SEvalZero 1463*10465441SEvalZero #define M_WatchLoEnables (M_WatchLoI | M_WatchLoR | M_WatchLoW) 1464*10465441SEvalZero 1465*10465441SEvalZero 1466*10465441SEvalZero /* 1467*10465441SEvalZero ************************************************************************ 1468*10465441SEvalZero * W A T C H H I R E G I S T E R ( 1 9 ) * 1469*10465441SEvalZero ************************************************************************ 1470*10465441SEvalZero * 1471*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1472*10465441SEvalZero * 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 1473*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1474*10465441SEvalZero * |M|G| Rsvd | ASID | Rsvd | Mask | 0 | WatchHi 1475*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1476*10465441SEvalZero */ 1477*10465441SEvalZero 1478*10465441SEvalZero #define C0_WatchHi $19 1479*10465441SEvalZero #define R_C0_WatchHi 19 1480*10465441SEvalZero #define C0_WATCHHI C0_WatchHi /* OBSOLETE - DO NOT USE IN NEW CODE */ 1481*10465441SEvalZero 1482*10465441SEvalZero #define S_WatchHiM 31 /* Denotes additional Watch registers present (R) */ 1483*10465441SEvalZero #define M_WatchHiM (0x1 << S_WatchHiM) 1484*10465441SEvalZero #define S_WatchHiG 30 /* Enable ASID-independent Watch match (R/W) */ 1485*10465441SEvalZero #define M_WatchHiG (0x1 << S_WatchHiG) 1486*10465441SEvalZero #define S_WatchHiASID 16 /* ASID value to match (R/W) */ 1487*10465441SEvalZero #define M_WatchHiASID (0xff << S_WatchHiASID) 1488*10465441SEvalZero #define S_WatchHiMask 3 /* Address inhibit mask (R/W) */ 1489*10465441SEvalZero #define M_WatchHiMask (0x1ff << S_WatchHiMask) 1490*10465441SEvalZero 1491*10465441SEvalZero #define M_WatchHi0Fields 0x3f00f007 1492*10465441SEvalZero #define M_WatchHiRFields 0x80000000 1493*10465441SEvalZero 1494*10465441SEvalZero 1495*10465441SEvalZero /* 1496*10465441SEvalZero ************************************************************************ 1497*10465441SEvalZero * X C O N T E X T R E G I S T E R ( 2 0 ) * 1498*10465441SEvalZero ************************************************************************ 1499*10465441SEvalZero * 1500*10465441SEvalZero * 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 1501*10465441SEvalZero * 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 1502*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1503*10465441SEvalZero * | // PTEBase | R | BadVPN2<39:13> | 0 | XContext 1504*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1505*10465441SEvalZero */ 1506*10465441SEvalZero 1507*10465441SEvalZero #define C0_XContext $20 1508*10465441SEvalZero #define R_C0_XContext 20 1509*10465441SEvalZero #define C0_EXTCTXT C0_XContext /* OBSOLETE - DO NOT USE IN NEW CODE */ 1510*10465441SEvalZero 1511*10465441SEvalZero #define S_XContextBadVPN2 4 /* BadVPN2 (R) */ 1512*10465441SEvalZero #define S_XContextBadVPN S_XContextBadVPN2 1513*10465441SEvalZero 1514*10465441SEvalZero #define M_XContext0Fields 0x0000000f 1515*10465441SEvalZero 1516*10465441SEvalZero 1517*10465441SEvalZero /* 1518*10465441SEvalZero ************************************************************************ 1519*10465441SEvalZero * D E B U G R E G I S T E R ( 2 3 ) * 1520*10465441SEvalZero ************************************************************************ 1521*10465441SEvalZero * 1522*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1523*10465441SEvalZero * 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 1524*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1525*10465441SEvalZero * |D|D|N|L|D|H|C|I|M|C|D|I|D|D| | |N|S| |D|D|D|D|D|D| 1526*10465441SEvalZero * |B|M|o|S|o|a|o|B|C|a|B|E|D|D|EJTAG|DExcCode |o|S| |I|I|D|D|B|S| 1527*10465441SEvalZero * |D| |D|N|z|l|u|u|h|c|u|X|B|B| ver | |S|t| |N|B|B|B|p|S| 1528*10465441SEvalZero * | | |C|M|e|t|n|s|e|h|s|I|S|L| | |S| | 0 |T| |S|L| | | Debug 1529*10465441SEvalZero * | | |R| | | |t|E|c|e|E| |I|I| | |t| | | | | | | | | 1530*10465441SEvalZero * | | | | | | |D|P|k|E|P| |m|m| | | | | | | | | | | | 1531*10465441SEvalZero * | | | | | | |M| |P|P| | |p|p| | | | | | | | | | | | 1532*10465441SEvalZero * | | | | | | | | | | | | |r|r| | | | | | | | | | | | 1533*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1534*10465441SEvalZero */ 1535*10465441SEvalZero 1536*10465441SEvalZero #define C0_Debug $23 /* EJTAG */ 1537*10465441SEvalZero #define R_C0_Debug 23 1538*10465441SEvalZero 1539*10465441SEvalZero #define S_DebugDBD 31 /* Debug branch delay (R) */ 1540*10465441SEvalZero #define M_DebugDBD (0x1 << S_DebugDBD) 1541*10465441SEvalZero #define S_DebugDM 30 /* Debug mode (R) */ 1542*10465441SEvalZero #define M_DebugDM (0x1 << S_DebugDM) 1543*10465441SEvalZero #define S_DebugNoDCR 29 /* No debug control register present (R) */ 1544*10465441SEvalZero #define M_DebugNoDCR (0x1 << S_DebugNoDCR) 1545*10465441SEvalZero #define S_DebugLSNM 28 /* Load/Store Normal Memory (R/W) */ 1546*10465441SEvalZero #define M_DebugLSNM (0x1 << S_DebugLSNM) 1547*10465441SEvalZero #define S_DebugDoze 27 /* Doze (R) */ 1548*10465441SEvalZero #define M_DebugDoze (0x1 << S_DebugDoze) 1549*10465441SEvalZero #define S_DebugHalt 26 /* Halt (R) */ 1550*10465441SEvalZero #define M_DebugHalt (0x1 << S_DebugHalt) 1551*10465441SEvalZero #define S_DebugCountDM 25 /* Count register behavior in debug mode (R/W) */ 1552*10465441SEvalZero #define M_DebugCountDM (0x1 << S_DebugCountDM) 1553*10465441SEvalZero #define S_DebugIBusEP 24 /* Imprecise Instn Bus Error Pending (R/W) */ 1554*10465441SEvalZero #define M_DebugIBusEP (0x1 << S_DebugIBusEP) 1555*10465441SEvalZero #define S_DebugMCheckP 23 /* Imprecise Machine Check Pending (R/W) */ 1556*10465441SEvalZero #define M_DebugMCheckP (0x1 << S_DebugMCheckP) 1557*10465441SEvalZero #define S_DebugCacheEP 22 /* Imprecise Cache Error Pending (R/W) */ 1558*10465441SEvalZero #define M_DebugCacheEP (0x1 << S_DebugCacheEP) 1559*10465441SEvalZero #define S_DebugDBusEP 21 /* Imprecise Data Bus Error Pending (R/W) */ 1560*10465441SEvalZero #define M_DebugDBusEP (0x1 << S_DebugDBusEP) 1561*10465441SEvalZero #define S_DebugIEXI 20 /* Imprecise Exception Inhibit (R/W) */ 1562*10465441SEvalZero #define M_DebugIEXI (0x1 << S_DebugIEXI) 1563*10465441SEvalZero #define S_DebugDDBSImpr 19 /* Debug data break store imprecise (R) */ 1564*10465441SEvalZero #define M_DebugDDBSImpr (0x1 << S_DebugDDBSImpr) 1565*10465441SEvalZero #define S_DebugDDBLImpr 18 /* Debug data break load imprecise (R) */ 1566*10465441SEvalZero #define M_DebugDDBLImpr (0x1 << S_DebugDDBLImpr) 1567*10465441SEvalZero #define S_DebugEJTAGver 15 /* EJTAG version number (R) */ 1568*10465441SEvalZero #define M_DebugEJTAGver (0x7 << S_DebugEJTAGver) 1569*10465441SEvalZero #define S_DebugDExcCode 10 /* Debug exception code (R) */ 1570*10465441SEvalZero #define M_DebugDExcCode (0x1f << S_DebugDExcCode) 1571*10465441SEvalZero #define S_DebugNoSSt 9 /* No single step implemented (R) */ 1572*10465441SEvalZero #define M_DebugNoSSt (0x1 << S_DebugNoSSt) 1573*10465441SEvalZero #define S_DebugSSt 8 /* Single step enable (R/W) */ 1574*10465441SEvalZero #define M_DebugSSt (0x1 << S_DebugSSt) 1575*10465441SEvalZero #define S_DebugDINT 5 /* Debug interrupt (R) */ 1576*10465441SEvalZero #define M_DebugDINT (0x1 << S_DebugDINT) 1577*10465441SEvalZero #define S_DebugDIB 4 /* Debug instruction break (R) */ 1578*10465441SEvalZero #define M_DebugDIB (0x1 << S_DebugDIB) 1579*10465441SEvalZero #define S_DebugDDBS 3 /* Debug data break store (R) */ 1580*10465441SEvalZero #define M_DebugDDBS (0x1 << S_DebugDDBS) 1581*10465441SEvalZero #define S_DebugDDBL 2 /* Debug data break load (R) */ 1582*10465441SEvalZero #define M_DebugDDBL (0x1 << S_DebugDDBL) 1583*10465441SEvalZero #define S_DebugDBp 1 /* Debug breakpoint (R) */ 1584*10465441SEvalZero #define M_DebugDBp (0x1 << S_DebugDBp) 1585*10465441SEvalZero #define S_DebugDSS 0 /* Debug single step (R) */ 1586*10465441SEvalZero #define M_DebugDSS (0x1 << S_DebugDSS) 1587*10465441SEvalZero 1588*10465441SEvalZero #define M_Debug0Fields 0x01f000c0 1589*10465441SEvalZero #define M_DebugRFields 0xec0ffe3f 1590*10465441SEvalZero 1591*10465441SEvalZero 1592*10465441SEvalZero /* 1593*10465441SEvalZero ************************************************************************ 1594*10465441SEvalZero * D E P C R E G I S T E R ( 2 4 ) * 1595*10465441SEvalZero ************************************************************************ 1596*10465441SEvalZero * 1597*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1598*10465441SEvalZero * 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 1599*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1600*10465441SEvalZero * | // EJTAG Debug Exception PC | DEPC 1601*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1602*10465441SEvalZero */ 1603*10465441SEvalZero 1604*10465441SEvalZero 1605*10465441SEvalZero #define C0_DEPC $24 1606*10465441SEvalZero #define R_C0_DEPC 24 1607*10465441SEvalZero 1608*10465441SEvalZero #define M_DEEPC0Fields 0x00000000 1609*10465441SEvalZero #define M_DEEPCRFields 0x00000000 1610*10465441SEvalZero #define M_DEEPC0Fields64 UNS64Const(0x0000000000000000) 1611*10465441SEvalZero #define M_DEEPCRFields64 UNS64Const(0x0000000000000000) 1612*10465441SEvalZero 1613*10465441SEvalZero 1614*10465441SEvalZero /* 1615*10465441SEvalZero ************************************************************************ 1616*10465441SEvalZero * P E R F C N T R E G I S T E R ( 2 5 ) * 1617*10465441SEvalZero ************************************************************************ 1618*10465441SEvalZero * 1619*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1620*10465441SEvalZero * 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 1621*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1622*10465441SEvalZero * | | | |I| | | |E| 1623*10465441SEvalZero * |M| 0 | Event |E|U|S|K|X| PerfCnt 1624*10465441SEvalZero * | | | | | | | |L| 1625*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1626*10465441SEvalZero * 1627*10465441SEvalZero * 1628*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1629*10465441SEvalZero * 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 1630*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1631*10465441SEvalZero * | Event Count | PerfCnt 1632*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1633*10465441SEvalZero */ 1634*10465441SEvalZero 1635*10465441SEvalZero #define C0_PerfCnt $25 1636*10465441SEvalZero #define R_C0_PerfCnt 25 1637*10465441SEvalZero #define C0_PRFCNT0 C0_PerfCnt /* OBSOLETE - DO NOT USE IN NEW CODE */ 1638*10465441SEvalZero #define C0_PRFCNT1 C0_PerfCnt /* OBSOLETE - DO NOT USE IN NEW CODE */ 1639*10465441SEvalZero 1640*10465441SEvalZero #define S_PerfCntM 31 /* More performance counters exist (R) */ 1641*10465441SEvalZero #define M_PerfCntM (1 << S_PerfCntM) 1642*10465441SEvalZero #define S_PerfCntEvent 5 /* Enabled event (R/W) */ 1643*10465441SEvalZero #define M_PerfCntEvent (0x3f << S_PerfCntEvent) 1644*10465441SEvalZero #define S_PerfCntIE 4 /* Interrupt Enable (R/W) */ 1645*10465441SEvalZero #define M_PerfCntIE (1 << S_PerfCntIE) 1646*10465441SEvalZero #define S_PerfCntU 3 /* Enable counting in User Mode (R/W) */ 1647*10465441SEvalZero #define M_PerfCntU (1 << S_PerfCntU) 1648*10465441SEvalZero #define S_PerfCntS 2 /* Enable counting in Supervisor Mode (R/W) */ 1649*10465441SEvalZero #define M_PerfCntS (1 << S_PerfCntS) 1650*10465441SEvalZero #define S_PerfCntK 1 /* Enable counting in Kernel Mode (R/W) */ 1651*10465441SEvalZero #define M_PerfCntK (1 << S_PerfCntK) 1652*10465441SEvalZero #define S_PerfCntEXL 0 /* Enable counting while EXL==1 (R/W) */ 1653*10465441SEvalZero #define M_PerfCntEXL (1 << S_PerfCntEXL) 1654*10465441SEvalZero 1655*10465441SEvalZero #define M_PerfCnt0Fields 0x7ffff800 1656*10465441SEvalZero #define M_PerfCntRFields 0x80000000 1657*10465441SEvalZero 1658*10465441SEvalZero 1659*10465441SEvalZero /* 1660*10465441SEvalZero ************************************************************************ 1661*10465441SEvalZero * E R R C T L R E G I S T E R ( 2 6 ) * 1662*10465441SEvalZero ************************************************************************ 1663*10465441SEvalZero * 1664*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1665*10465441SEvalZero * 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 1666*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1667*10465441SEvalZero * | Error Control | ErrCtl 1668*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1669*10465441SEvalZero */ 1670*10465441SEvalZero 1671*10465441SEvalZero #define C0_ErrCtl $26 1672*10465441SEvalZero #define R_C0_ErrCtl 26 1673*10465441SEvalZero #define C0_ECC $26 /* OBSOLETE - DO NOT USE IN NEW CODE */ 1674*10465441SEvalZero #define R_C0_ECC 26 /* OBSOLETE - DO NOT USE IN NEW CODE */ 1675*10465441SEvalZero 1676*10465441SEvalZero #define M_ErrCtl0Fields 0x00000000 1677*10465441SEvalZero #define M_ErrCtlRFields 0x00000000 1678*10465441SEvalZero 1679*10465441SEvalZero 1680*10465441SEvalZero /* 1681*10465441SEvalZero ************************************************************************ 1682*10465441SEvalZero * C A C H E E R R R E G I S T E R ( 2 7 ) * CacheErr 1683*10465441SEvalZero ************************************************************************ 1684*10465441SEvalZero * 1685*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1686*10465441SEvalZero * 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 1687*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1688*10465441SEvalZero * | Cache Error Control | CacheErr 1689*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1690*10465441SEvalZero */ 1691*10465441SEvalZero 1692*10465441SEvalZero #define C0_CacheErr $27 1693*10465441SEvalZero #define R_C0_CacheErr 27 1694*10465441SEvalZero #define C0_CACHE_ERR C0_CacheErr /* OBSOLETE - DO NOT USE IN NEW CODE */ 1695*10465441SEvalZero 1696*10465441SEvalZero #define M_CacheErr0Fields 0x00000000 1697*10465441SEvalZero #define M_CachErrRFields 0x00000000 1698*10465441SEvalZero 1699*10465441SEvalZero 1700*10465441SEvalZero /* 1701*10465441SEvalZero ************************************************************************ 1702*10465441SEvalZero * T A G L O R E G I S T E R ( 2 8 ) * TagLo 1703*10465441SEvalZero ************************************************************************ 1704*10465441SEvalZero * 1705*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1706*10465441SEvalZero * 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 1707*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1708*10465441SEvalZero * | TagLo | TagLo 1709*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1710*10465441SEvalZero */ 1711*10465441SEvalZero 1712*10465441SEvalZero #define C0_TagLo $28 1713*10465441SEvalZero #define R_C0_TagLo 28 1714*10465441SEvalZero #define C0_TAGLO C0_TagLo /* OBSOLETE - DO NOT USE IN NEW CODE */ 1715*10465441SEvalZero 1716*10465441SEvalZero /* 1717*10465441SEvalZero * Some implementations use separate TagLo registers for the 1718*10465441SEvalZero * instruction and data caches. In those cases, the following 1719*10465441SEvalZero * definitions can be used in relevant code 1720*10465441SEvalZero */ 1721*10465441SEvalZero 1722*10465441SEvalZero #define C0_ITagLo $28,0 1723*10465441SEvalZero #define C0_DTagLo $28,2 1724*10465441SEvalZero 1725*10465441SEvalZero #define M_TagLo0Fields 0x00000000 1726*10465441SEvalZero #define M_TagLoRFields 0x00000000 1727*10465441SEvalZero 1728*10465441SEvalZero 1729*10465441SEvalZero /* 1730*10465441SEvalZero ************************************************************************ 1731*10465441SEvalZero * D A T A L O R E G I S T E R ( 2 8, SELECT 1 ) * DataLo 1732*10465441SEvalZero ************************************************************************ 1733*10465441SEvalZero * 1734*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1735*10465441SEvalZero * 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 1736*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1737*10465441SEvalZero * | DataLo | DataLo 1738*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1739*10465441SEvalZero */ 1740*10465441SEvalZero 1741*10465441SEvalZero #define C0_DataLo $28,1 1742*10465441SEvalZero #define R_C0_DataLo 28 1743*10465441SEvalZero 1744*10465441SEvalZero /* 1745*10465441SEvalZero * Some implementations use separate DataLo registers for the 1746*10465441SEvalZero * instruction and data caches. In those cases, the following 1747*10465441SEvalZero * definitions can be used in relevant code 1748*10465441SEvalZero */ 1749*10465441SEvalZero 1750*10465441SEvalZero #define C0_IDataLo $28,1 1751*10465441SEvalZero #define C0_DDataLo $28,3 1752*10465441SEvalZero 1753*10465441SEvalZero #define M_DataLo0Fields 0x00000000 1754*10465441SEvalZero #define M_DataLoRFields 0xffffffff 1755*10465441SEvalZero 1756*10465441SEvalZero 1757*10465441SEvalZero /* 1758*10465441SEvalZero ************************************************************************ 1759*10465441SEvalZero * T A G H I R E G I S T E R ( 2 9 ) * TagHi 1760*10465441SEvalZero ************************************************************************ 1761*10465441SEvalZero * 1762*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1763*10465441SEvalZero * 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 1764*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1765*10465441SEvalZero * | TagHi | TagHi 1766*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1767*10465441SEvalZero */ 1768*10465441SEvalZero 1769*10465441SEvalZero #define C0_TagHi $29 1770*10465441SEvalZero #define R_C0_TagHi 29 1771*10465441SEvalZero #define C0_TAGHI C0_TagHi /* OBSOLETE - DO NOT USE IN NEW CODE */ 1772*10465441SEvalZero 1773*10465441SEvalZero /* 1774*10465441SEvalZero * Some implementations use separate TagHi registers for the 1775*10465441SEvalZero * instruction and data caches. In those cases, the following 1776*10465441SEvalZero * definitions can be used in relevant code 1777*10465441SEvalZero */ 1778*10465441SEvalZero 1779*10465441SEvalZero #define C0_ITagHi $29,0 1780*10465441SEvalZero #define C0_DTagHi $29,2 1781*10465441SEvalZero 1782*10465441SEvalZero #define M_TagHi0Fields 0x00000000 1783*10465441SEvalZero #define M_TagHiRFields 0x00000000 1784*10465441SEvalZero 1785*10465441SEvalZero 1786*10465441SEvalZero /* 1787*10465441SEvalZero ************************************************************************ 1788*10465441SEvalZero * D A T A H I R E G I S T E R ( 2 9, SELECT 1 ) * DataHi 1789*10465441SEvalZero ************************************************************************ 1790*10465441SEvalZero * 1791*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1792*10465441SEvalZero * 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 1793*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1794*10465441SEvalZero * | DataHi | DataHi 1795*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1796*10465441SEvalZero */ 1797*10465441SEvalZero 1798*10465441SEvalZero #define C0_DataHi $29,1 1799*10465441SEvalZero #define R_C0_DataHi 29 1800*10465441SEvalZero 1801*10465441SEvalZero /* 1802*10465441SEvalZero * Some implementations use separate DataHi registers for the 1803*10465441SEvalZero * instruction and data caches. In those cases, the following 1804*10465441SEvalZero * definitions can be used in relevant code 1805*10465441SEvalZero */ 1806*10465441SEvalZero 1807*10465441SEvalZero #define C0_IDataHi $29,1 1808*10465441SEvalZero #define C0_DDataHi $29,3 1809*10465441SEvalZero 1810*10465441SEvalZero #define M_DataHi0Fields 0x00000000 1811*10465441SEvalZero #define M_DataHiRFields 0xffffffff 1812*10465441SEvalZero 1813*10465441SEvalZero 1814*10465441SEvalZero /* 1815*10465441SEvalZero ************************************************************************ 1816*10465441SEvalZero * E R R O R E P C R E G I S T E R ( 3 0 ) * 1817*10465441SEvalZero ************************************************************************ 1818*10465441SEvalZero * 1819*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1820*10465441SEvalZero * 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 1821*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1822*10465441SEvalZero * | // Error PC | ErrorEPC 1823*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1824*10465441SEvalZero */ 1825*10465441SEvalZero 1826*10465441SEvalZero #define C0_ErrorEPC $30 1827*10465441SEvalZero #define R_C0_ErrorEPC 30 1828*10465441SEvalZero #define C0_ERROR_EPC C0_ErrorEPC /* OBSOLETE - DO NOT USE IN NEW CODE */ 1829*10465441SEvalZero 1830*10465441SEvalZero #define M_ErrorEPC0Fields 0x00000000 1831*10465441SEvalZero #define M_ErrorEPCRFields 0x00000000 1832*10465441SEvalZero #define M_ErrorEPC0Fields64 UNS64Const(0x0000000000000000) 1833*10465441SEvalZero #define M_ErrorEPCRFields64 UNS64Const(0x0000000000000000) 1834*10465441SEvalZero 1835*10465441SEvalZero 1836*10465441SEvalZero /* 1837*10465441SEvalZero ************************************************************************ 1838*10465441SEvalZero * D E S A V E R E G I S T E R ( 3 1 ) * 1839*10465441SEvalZero ************************************************************************ 1840*10465441SEvalZero * 1841*10465441SEvalZero * 6 // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1842*10465441SEvalZero * 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 1843*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1844*10465441SEvalZero * | // EJTAG Register Save Value | DESAVE 1845*10465441SEvalZero * +-+//+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1846*10465441SEvalZero */ 1847*10465441SEvalZero 1848*10465441SEvalZero #define C0_DESAVE $31 1849*10465441SEvalZero #define R_C0_DESAVE 31 1850*10465441SEvalZero 1851*10465441SEvalZero #define M_DESAVE0Fields 0x00000000 1852*10465441SEvalZero #define M_DESAVERFields 0x00000000 1853*10465441SEvalZero #define M_DESAVE0Fields64 UNS64Const(0x0000000000000000) 1854*10465441SEvalZero #define M_DESAVERFields64 UNS64Const(0x0000000000000000) 1855*10465441SEvalZero 1856*10465441SEvalZero 1857*10465441SEvalZero /* 1858*10465441SEvalZero ************************************************************************* 1859*10465441SEvalZero * C P 1 R E G I S T E R D E F I N I T I O N S * 1860*10465441SEvalZero ************************************************************************* 1861*10465441SEvalZero */ 1862*10465441SEvalZero 1863*10465441SEvalZero 1864*10465441SEvalZero /* 1865*10465441SEvalZero ************************************************************************* 1866*10465441SEvalZero * H A R D W A R E F P R N A M E S * 1867*10465441SEvalZero ************************************************************************* 1868*10465441SEvalZero */ 1869*10465441SEvalZero 1870*10465441SEvalZero #define fp0 $f0 1871*10465441SEvalZero #define fp1 $f1 1872*10465441SEvalZero #define fp2 $f2 1873*10465441SEvalZero #define fp3 $f3 1874*10465441SEvalZero #define fp4 $f4 1875*10465441SEvalZero #define fp5 $f5 1876*10465441SEvalZero #define fp6 $f6 1877*10465441SEvalZero #define fp7 $f7 1878*10465441SEvalZero #define fp8 $f8 1879*10465441SEvalZero #define fp9 $f9 1880*10465441SEvalZero #define fp10 $f10 1881*10465441SEvalZero #define fp11 $f11 1882*10465441SEvalZero #define fp12 $f12 1883*10465441SEvalZero #define fp13 $f13 1884*10465441SEvalZero #define fp14 $f14 1885*10465441SEvalZero #define fp15 $f15 1886*10465441SEvalZero #define fp16 $f16 1887*10465441SEvalZero #define fp17 $f17 1888*10465441SEvalZero #define fp18 $f18 1889*10465441SEvalZero #define fp19 $f19 1890*10465441SEvalZero #define fp20 $f20 1891*10465441SEvalZero #define fp21 $f21 1892*10465441SEvalZero #define fp22 $f22 1893*10465441SEvalZero #define fp23 $f23 1894*10465441SEvalZero #define fp24 $f24 1895*10465441SEvalZero #define fp25 $f25 1896*10465441SEvalZero #define fp26 $f26 1897*10465441SEvalZero #define fp27 $f27 1898*10465441SEvalZero #define fp28 $f28 1899*10465441SEvalZero #define fp29 $f29 1900*10465441SEvalZero #define fp30 $f30 1901*10465441SEvalZero #define fp31 $f31 1902*10465441SEvalZero 1903*10465441SEvalZero /* 1904*10465441SEvalZero * The following definitions are used to convert an FPR name 1905*10465441SEvalZero * into the corresponding even or odd name, respectively. 1906*10465441SEvalZero * This is used in macro substitution in the AVPs. 1907*10465441SEvalZero */ 1908*10465441SEvalZero 1909*10465441SEvalZero #define fp1_even $f0 1910*10465441SEvalZero #define fp3_even $f2 1911*10465441SEvalZero #define fp5_even $f4 1912*10465441SEvalZero #define fp7_even $f6 1913*10465441SEvalZero #define fp9_even $f8 1914*10465441SEvalZero #define fp11_even $f10 1915*10465441SEvalZero #define fp13_even $f12 1916*10465441SEvalZero #define fp15_even $f14 1917*10465441SEvalZero #define fp17_even $f16 1918*10465441SEvalZero #define fp19_even $f18 1919*10465441SEvalZero #define fp21_even $f20 1920*10465441SEvalZero #define fp23_even $f22 1921*10465441SEvalZero #define fp25_even $f24 1922*10465441SEvalZero #define fp27_even $f26 1923*10465441SEvalZero #define fp29_even $f28 1924*10465441SEvalZero #define fp31_even $f30 1925*10465441SEvalZero 1926*10465441SEvalZero #define fp0_odd $f1 1927*10465441SEvalZero #define fp2_odd $f3 1928*10465441SEvalZero #define fp4_odd $f5 1929*10465441SEvalZero #define fp6_odd $f7 1930*10465441SEvalZero #define fp8_odd $f9 1931*10465441SEvalZero #define fp10_odd $f11 1932*10465441SEvalZero #define fp12_odd $f13 1933*10465441SEvalZero #define fp14_odd $f15 1934*10465441SEvalZero #define fp16_odd $f17 1935*10465441SEvalZero #define fp18_odd $f19 1936*10465441SEvalZero #define fp20_odd $f21 1937*10465441SEvalZero #define fp22_odd $f23 1938*10465441SEvalZero #define fp24_odd $f25 1939*10465441SEvalZero #define fp26_odd $f27 1940*10465441SEvalZero #define fp28_odd $f29 1941*10465441SEvalZero #define fp30_odd $f31 1942*10465441SEvalZero 1943*10465441SEvalZero 1944*10465441SEvalZero /* 1945*10465441SEvalZero ************************************************************************* 1946*10465441SEvalZero * H A R D W A R E F P R I N D I C E S * 1947*10465441SEvalZero ************************************************************************* 1948*10465441SEvalZero * 1949*10465441SEvalZero * These definitions provide the index (number) of the FPR, as opposed 1950*10465441SEvalZero * to the assembler register name ($n). 1951*10465441SEvalZero */ 1952*10465441SEvalZero 1953*10465441SEvalZero #define R_fp0 0 1954*10465441SEvalZero #define R_fp1 1 1955*10465441SEvalZero #define R_fp2 2 1956*10465441SEvalZero #define R_fp3 3 1957*10465441SEvalZero #define R_fp4 4 1958*10465441SEvalZero #define R_fp5 5 1959*10465441SEvalZero #define R_fp6 6 1960*10465441SEvalZero #define R_fp7 7 1961*10465441SEvalZero #define R_fp8 8 1962*10465441SEvalZero #define R_fp9 9 1963*10465441SEvalZero #define R_fp10 10 1964*10465441SEvalZero #define R_fp11 11 1965*10465441SEvalZero #define R_fp12 12 1966*10465441SEvalZero #define R_fp13 13 1967*10465441SEvalZero #define R_fp14 14 1968*10465441SEvalZero #define R_fp15 15 1969*10465441SEvalZero #define R_fp16 16 1970*10465441SEvalZero #define R_fp17 17 1971*10465441SEvalZero #define R_fp18 18 1972*10465441SEvalZero #define R_fp19 19 1973*10465441SEvalZero #define R_fp20 20 1974*10465441SEvalZero #define R_fp21 21 1975*10465441SEvalZero #define R_fp22 22 1976*10465441SEvalZero #define R_fp23 23 1977*10465441SEvalZero #define R_fp24 24 1978*10465441SEvalZero #define R_fp25 25 1979*10465441SEvalZero #define R_fp26 26 1980*10465441SEvalZero #define R_fp27 27 1981*10465441SEvalZero #define R_fp28 28 1982*10465441SEvalZero #define R_fp29 29 1983*10465441SEvalZero #define R_fp30 30 1984*10465441SEvalZero #define R_fp31 31 1985*10465441SEvalZero 1986*10465441SEvalZero 1987*10465441SEvalZero /* 1988*10465441SEvalZero ************************************************************************* 1989*10465441SEvalZero * H A R D W A R E F C R N A M E S * 1990*10465441SEvalZero ************************************************************************* 1991*10465441SEvalZero */ 1992*10465441SEvalZero 1993*10465441SEvalZero #define fc0 $0 1994*10465441SEvalZero #define fc25 $25 1995*10465441SEvalZero #define fc26 $26 1996*10465441SEvalZero #define fc28 $28 1997*10465441SEvalZero #define fc31 $31 1998*10465441SEvalZero 1999*10465441SEvalZero 2000*10465441SEvalZero /* 2001*10465441SEvalZero ************************************************************************* 2002*10465441SEvalZero * H A R D W A R E F C R I N D I C E S * 2003*10465441SEvalZero ************************************************************************* 2004*10465441SEvalZero * 2005*10465441SEvalZero * These definitions provide the index (number) of the FCR, as opposed 2006*10465441SEvalZero * to the assembler register name ($n). 2007*10465441SEvalZero */ 2008*10465441SEvalZero 2009*10465441SEvalZero #define R_fc0 0 2010*10465441SEvalZero #define R_fc25 25 2011*10465441SEvalZero #define R_fc26 26 2012*10465441SEvalZero #define R_fc28 28 2013*10465441SEvalZero #define R_fc31 31 2014*10465441SEvalZero 2015*10465441SEvalZero 2016*10465441SEvalZero /* 2017*10465441SEvalZero ************************************************************************* 2018*10465441SEvalZero * H A R D W A R E F C C N A M E S * 2019*10465441SEvalZero ************************************************************************* 2020*10465441SEvalZero */ 2021*10465441SEvalZero 2022*10465441SEvalZero #define cc0 $fcc0 2023*10465441SEvalZero #define cc1 $fcc1 2024*10465441SEvalZero #define cc2 $fcc2 2025*10465441SEvalZero #define cc3 $fcc3 2026*10465441SEvalZero #define cc4 $fcc4 2027*10465441SEvalZero #define cc5 $fcc5 2028*10465441SEvalZero #define cc6 $fcc6 2029*10465441SEvalZero #define cc7 $fcc7 2030*10465441SEvalZero 2031*10465441SEvalZero 2032*10465441SEvalZero /* 2033*10465441SEvalZero ************************************************************************* 2034*10465441SEvalZero * H A R D W A R E F C C I N D I C E S * 2035*10465441SEvalZero ************************************************************************* 2036*10465441SEvalZero * 2037*10465441SEvalZero * These definitions provide the index (number) of the CC, as opposed 2038*10465441SEvalZero * to the assembler register name ($n). 2039*10465441SEvalZero */ 2040*10465441SEvalZero 2041*10465441SEvalZero #define R_cc0 0 2042*10465441SEvalZero #define R_cc1 1 2043*10465441SEvalZero #define R_cc2 2 2044*10465441SEvalZero #define R_cc3 3 2045*10465441SEvalZero #define R_cc4 4 2046*10465441SEvalZero #define R_cc5 5 2047*10465441SEvalZero #define R_cc6 6 2048*10465441SEvalZero #define R_cc7 7 2049*10465441SEvalZero 2050*10465441SEvalZero 2051*10465441SEvalZero /* 2052*10465441SEvalZero ************************************************************************ 2053*10465441SEvalZero * I M P L E M E N T A T I O N R E G I S T E R * 2054*10465441SEvalZero ************************************************************************ 2055*10465441SEvalZero * 2056*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2057*10465441SEvalZero * 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 2058*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2059*10465441SEvalZero * |Reserved for Additional|3|P|D|S| Implementation| Revision | FIR 2060*10465441SEvalZero * | Configuration Bits |D|S| | | | | 2061*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2062*10465441SEvalZero */ 2063*10465441SEvalZero 2064*10465441SEvalZero #define C1_FIR $0 2065*10465441SEvalZero #define R_C1_FIR 0 2066*10465441SEvalZero 2067*10465441SEvalZero #define S_FIRConfigS 16 2068*10465441SEvalZero #define M_FIRConfigS (0x1 << S_FIRConfigS) 2069*10465441SEvalZero #define S_FIRConfigD 17 2070*10465441SEvalZero #define M_FIRConfigD (0x1 << S_FIRConfigD) 2071*10465441SEvalZero #define S_FIRConfigPS 18 2072*10465441SEvalZero #define M_FIRConfigPS (0x1 << S_FIRConfigPS) 2073*10465441SEvalZero #define S_FIRConfig3D 19 2074*10465441SEvalZero #define M_FIRConfig3D (0x1 << S_FIRConfig3D) 2075*10465441SEvalZero #define M_FIRConfigAll (M_FIRConfigS|M_FIRConfigD|M_FIRConfigPS|M_FIRConfig3D) 2076*10465441SEvalZero 2077*10465441SEvalZero #define S_FIRImp 8 2078*10465441SEvalZero #define M_FIRImp (0xff << S_FIRImp) 2079*10465441SEvalZero 2080*10465441SEvalZero #define S_FIRRev 0 2081*10465441SEvalZero #define M_FIRRev (0xff << S_FIRRev) 2082*10465441SEvalZero 2083*10465441SEvalZero #define M_FIR0Fields 0xfff00000 2084*10465441SEvalZero #define M_FIRRFields 0x000fffff 2085*10465441SEvalZero 2086*10465441SEvalZero /* 2087*10465441SEvalZero ************************************************************************ 2088*10465441SEvalZero * C O N D I T I O N C O D E S R E G I S T E R * 2089*10465441SEvalZero ************************************************************************ 2090*10465441SEvalZero * 2091*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2092*10465441SEvalZero * 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 2093*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2094*10465441SEvalZero * | 0 | CC | FCCR 2095*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2096*10465441SEvalZero */ 2097*10465441SEvalZero 2098*10465441SEvalZero #define C1_FCCR $25 2099*10465441SEvalZero #define R_C1_FCCR 25 2100*10465441SEvalZero 2101*10465441SEvalZero #define S_FCCRCC 0 2102*10465441SEvalZero #define M_FCCRCC (0xff << S_FCCRCC) 2103*10465441SEvalZero #define S_FCCRCC7 7 2104*10465441SEvalZero #define M_FCCRCC7 (0x1 << S_FCCRCC7) 2105*10465441SEvalZero #define S_FCCRCC6 6 2106*10465441SEvalZero #define M_FCCRCC6 (0x1 << S_FCCRCC6) 2107*10465441SEvalZero #define S_FCCRCC5 5 2108*10465441SEvalZero #define M_FCCRCC5 (0x1 << S_FCCRCC5) 2109*10465441SEvalZero #define S_FCCRCC4 4 2110*10465441SEvalZero #define M_FCCRCC4 (0x1 << S_FCCRCC4) 2111*10465441SEvalZero #define S_FCCRCC3 3 2112*10465441SEvalZero #define M_FCCRCC3 (0x1 << S_FCCRCC3) 2113*10465441SEvalZero #define S_FCCRCC2 2 2114*10465441SEvalZero #define M_FCCRCC2 (0x1 << S_FCCRCC2) 2115*10465441SEvalZero #define S_FCCRCC1 1 2116*10465441SEvalZero #define M_FCCRCC1 (0x1 << S_FCCRCC1) 2117*10465441SEvalZero #define S_FCCRCC0 0 2118*10465441SEvalZero #define M_FCCRCC0 (0x1 << S_FCCRCC0) 2119*10465441SEvalZero 2120*10465441SEvalZero #define M_FCCR0Fields 0xffffff00 2121*10465441SEvalZero #define M_FCCRRFields 0x000000ff 2122*10465441SEvalZero 2123*10465441SEvalZero 2124*10465441SEvalZero /* 2125*10465441SEvalZero ************************************************************************ 2126*10465441SEvalZero * E X C E P T I O N S R E G I S T E R * 2127*10465441SEvalZero ************************************************************************ 2128*10465441SEvalZero * 2129*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2130*10465441SEvalZero * 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 2131*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2132*10465441SEvalZero * | 0 | Cause | 0 | Flags | 0 | FEXR 2133*10465441SEvalZero * | |E|V|Z|O|U|I| |V|Z|O|U|I| | 2134*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2135*10465441SEvalZero */ 2136*10465441SEvalZero 2137*10465441SEvalZero #define C1_FEXR $26 2138*10465441SEvalZero #define R_C1_FEXR 26 2139*10465441SEvalZero 2140*10465441SEvalZero #define S_FEXRExc 12 2141*10465441SEvalZero #define M_FEXRExc (0x3f << S_FEXRExc) 2142*10465441SEvalZero #define S_FEXRExcE 17 2143*10465441SEvalZero #define M_FEXRExcE (0x1 << S_FEXRExcE) 2144*10465441SEvalZero #define S_FEXRExcV 16 2145*10465441SEvalZero #define M_FEXRExcV (0x1 << S_FEXRExcV) 2146*10465441SEvalZero #define S_FEXRExcZ 15 2147*10465441SEvalZero #define M_FEXRExcZ (0x1 << S_FEXRExcZ) 2148*10465441SEvalZero #define S_FEXRExcO 14 2149*10465441SEvalZero #define M_FEXRExcO (0x1 << S_FEXRExcO) 2150*10465441SEvalZero #define S_FEXRExcU 13 2151*10465441SEvalZero #define M_FEXRExcU (0x1 << S_FEXRExcU) 2152*10465441SEvalZero #define S_FEXRExcI 12 2153*10465441SEvalZero #define M_FEXRExcI (0x1 << S_FEXRExcI) 2154*10465441SEvalZero 2155*10465441SEvalZero #define S_FEXRFlg 2 2156*10465441SEvalZero #define M_FEXRFlg (0x1f << S_FEXRFlg) 2157*10465441SEvalZero #define S_FEXRFlgV 6 2158*10465441SEvalZero #define M_FEXRFlgV (0x1 << S_FEXRFlgV) 2159*10465441SEvalZero #define S_FEXRFlgZ 5 2160*10465441SEvalZero #define M_FEXRFlgZ (0x1 << S_FEXRFlgZ) 2161*10465441SEvalZero #define S_FEXRFlgO 4 2162*10465441SEvalZero #define M_FEXRFlgO (0x1 << S_FEXRFlgO) 2163*10465441SEvalZero #define S_FEXRFlgU 3 2164*10465441SEvalZero #define M_FEXRFlgU (0x1 << S_FEXRFlgU) 2165*10465441SEvalZero #define S_FEXRFlgI 2 2166*10465441SEvalZero #define M_FEXRFlgI (0x1 << S_FEXRFlgI) 2167*10465441SEvalZero 2168*10465441SEvalZero #define M_FEXR0Fields 0xfffc0f83 2169*10465441SEvalZero #define M_FEXRRFields 0x00000000 2170*10465441SEvalZero 2171*10465441SEvalZero 2172*10465441SEvalZero /* 2173*10465441SEvalZero ************************************************************************ 2174*10465441SEvalZero * E N A B L E S R E G I S T E R * 2175*10465441SEvalZero ************************************************************************ 2176*10465441SEvalZero * 2177*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2178*10465441SEvalZero * 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 2179*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2180*10465441SEvalZero * | 0 | Enables | 0 |F|RM | FENR 2181*10465441SEvalZero * | |V|Z|O|U|I| |S| | 2182*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2183*10465441SEvalZero */ 2184*10465441SEvalZero 2185*10465441SEvalZero #define C1_FENR $28 2186*10465441SEvalZero #define R_C1_FENR 28 2187*10465441SEvalZero 2188*10465441SEvalZero #define S_FENREna 7 2189*10465441SEvalZero #define M_FENREna (0x1f << S_FENREna) 2190*10465441SEvalZero #define S_FENREnaV 11 2191*10465441SEvalZero #define M_FENREnaV (0x1 << S_FENREnaV) 2192*10465441SEvalZero #define S_FENREnaZ 10 2193*10465441SEvalZero #define M_FENREnaZ (0x1 << S_FENREnaZ) 2194*10465441SEvalZero #define S_FENREnaO 9 2195*10465441SEvalZero #define M_FENREnaO (0x1 << S_FENREnaO) 2196*10465441SEvalZero #define S_FENREnaU 8 2197*10465441SEvalZero #define M_FENREnaU (0x1 << S_FENREnaU) 2198*10465441SEvalZero #define S_FENREnaI 7 2199*10465441SEvalZero #define M_FENREnaI (0x1 << S_FENREnaI) 2200*10465441SEvalZero 2201*10465441SEvalZero #define S_FENRFS 2 2202*10465441SEvalZero #define M_FENRFS (0x1 << S_FENRFS) 2203*10465441SEvalZero 2204*10465441SEvalZero #define S_FENRRM 0 2205*10465441SEvalZero #define M_FENRRM (0x3 << S_FENRRM) 2206*10465441SEvalZero 2207*10465441SEvalZero #define M_FENR0Fields 0xfffff078 2208*10465441SEvalZero #define M_FENRRFields 0x00000000 2209*10465441SEvalZero 2210*10465441SEvalZero 2211*10465441SEvalZero /* 2212*10465441SEvalZero ************************************************************************ 2213*10465441SEvalZero * C O N T R O L / S T A T U S R E G I S T E R * 2214*10465441SEvalZero ************************************************************************ 2215*10465441SEvalZero * 2216*10465441SEvalZero * 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2217*10465441SEvalZero * 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 2218*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2219*10465441SEvalZero * | FCC |F|C|Imp| 0 | Cause | Enables | Flags | RM| FCSR 2220*10465441SEvalZero * |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| | 2221*10465441SEvalZero * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2222*10465441SEvalZero */ 2223*10465441SEvalZero 2224*10465441SEvalZero #define C1_FCSR $31 2225*10465441SEvalZero #define R_C1_FCSR 31 2226*10465441SEvalZero 2227*10465441SEvalZero #define S_FCSRFCC7_1 25 /* Floating point condition codes 7..1 (R/W) */ 2228*10465441SEvalZero #define M_FCSRFCC7_1 (0x7f << S_FCSRFCC7_1) 2229*10465441SEvalZero #define S_FCSRCC7 31 2230*10465441SEvalZero #define M_FCSRCC7 (0x1 << S_FCSRCC7) 2231*10465441SEvalZero #define S_FCSRCC6 30 2232*10465441SEvalZero #define M_FCSRCC6 (0x1 << S_FCSRCC6) 2233*10465441SEvalZero #define S_FCSRCC5 29 2234*10465441SEvalZero #define M_FCSRCC5 (0x1 << S_FCSRCC5) 2235*10465441SEvalZero #define S_FCSRCC4 28 2236*10465441SEvalZero #define M_FCSRCC4 (0x1 << S_FCSRCC4) 2237*10465441SEvalZero #define S_FCSRCC3 27 2238*10465441SEvalZero #define M_FCSRCC3 (0x1 << S_FCSRCC3) 2239*10465441SEvalZero #define S_FCSRCC2 26 2240*10465441SEvalZero #define M_FCSRCC2 (0x1 << S_FCSRCC2) 2241*10465441SEvalZero #define S_FCSRCC1 25 2242*10465441SEvalZero #define M_FCSRCC1 (0x1 << S_FCSRCC1) 2243*10465441SEvalZero 2244*10465441SEvalZero #define S_FCSRFS 24 /* Flush denorms to zero (R/W) */ 2245*10465441SEvalZero #define M_FCSRFS (0x1 << S_FCSRFS) 2246*10465441SEvalZero 2247*10465441SEvalZero #define S_FCSRCC0 23 /* Floating point condition code 0 (R/W) */ 2248*10465441SEvalZero #define M_FCSRCC0 (0x1 << S_FCSRCC0) 2249*10465441SEvalZero #define S_FCSRCC S_FCSRCC0 2250*10465441SEvalZero #define M_FCSRCC M_FCSRCC0 2251*10465441SEvalZero 2252*10465441SEvalZero #define S_FCSRImpl 21 /* Implementation-specific control bits (R/W) */ 2253*10465441SEvalZero #define M_FCSRImpl (0x3 << S_FCSRImpl) 2254*10465441SEvalZero 2255*10465441SEvalZero #define S_FCSRExc 12 /* Exception cause (R/W) */ 2256*10465441SEvalZero #define M_FCSRExc (0x3f << S_FCSRExc) 2257*10465441SEvalZero #define S_FCSRExcE 17 2258*10465441SEvalZero #define M_FCSRExcE (0x1 << S_FCSRExcE) 2259*10465441SEvalZero #define S_FCSRExcV 16 2260*10465441SEvalZero #define M_FCSRExcV (0x1 << S_FCSRExcV) 2261*10465441SEvalZero #define S_FCSRExcZ 15 2262*10465441SEvalZero #define M_FCSRExcZ (0x1 << S_FCSRExcZ) 2263*10465441SEvalZero #define S_FCSRExcO 14 2264*10465441SEvalZero #define M_FCSRExcO (0x1 << S_FCSRExcO) 2265*10465441SEvalZero #define S_FCSRExcU 13 2266*10465441SEvalZero #define M_FCSRExcU (0x1 << S_FCSRExcU) 2267*10465441SEvalZero #define S_FCSRExcI 12 2268*10465441SEvalZero #define M_FCSRExcI (0x1 << S_FCSRExcI) 2269*10465441SEvalZero 2270*10465441SEvalZero #define S_FCSREna 7 /* Exception enable (R/W) */ 2271*10465441SEvalZero #define M_FCSREna (0x1f << S_FCSREna) 2272*10465441SEvalZero #define S_FCSREnaV 11 2273*10465441SEvalZero #define M_FCSREnaV (0x1 << S_FCSREnaV) 2274*10465441SEvalZero #define S_FCSREnaZ 10 2275*10465441SEvalZero #define M_FCSREnaZ (0x1 << S_FCSREnaZ) 2276*10465441SEvalZero #define S_FCSREnaO 9 2277*10465441SEvalZero #define M_FCSREnaO (0x1 << S_FCSREnaO) 2278*10465441SEvalZero #define S_FCSREnaU 8 2279*10465441SEvalZero #define M_FCSREnaU (0x1 << S_FCSREnaU) 2280*10465441SEvalZero #define S_FCSREnaI 7 2281*10465441SEvalZero #define M_FCSREnaI (0x1 << S_FCSREnaI) 2282*10465441SEvalZero 2283*10465441SEvalZero #define S_FCSRFlg 2 /* Exception flags (R/W) */ 2284*10465441SEvalZero #define M_FCSRFlg (0x1f << S_FCSRFlg) 2285*10465441SEvalZero #define S_FCSRFlgV 6 2286*10465441SEvalZero #define M_FCSRFlgV (0x1 << S_FCSRFlgV) 2287*10465441SEvalZero #define S_FCSRFlgZ 5 2288*10465441SEvalZero #define M_FCSRFlgZ (0x1 << S_FCSRFlgZ) 2289*10465441SEvalZero #define S_FCSRFlgO 4 2290*10465441SEvalZero #define M_FCSRFlgO (0x1 << S_FCSRFlgO) 2291*10465441SEvalZero #define S_FCSRFlgU 3 2292*10465441SEvalZero #define M_FCSRFlgU (0x1 << S_FCSRFlgU) 2293*10465441SEvalZero #define S_FCSRFlgI 2 2294*10465441SEvalZero #define M_FCSRFlgI (0x1 << S_FCSRFlgI) 2295*10465441SEvalZero 2296*10465441SEvalZero #define S_FCSRRM 0 /* Rounding mode (R/W) */ 2297*10465441SEvalZero #define M_FCSRRM (0x3 << S_FCSRRM) 2298*10465441SEvalZero 2299*10465441SEvalZero #define M_FCSR0Fields 0x001c0000 2300*10465441SEvalZero #define M_FCSRRFields 0x00000000 2301*10465441SEvalZero 2302*10465441SEvalZero /* 2303*10465441SEvalZero * Values in the rounding mode field (of both FCSR and FCCR) 2304*10465441SEvalZero */ 2305*10465441SEvalZero #define K_FCSRRM_RN 0 2306*10465441SEvalZero #define K_FCSRRM_RZ 1 2307*10465441SEvalZero #define K_FCSRRM_RP 2 2308*10465441SEvalZero #define K_FCSRRM_RM 3 2309*10465441SEvalZero 2310*10465441SEvalZero #endif /* _COMMON_MIPS_DEF_H_ */ 2311