registers.hh revision 6329
12972SN/A/*
26328SN/A * Copyright (c) 2006 The Regents of The University of Michigan
36328SN/A * Copyright (c) 2007 MIPS Technologies, Inc.
45254SN/A * All rights reserved.
52972SN/A *
65254SN/A * Redistribution and use in source and binary forms, with or without
75254SN/A * modification, are permitted provided that the following conditions are
85254SN/A * met: redistributions of source code must retain the above copyright
95254SN/A * notice, this list of conditions and the following disclaimer;
105254SN/A * redistributions in binary form must reproduce the above copyright
115254SN/A * notice, this list of conditions and the following disclaimer in the
125254SN/A * documentation and/or other materials provided with the distribution;
135254SN/A * neither the name of the copyright holders nor the names of its
145254SN/A * contributors may be used to endorse or promote products derived from
155254SN/A * this software without specific prior written permission.
162972SN/A *
175254SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185254SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195254SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205254SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215254SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225254SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235254SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245254SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255254SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265254SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275254SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
285222SN/A *
296328SN/A * Authors: Korey Sewell
302972SN/A */
312972SN/A
326329Sgblack@eecs.umich.edu#ifndef __ARCH_MIPS_REGISTERS_HH__
336329Sgblack@eecs.umich.edu#define __ARCH_MIPS_REGISTERS_HH__
342972SN/A
356329Sgblack@eecs.umich.edu#include "arch/mips/max_inst_regs.hh"
366329Sgblack@eecs.umich.edu#include "base/misc.hh"
376329Sgblack@eecs.umich.edu#include "base/types.hh"
386328SN/A
396329Sgblack@eecs.umich.educlass ThreadContext;
406328SN/A
416328SN/Anamespace MipsISA
426328SN/A{
436328SN/A
446329Sgblack@eecs.umich.eduusing MipsISAInst::MaxInstSrcRegs;
456329Sgblack@eecs.umich.eduusing MipsISAInst::MaxInstDestRegs;
466328SN/A
476329Sgblack@eecs.umich.edu// Constants Related to the number of registers
486329Sgblack@eecs.umich.educonst int NumIntArchRegs = 32;
496329Sgblack@eecs.umich.educonst int NumIntSpecialRegs = 9;
506329Sgblack@eecs.umich.educonst int NumFloatArchRegs = 32;
516329Sgblack@eecs.umich.educonst int NumFloatSpecialRegs = 5;
526328SN/A
536329Sgblack@eecs.umich.educonst int MaxShadowRegSets = 16; // Maximum number of shadow register sets
546329Sgblack@eecs.umich.educonst int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs;        //HI & LO Regs
556329Sgblack@eecs.umich.educonst int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;//
566328SN/A
576329Sgblack@eecs.umich.educonst uint32_t MIPS32_QNAN = 0x7fbfffff;
586329Sgblack@eecs.umich.educonst uint64_t MIPS64_QNAN = ULL(0x7fbfffffffffffff);
596328SN/A
606329Sgblack@eecs.umich.eduenum FPControlRegNums {
616329Sgblack@eecs.umich.edu   FIR = NumFloatArchRegs,
626329Sgblack@eecs.umich.edu   FCCR,
636329Sgblack@eecs.umich.edu   FEXR,
646329Sgblack@eecs.umich.edu   FENR,
656329Sgblack@eecs.umich.edu   FCSR
666329Sgblack@eecs.umich.edu};
676329Sgblack@eecs.umich.edu
686329Sgblack@eecs.umich.eduenum FCSRBits {
696329Sgblack@eecs.umich.edu    Inexact = 1,
706329Sgblack@eecs.umich.edu    Underflow,
716329Sgblack@eecs.umich.edu    Overflow,
726329Sgblack@eecs.umich.edu    DivideByZero,
736329Sgblack@eecs.umich.edu    Invalid,
746329Sgblack@eecs.umich.edu    Unimplemented
756329Sgblack@eecs.umich.edu};
766329Sgblack@eecs.umich.edu
776329Sgblack@eecs.umich.eduenum FCSRFields {
786329Sgblack@eecs.umich.edu    Flag_Field = 1,
796329Sgblack@eecs.umich.edu    Enable_Field = 6,
806329Sgblack@eecs.umich.edu    Cause_Field = 11
816329Sgblack@eecs.umich.edu};
826329Sgblack@eecs.umich.edu
836329Sgblack@eecs.umich.eduenum MiscIntRegNums {
846329Sgblack@eecs.umich.edu   LO = NumIntArchRegs,
856329Sgblack@eecs.umich.edu   HI,
866329Sgblack@eecs.umich.edu   DSPACX0,
876329Sgblack@eecs.umich.edu   DSPLo1,
886329Sgblack@eecs.umich.edu   DSPHi1,
896329Sgblack@eecs.umich.edu   DSPACX1,
906329Sgblack@eecs.umich.edu   DSPLo2,
916329Sgblack@eecs.umich.edu   DSPHi2,
926329Sgblack@eecs.umich.edu   DSPACX2,
936329Sgblack@eecs.umich.edu   DSPLo3,
946329Sgblack@eecs.umich.edu   DSPHi3,
956329Sgblack@eecs.umich.edu   DSPACX3,
966329Sgblack@eecs.umich.edu   DSPControl,
976329Sgblack@eecs.umich.edu   DSPLo0 = LO,
986329Sgblack@eecs.umich.edu   DSPHi0 = HI
996329Sgblack@eecs.umich.edu};
1006329Sgblack@eecs.umich.edu
1016329Sgblack@eecs.umich.edu// semantically meaningful register indices
1026329Sgblack@eecs.umich.educonst int ZeroReg = 0;
1036329Sgblack@eecs.umich.educonst int AssemblerReg = 1;
1046329Sgblack@eecs.umich.educonst int SyscallSuccessReg = 7;
1056329Sgblack@eecs.umich.educonst int FirstArgumentReg = 4;
1066329Sgblack@eecs.umich.educonst int ReturnValueReg = 2;
1076329Sgblack@eecs.umich.edu
1086329Sgblack@eecs.umich.educonst int KernelReg0 = 26;
1096329Sgblack@eecs.umich.educonst int KernelReg1 = 27;
1106329Sgblack@eecs.umich.educonst int GlobalPointerReg = 28;
1116329Sgblack@eecs.umich.educonst int StackPointerReg = 29;
1126329Sgblack@eecs.umich.educonst int FramePointerReg = 30;
1136329Sgblack@eecs.umich.educonst int ReturnAddressReg = 31;
1146329Sgblack@eecs.umich.edu
1156329Sgblack@eecs.umich.educonst int SyscallPseudoReturnReg = 3;
1166329Sgblack@eecs.umich.edu
1176329Sgblack@eecs.umich.edu//@TODO: Implementing ShadowSets needs to
1186329Sgblack@eecs.umich.edu//edit this value such that:
1196329Sgblack@eecs.umich.edu//TotalArchRegs = NumIntArchRegs * ShadowSets
1206329Sgblack@eecs.umich.educonst int TotalArchRegs = NumIntArchRegs;
1216329Sgblack@eecs.umich.edu
1226329Sgblack@eecs.umich.edu// These help enumerate all the registers for dependence tracking.
1236329Sgblack@eecs.umich.educonst int FP_Base_DepTag = NumIntRegs;
1246329Sgblack@eecs.umich.educonst int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs;
1256329Sgblack@eecs.umich.edu
1266329Sgblack@eecs.umich.edu// Enumerate names for 'Control' Registers in the CPU
1276329Sgblack@eecs.umich.edu// Reference MIPS32 Arch. for Programmers, Vol. III, Ch.8
1286329Sgblack@eecs.umich.edu// (Register Number-Register Select) Summary of Register
1296329Sgblack@eecs.umich.edu//------------------------------------------------------
1306329Sgblack@eecs.umich.edu// The first set of names classify the CP0 names as Register Banks
1316329Sgblack@eecs.umich.edu// for easy indexing when using the 'RD + SEL' index combination
1326329Sgblack@eecs.umich.edu// in CP0 instructions.
1336329Sgblack@eecs.umich.eduenum MiscRegTags {
1346329Sgblack@eecs.umich.edu    Index = Ctrl_Base_DepTag + 0,       //Bank 0: 0 - 3
1356329Sgblack@eecs.umich.edu    MVPControl,
1366329Sgblack@eecs.umich.edu    MVPConf0,
1376329Sgblack@eecs.umich.edu    MVPConf1,
1386329Sgblack@eecs.umich.edu
1396329Sgblack@eecs.umich.edu    CP0_Random = Ctrl_Base_DepTag + 8,      //Bank 1: 8 - 15
1406329Sgblack@eecs.umich.edu    VPEControl,
1416329Sgblack@eecs.umich.edu    VPEConf0,
1426329Sgblack@eecs.umich.edu    VPEConf1,
1436329Sgblack@eecs.umich.edu    YQMask,
1446329Sgblack@eecs.umich.edu    VPESchedule,
1456329Sgblack@eecs.umich.edu    VPEScheFBack,
1466329Sgblack@eecs.umich.edu    VPEOpt,
1476329Sgblack@eecs.umich.edu
1486329Sgblack@eecs.umich.edu    EntryLo0 = Ctrl_Base_DepTag + 16,   //Bank 2: 16 - 23
1496329Sgblack@eecs.umich.edu    TCStatus,
1506329Sgblack@eecs.umich.edu    TCBind,
1516329Sgblack@eecs.umich.edu    TCRestart,
1526329Sgblack@eecs.umich.edu    TCHalt,
1536329Sgblack@eecs.umich.edu    TCContext,
1546329Sgblack@eecs.umich.edu    TCSchedule,
1556329Sgblack@eecs.umich.edu    TCScheFBack,
1566329Sgblack@eecs.umich.edu
1576329Sgblack@eecs.umich.edu    EntryLo1 = Ctrl_Base_DepTag + 24,   // Bank 3: 24
1586329Sgblack@eecs.umich.edu
1596329Sgblack@eecs.umich.edu    Context = Ctrl_Base_DepTag + 32,    // Bank 4: 32 - 33
1606329Sgblack@eecs.umich.edu    ContextConfig,
1616329Sgblack@eecs.umich.edu
1626329Sgblack@eecs.umich.edu    PageMask = Ctrl_Base_DepTag + 40, //Bank 5: 40 - 41
1636329Sgblack@eecs.umich.edu    PageGrain = Ctrl_Base_DepTag + 41,
1646329Sgblack@eecs.umich.edu
1656329Sgblack@eecs.umich.edu    Wired = Ctrl_Base_DepTag + 48,          //Bank 6:48-55
1666329Sgblack@eecs.umich.edu    SRSConf0,
1676329Sgblack@eecs.umich.edu    SRSConf1,
1686329Sgblack@eecs.umich.edu    SRSConf2,
1696329Sgblack@eecs.umich.edu    SRSConf3,
1706329Sgblack@eecs.umich.edu    SRSConf4,
1716329Sgblack@eecs.umich.edu
1726329Sgblack@eecs.umich.edu    HWRena = Ctrl_Base_DepTag + 56,         //Bank 7: 56-63
1736329Sgblack@eecs.umich.edu
1746329Sgblack@eecs.umich.edu    BadVAddr = Ctrl_Base_DepTag + 64,       //Bank 8: 64-71
1756329Sgblack@eecs.umich.edu
1766329Sgblack@eecs.umich.edu    Count = Ctrl_Base_DepTag + 72,          //Bank 9: 72-79
1776329Sgblack@eecs.umich.edu
1786329Sgblack@eecs.umich.edu    EntryHi = Ctrl_Base_DepTag + 80,        //Bank 10: 80-87
1796329Sgblack@eecs.umich.edu
1806329Sgblack@eecs.umich.edu    Compare = Ctrl_Base_DepTag + 88,        //Bank 11: 88-95
1816329Sgblack@eecs.umich.edu
1826329Sgblack@eecs.umich.edu    Status = Ctrl_Base_DepTag + 96,         //Bank 12: 96-103
1836329Sgblack@eecs.umich.edu    IntCtl,
1846329Sgblack@eecs.umich.edu    SRSCtl,
1856329Sgblack@eecs.umich.edu    SRSMap,
1866329Sgblack@eecs.umich.edu
1876329Sgblack@eecs.umich.edu    Cause = Ctrl_Base_DepTag + 104,         //Bank 13: 104-111
1886329Sgblack@eecs.umich.edu
1896329Sgblack@eecs.umich.edu    EPC = Ctrl_Base_DepTag + 112,           //Bank 14: 112-119
1906329Sgblack@eecs.umich.edu
1916329Sgblack@eecs.umich.edu    PRId = Ctrl_Base_DepTag + 120,          //Bank 15: 120-127,
1926329Sgblack@eecs.umich.edu    EBase,
1936329Sgblack@eecs.umich.edu
1946329Sgblack@eecs.umich.edu    Config = Ctrl_Base_DepTag + 128,        //Bank 16: 128-135
1956329Sgblack@eecs.umich.edu    Config1,
1966329Sgblack@eecs.umich.edu    Config2,
1976329Sgblack@eecs.umich.edu    Config3,
1986329Sgblack@eecs.umich.edu    Config4,
1996329Sgblack@eecs.umich.edu    Config5,
2006329Sgblack@eecs.umich.edu    Config6,
2016329Sgblack@eecs.umich.edu    Config7,
2026329Sgblack@eecs.umich.edu
2036329Sgblack@eecs.umich.edu
2046329Sgblack@eecs.umich.edu    LLAddr = Ctrl_Base_DepTag + 136,        //Bank 17: 136-143
2056329Sgblack@eecs.umich.edu
2066329Sgblack@eecs.umich.edu    WatchLo0 = Ctrl_Base_DepTag + 144,      //Bank 18: 144-151
2076329Sgblack@eecs.umich.edu    WatchLo1,
2086329Sgblack@eecs.umich.edu    WatchLo2,
2096329Sgblack@eecs.umich.edu    WatchLo3,
2106329Sgblack@eecs.umich.edu    WatchLo4,
2116329Sgblack@eecs.umich.edu    WatchLo5,
2126329Sgblack@eecs.umich.edu    WatchLo6,
2136329Sgblack@eecs.umich.edu    WatchLo7,
2146329Sgblack@eecs.umich.edu
2156329Sgblack@eecs.umich.edu    WatchHi0 = Ctrl_Base_DepTag + 152,     //Bank 19: 152-159
2166329Sgblack@eecs.umich.edu    WatchHi1,
2176329Sgblack@eecs.umich.edu    WatchHi2,
2186329Sgblack@eecs.umich.edu    WatchHi3,
2196329Sgblack@eecs.umich.edu    WatchHi4,
2206329Sgblack@eecs.umich.edu    WatchHi5,
2216329Sgblack@eecs.umich.edu    WatchHi6,
2226329Sgblack@eecs.umich.edu    WatchHi7,
2236329Sgblack@eecs.umich.edu
2246329Sgblack@eecs.umich.edu    XCContext64 = Ctrl_Base_DepTag + 160, //Bank 20: 160-167
2256329Sgblack@eecs.umich.edu
2266329Sgblack@eecs.umich.edu                       //Bank 21: 168-175
2276329Sgblack@eecs.umich.edu
2286329Sgblack@eecs.umich.edu                       //Bank 22: 176-183
2296329Sgblack@eecs.umich.edu
2306329Sgblack@eecs.umich.edu    Debug = Ctrl_Base_DepTag + 184,       //Bank 23: 184-191
2316329Sgblack@eecs.umich.edu    TraceControl1,
2326329Sgblack@eecs.umich.edu    TraceControl2,
2336329Sgblack@eecs.umich.edu    UserTraceData,
2346329Sgblack@eecs.umich.edu    TraceBPC,
2356329Sgblack@eecs.umich.edu
2366329Sgblack@eecs.umich.edu    DEPC = Ctrl_Base_DepTag + 192,        //Bank 24: 192-199
2376329Sgblack@eecs.umich.edu
2386329Sgblack@eecs.umich.edu    PerfCnt0 = Ctrl_Base_DepTag + 200,    //Bank 25: 200-207
2396329Sgblack@eecs.umich.edu    PerfCnt1,
2406329Sgblack@eecs.umich.edu    PerfCnt2,
2416329Sgblack@eecs.umich.edu    PerfCnt3,
2426329Sgblack@eecs.umich.edu    PerfCnt4,
2436329Sgblack@eecs.umich.edu    PerfCnt5,
2446329Sgblack@eecs.umich.edu    PerfCnt6,
2456329Sgblack@eecs.umich.edu    PerfCnt7,
2466329Sgblack@eecs.umich.edu
2476329Sgblack@eecs.umich.edu    ErrCtl = Ctrl_Base_DepTag + 208,      //Bank 26: 208-215
2486329Sgblack@eecs.umich.edu
2496329Sgblack@eecs.umich.edu    CacheErr0 = Ctrl_Base_DepTag + 216,   //Bank 27: 216-223
2506329Sgblack@eecs.umich.edu    CacheErr1,
2516329Sgblack@eecs.umich.edu    CacheErr2,
2526329Sgblack@eecs.umich.edu    CacheErr3,
2536329Sgblack@eecs.umich.edu
2546329Sgblack@eecs.umich.edu    TagLo0 = Ctrl_Base_DepTag + 224,      //Bank 28: 224-231
2556329Sgblack@eecs.umich.edu    DataLo1,
2566329Sgblack@eecs.umich.edu    TagLo2,
2576329Sgblack@eecs.umich.edu    DataLo3,
2586329Sgblack@eecs.umich.edu    TagLo4,
2596329Sgblack@eecs.umich.edu    DataLo5,
2606329Sgblack@eecs.umich.edu    TagLo6,
2616329Sgblack@eecs.umich.edu    DataLo7,
2626329Sgblack@eecs.umich.edu
2636329Sgblack@eecs.umich.edu    TagHi0 = Ctrl_Base_DepTag + 232,      //Bank 29: 232-239
2646329Sgblack@eecs.umich.edu    DataHi1,
2656329Sgblack@eecs.umich.edu    TagHi2,
2666329Sgblack@eecs.umich.edu    DataHi3,
2676329Sgblack@eecs.umich.edu    TagHi4,
2686329Sgblack@eecs.umich.edu    DataHi5,
2696329Sgblack@eecs.umich.edu    TagHi6,
2706329Sgblack@eecs.umich.edu    DataHi7,
2716329Sgblack@eecs.umich.edu
2726329Sgblack@eecs.umich.edu
2736329Sgblack@eecs.umich.edu    ErrorEPC = Ctrl_Base_DepTag + 240,    //Bank 30: 240-247
2746329Sgblack@eecs.umich.edu
2756329Sgblack@eecs.umich.edu    DESAVE = Ctrl_Base_DepTag + 248,       //Bank 31: 248-256
2766329Sgblack@eecs.umich.edu
2776329Sgblack@eecs.umich.edu    LLFlag = Ctrl_Base_DepTag + 257,
2786329Sgblack@eecs.umich.edu
2796329Sgblack@eecs.umich.edu    NumControlRegs
2806329Sgblack@eecs.umich.edu};
2816329Sgblack@eecs.umich.edu
2826329Sgblack@eecs.umich.educonst int TotalDataRegs = NumIntRegs + NumFloatRegs;
2836329Sgblack@eecs.umich.edu
2846329Sgblack@eecs.umich.educonst int NumMiscRegs = NumControlRegs;
2856329Sgblack@eecs.umich.edu
2866329Sgblack@eecs.umich.educonst int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
2876329Sgblack@eecs.umich.edu
2886329Sgblack@eecs.umich.edutypedef uint16_t  RegIndex;
2896329Sgblack@eecs.umich.edu
2906329Sgblack@eecs.umich.edutypedef uint32_t IntReg;
2916329Sgblack@eecs.umich.edu
2926329Sgblack@eecs.umich.edu// floating point register file entry type
2936329Sgblack@eecs.umich.edutypedef uint32_t FloatRegBits;
2946329Sgblack@eecs.umich.edutypedef float FloatReg;
2956329Sgblack@eecs.umich.edu
2966329Sgblack@eecs.umich.edu// cop-0/cop-1 system control register
2976329Sgblack@eecs.umich.edutypedef uint64_t MiscReg;
2986329Sgblack@eecs.umich.edu
2996329Sgblack@eecs.umich.edutypedef union {
3006329Sgblack@eecs.umich.edu    IntReg   intreg;
3016329Sgblack@eecs.umich.edu    FloatReg fpreg;
3026329Sgblack@eecs.umich.edu    MiscReg  ctrlreg;
3036329Sgblack@eecs.umich.edu} AnyReg;
3046328SN/A
3056328SN/A} // namespace MipsISA
3062972SN/A
3072972SN/A#endif
308