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