isa_traits.hh revision 5254
12023SN/A/*
25254Sksewell@umich.edu * Copyright (c) 2007 MIPS Technologies, Inc.
35254Sksewell@umich.edu * All rights reserved.
42023SN/A *
55254Sksewell@umich.edu * Redistribution and use in source and binary forms, with or without
65254Sksewell@umich.edu * modification, are permitted provided that the following conditions are
75254Sksewell@umich.edu * met: redistributions of source code must retain the above copyright
85254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer;
95254Sksewell@umich.edu * redistributions in binary form must reproduce the above copyright
105254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer in the
115254Sksewell@umich.edu * documentation and/or other materials provided with the distribution;
125254Sksewell@umich.edu * neither the name of the copyright holders nor the names of its
135254Sksewell@umich.edu * contributors may be used to endorse or promote products derived from
145254Sksewell@umich.edu * this software without specific prior written permission.
152023SN/A *
165254Sksewell@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
175254Sksewell@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
185254Sksewell@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
195254Sksewell@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
205254Sksewell@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
215254Sksewell@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
225254Sksewell@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
235254Sksewell@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
245254Sksewell@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
255254Sksewell@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
265254Sksewell@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
285254Sksewell@umich.edu * Authors: Gabe Black
295254Sksewell@umich.edu *          Korey Sewell
305222Sksewell@umich.edu *          Jaidev Patwardhan
312023SN/A */
322023SN/A
332028SN/A#ifndef __ARCH_MIPS_ISA_TRAITS_HH__
342028SN/A#define __ARCH_MIPS_ISA_TRAITS_HH__
352023SN/A
362597SN/A#include "arch/mips/types.hh"
375254Sksewell@umich.edu#include "arch/mips/mips_core_specific.hh"
385222Sksewell@umich.edu#include "config/full_system.hh"
392023SN/A#include "sim/host.hh"
402023SN/A
412239SN/Anamespace LittleEndianGuest {};
422239SN/A
432028SN/A#define TARGET_MIPS
442023SN/A
452131SN/Aclass StaticInstPtr;
462023SN/A
472131SN/Anamespace MipsISA
482023SN/A{
492525SN/A    using namespace LittleEndianGuest;
502525SN/A
512447SN/A    StaticInstPtr decodeInst(ExtMachInst);
522023SN/A
535222Sksewell@umich.edu    // MIPS DOES have a delay slot
543093Sksewell@umich.edu    #define ISA_HAS_DELAY_SLOT 1
553093Sksewell@umich.edu
562972Sgblack@eecs.umich.edu    const Addr PageShift = 13;
572972Sgblack@eecs.umich.edu    const Addr PageBytes = ULL(1) << PageShift;
585222Sksewell@umich.edu    const Addr Page_Mask = ~(PageBytes - 1);
592972Sgblack@eecs.umich.edu    const Addr PageOffset = PageBytes - 1;
602239SN/A
615222Sksewell@umich.edu
625222Sksewell@umich.edu    ////////////////////////////////////////////////////////////////////////
635222Sksewell@umich.edu    //
645222Sksewell@umich.edu    //  Translation stuff
655222Sksewell@umich.edu    //
665222Sksewell@umich.edu
675222Sksewell@umich.edu    const Addr PteShift = 3;
685222Sksewell@umich.edu    const Addr NPtePageShift = PageShift - PteShift;
695222Sksewell@umich.edu    const Addr NPtePage = ULL(1) << NPtePageShift;
705222Sksewell@umich.edu    const Addr PteMask = NPtePage - 1;
715222Sksewell@umich.edu
725222Sksewell@umich.edu    //// All 'Mapped' segments go through the TLB
735222Sksewell@umich.edu    //// All other segments are translated by dropping the MSB, to give
745222Sksewell@umich.edu    //// the corresponding physical address
755222Sksewell@umich.edu    // User Segment - Mapped
765222Sksewell@umich.edu    const Addr USegBase = ULL(0x0);
775222Sksewell@umich.edu    const Addr USegEnd = ULL(0x7FFFFFFF);
785222Sksewell@umich.edu
795222Sksewell@umich.edu    // Kernel Segment 0 - Unmapped
805222Sksewell@umich.edu    const Addr KSeg0End = ULL(0x9FFFFFFF);
815222Sksewell@umich.edu    const Addr KSeg0Base =  ULL(0x80000000);
825222Sksewell@umich.edu    const Addr KSeg0Mask = ULL(0x1FFFFFFF);
835222Sksewell@umich.edu
845222Sksewell@umich.edu    // Kernel Segment 1 - Unmapped, Uncached
855222Sksewell@umich.edu    const Addr KSeg1End = ULL(0xBFFFFFFF);
865222Sksewell@umich.edu    const Addr KSeg1Base = ULL(0xA0000000);
875222Sksewell@umich.edu    const Addr KSeg1Mask = ULL(0x1FFFFFFF);
885222Sksewell@umich.edu
895222Sksewell@umich.edu    // Kernel/Supervisor Segment - Mapped
905222Sksewell@umich.edu    const Addr KSSegEnd = ULL(0xDFFFFFFF);
915222Sksewell@umich.edu    const Addr KSSegBase = ULL(0xC0000000);
925222Sksewell@umich.edu
935222Sksewell@umich.edu    // Kernel Segment 3 - Mapped
945222Sksewell@umich.edu    const Addr KSeg3End = ULL(0xFFFFFFFF);
955222Sksewell@umich.edu    const Addr KSeg3Base = ULL(0xE0000000);
965222Sksewell@umich.edu
975222Sksewell@umich.edu
985222Sksewell@umich.edu    // For loading... XXX This maybe could be USegEnd?? --ali
995222Sksewell@umich.edu    const Addr LoadAddrMask = ULL(0xffffffffff);
1005222Sksewell@umich.edu
1015222Sksewell@umich.edu    inline Addr Phys2K0Seg(Addr addr)
1025222Sksewell@umich.edu    {
1035222Sksewell@umich.edu   //  if (addr & PAddrUncachedBit43) {
1045222Sksewell@umich.edu//         addr &= PAddrUncachedMask;
1055222Sksewell@umich.edu//         addr |= PAddrUncachedBit40;
1065222Sksewell@umich.edu//     }
1075222Sksewell@umich.edu        return addr | KSeg0Base;
1085222Sksewell@umich.edu    }
1095222Sksewell@umich.edu
1105254Sksewell@umich.edu
1115254Sksewell@umich.edu    const unsigned VABits = 32;
1125254Sksewell@umich.edu    const unsigned PABits = 32; // Is this correct?
1135254Sksewell@umich.edu    const Addr VAddrImplMask = (ULL(1) << VABits) - 1;
1145254Sksewell@umich.edu    const Addr VAddrUnImplMask = ~VAddrImplMask;
1155254Sksewell@umich.edu    inline Addr VAddrImpl(Addr a) { return a & VAddrImplMask; }
1165254Sksewell@umich.edu    inline Addr VAddrVPN(Addr a) { return a >> MipsISA::PageShift; }
1175254Sksewell@umich.edu    inline Addr VAddrOffset(Addr a) { return a & MipsISA::PageOffset; }
1185254Sksewell@umich.edu
1195254Sksewell@umich.edu    const Addr PAddrImplMask = (ULL(1) << PABits) - 1;
1205254Sksewell@umich.edu
1215222Sksewell@umich.edu    ////////////////////////////////////////////////////////////////////////
1225222Sksewell@umich.edu    //
1235222Sksewell@umich.edu    //  Interrupt levels
1245222Sksewell@umich.edu    //
1255222Sksewell@umich.edu    enum InterruptLevels
1265222Sksewell@umich.edu    {
1275222Sksewell@umich.edu        INTLEVEL_SOFTWARE_MIN = 4,
1285222Sksewell@umich.edu        INTLEVEL_SOFTWARE_MAX = 19,
1295222Sksewell@umich.edu
1305222Sksewell@umich.edu        INTLEVEL_EXTERNAL_MIN = 20,
1315222Sksewell@umich.edu        INTLEVEL_EXTERNAL_MAX = 34,
1325222Sksewell@umich.edu
1335222Sksewell@umich.edu        INTLEVEL_IRQ0 = 20,
1345222Sksewell@umich.edu        INTLEVEL_IRQ1 = 21,
1355222Sksewell@umich.edu        INTINDEX_ETHERNET = 0,
1365222Sksewell@umich.edu        INTINDEX_SCSI = 1,
1375222Sksewell@umich.edu        INTLEVEL_IRQ2 = 22,
1385222Sksewell@umich.edu        INTLEVEL_IRQ3 = 23,
1395222Sksewell@umich.edu
1405222Sksewell@umich.edu        INTLEVEL_SERIAL = 33,
1415222Sksewell@umich.edu
1425222Sksewell@umich.edu        NumInterruptLevels = INTLEVEL_EXTERNAL_MAX
1435222Sksewell@umich.edu    };
1445222Sksewell@umich.edu
1455222Sksewell@umich.edu
1465222Sksewell@umich.edu    // MIPS modes
1475222Sksewell@umich.edu    enum mode_type
1485222Sksewell@umich.edu    {
1495222Sksewell@umich.edu        mode_kernel = 0,		// kernel
1505222Sksewell@umich.edu        mode_supervisor = 1,	// supervisor
1515222Sksewell@umich.edu        mode_user = 2,		// user mode
1525222Sksewell@umich.edu        mode_debug = 3,         // debug mode
1535222Sksewell@umich.edu        mode_number			// number of modes
1545222Sksewell@umich.edu    };
1555222Sksewell@umich.edu
1565222Sksewell@umich.edu  inline mode_type getOperatingMode(MiscReg Stat)
1575222Sksewell@umich.edu  {
1585222Sksewell@umich.edu    if((Stat & 0x10000006) != 0 || (Stat & 0x18) ==0)
1595222Sksewell@umich.edu      return mode_kernel;
1605222Sksewell@umich.edu    else{
1615222Sksewell@umich.edu      if((Stat & 0x18) == 0x8)
1625222Sksewell@umich.edu        return mode_supervisor;
1635222Sksewell@umich.edu      else if((Stat & 0x18) == 0x10)
1645222Sksewell@umich.edu        return mode_user;
1655222Sksewell@umich.edu      else return mode_number;
1665222Sksewell@umich.edu    }
1675222Sksewell@umich.edu  }
1685222Sksewell@umich.edu
1695222Sksewell@umich.edu
1702972Sgblack@eecs.umich.edu    // return a no-op instruction... used for instruction fetch faults
1712972Sgblack@eecs.umich.edu    const ExtMachInst NoopMachInst = 0x00000000;
1722131SN/A
1732972Sgblack@eecs.umich.edu    // Constants Related to the number of registers
1742972Sgblack@eecs.umich.edu    const int NumIntArchRegs = 32;
1754661Sksewell@umich.edu    const int NumIntSpecialRegs = 9;
1762972Sgblack@eecs.umich.edu    const int NumFloatArchRegs = 32;
1772972Sgblack@eecs.umich.edu    const int NumFloatSpecialRegs = 5;
1782597SN/A
1795222Sksewell@umich.edu    const int NumShadowRegSets = 16; // Maximum number of shadow register sets
1805222Sksewell@umich.edu    const int NumIntRegs = NumIntArchRegs*NumShadowRegSets + NumIntSpecialRegs;        //HI & LO Regs
1815222Sksewell@umich.edu    const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;//
1825222Sksewell@umich.edu
1834772Sgblack@eecs.umich.edu    // Static instruction parameters
1845222Sksewell@umich.edu    const int MaxInstSrcRegs = 10;
1855222Sksewell@umich.edu    const int MaxInstDestRegs = 8;
1864772Sgblack@eecs.umich.edu
1872972Sgblack@eecs.umich.edu    // semantically meaningful register indices
1882972Sgblack@eecs.umich.edu    const int ZeroReg = 0;
1892972Sgblack@eecs.umich.edu    const int AssemblerReg = 1;
1902972Sgblack@eecs.umich.edu    const int ReturnValueReg = 2;
1912972Sgblack@eecs.umich.edu    const int ReturnValueReg1 = 2;
1922972Sgblack@eecs.umich.edu    const int ReturnValueReg2 = 3;
1935222Sksewell@umich.edu    const int ArgumentReg0 = 4;
1945222Sksewell@umich.edu    const int ArgumentReg1 = 5;
1955222Sksewell@umich.edu    const int ArgumentReg2 = 6;
1965222Sksewell@umich.edu    const int ArgumentReg3 = 7;
1972972Sgblack@eecs.umich.edu    const int KernelReg0 = 26;
1982972Sgblack@eecs.umich.edu    const int KernelReg1 = 27;
1992972Sgblack@eecs.umich.edu    const int GlobalPointerReg = 28;
2002972Sgblack@eecs.umich.edu    const int StackPointerReg = 29;
2012972Sgblack@eecs.umich.edu    const int FramePointerReg = 30;
2022972Sgblack@eecs.umich.edu    const int ReturnAddressReg = 31;
2032597SN/A
2045222Sksewell@umich.edu    const int ArgumentReg[] = {4, 5, 6, 7};
2055222Sksewell@umich.edu    const int NumArgumentRegs = sizeof(ArgumentReg) / sizeof(const int);
2065222Sksewell@umich.edu
2072972Sgblack@eecs.umich.edu    const int SyscallNumReg = ReturnValueReg1;
2084661Sksewell@umich.edu    const int SyscallPseudoReturnReg = ReturnValueReg2;
2095222Sksewell@umich.edu    const int SyscallSuccessReg = ArgumentReg3;
2102131SN/A
2112972Sgblack@eecs.umich.edu    const int LogVMPageSize = 13;	// 8K bytes
2122972Sgblack@eecs.umich.edu    const int VMPageSize = (1 << LogVMPageSize);
2132131SN/A
2142972Sgblack@eecs.umich.edu    const int BranchPredAddrShiftAmt = 2; // instructions are 4-byte aligned
2152131SN/A
2162972Sgblack@eecs.umich.edu    const int MachineBytes = 4;
2172972Sgblack@eecs.umich.edu    const int WordBytes = 4;
2182972Sgblack@eecs.umich.edu    const int HalfwordBytes = 2;
2192972Sgblack@eecs.umich.edu    const int ByteBytes = 1;
2202131SN/A
2212972Sgblack@eecs.umich.edu    const int ANNOTE_NONE = 0;
2222972Sgblack@eecs.umich.edu    const uint32_t ITOUCH_ANNOTE = 0xffffffff;
2232131SN/A
2245222Sksewell@umich.edu    // These help enumerate all the registers for dependence tracking.
2255222Sksewell@umich.edu    const int FP_Base_DepTag = NumIntRegs;
2265222Sksewell@umich.edu    const int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs;
2275222Sksewell@umich.edu
2284661Sksewell@umich.edu    // Enumerate names for 'Control' Registers in the CPU
2294661Sksewell@umich.edu    // Reference MIPS32 Arch. for Programmers, Vol. III, Ch.8
2304661Sksewell@umich.edu    // (Register Number-Register Select) Summary of Register
2314661Sksewell@umich.edu    //------------------------------------------------------
2324661Sksewell@umich.edu    // The first set of names classify the CP0 names as Register Banks
2334661Sksewell@umich.edu    // for easy indexing when using the 'RD + SEL' index combination
2344661Sksewell@umich.edu    // in CP0 instructions.
2354661Sksewell@umich.edu    enum MiscRegTags {
2365222Sksewell@umich.edu        Index = Ctrl_Base_DepTag + 0,       //Bank 0: 0 - 3
2374661Sksewell@umich.edu        MVPControl,
2384661Sksewell@umich.edu        MVPConf0,
2394661Sksewell@umich.edu        MVPConf1,
2404661Sksewell@umich.edu
2415222Sksewell@umich.edu        CP0_Random = Ctrl_Base_DepTag + 8,      //Bank 1: 8 - 15
2424661Sksewell@umich.edu        VPEControl,
2434661Sksewell@umich.edu        VPEConf0,
2444661Sksewell@umich.edu        VPEConf1,
2454661Sksewell@umich.edu        YQMask,
2464661Sksewell@umich.edu        VPESchedule,
2474661Sksewell@umich.edu        VPEScheFBack,
2484661Sksewell@umich.edu        VPEOpt,
2494661Sksewell@umich.edu
2505222Sksewell@umich.edu        EntryLo0 = Ctrl_Base_DepTag + 16,   //Bank 2: 16 - 23
2514661Sksewell@umich.edu        TCStatus,
2524661Sksewell@umich.edu        TCBind,
2534661Sksewell@umich.edu        TCRestart,
2544661Sksewell@umich.edu        TCHalt,
2554661Sksewell@umich.edu        TCContext,
2564661Sksewell@umich.edu        TCSchedule,
2574661Sksewell@umich.edu        TCScheFBack,
2584661Sksewell@umich.edu
2595222Sksewell@umich.edu        EntryLo1 = Ctrl_Base_DepTag + 24,   // Bank 3: 24
2604661Sksewell@umich.edu
2615222Sksewell@umich.edu        Context = Ctrl_Base_DepTag + 32,    // Bank 4: 32 - 33
2624661Sksewell@umich.edu        ContextConfig,
2634661Sksewell@umich.edu
2645222Sksewell@umich.edu        PageMask = Ctrl_Base_DepTag + 40, //Bank 5: 40 - 41
2655222Sksewell@umich.edu        PageGrain = Ctrl_Base_DepTag + 41,
2664661Sksewell@umich.edu
2675222Sksewell@umich.edu        Wired = Ctrl_Base_DepTag + 48,          //Bank 6:48-55
2684661Sksewell@umich.edu        SRSConf0,
2694661Sksewell@umich.edu        SRSConf1,
2704661Sksewell@umich.edu        SRSConf2,
2714661Sksewell@umich.edu        SRSConf3,
2724661Sksewell@umich.edu        SRSConf4,
2734661Sksewell@umich.edu
2745222Sksewell@umich.edu        HWRena = Ctrl_Base_DepTag + 56,         //Bank 7: 56-63
2754661Sksewell@umich.edu
2765222Sksewell@umich.edu        BadVAddr = Ctrl_Base_DepTag + 64,       //Bank 8: 64-71
2774661Sksewell@umich.edu
2785222Sksewell@umich.edu        Count = Ctrl_Base_DepTag + 72,          //Bank 9: 72-79
2794661Sksewell@umich.edu
2805222Sksewell@umich.edu        EntryHi = Ctrl_Base_DepTag + 80,        //Bank 10: 80-87
2814661Sksewell@umich.edu
2825222Sksewell@umich.edu        Compare = Ctrl_Base_DepTag + 88,        //Bank 11: 88-95
2834661Sksewell@umich.edu
2845222Sksewell@umich.edu        Status = Ctrl_Base_DepTag + 96,         //Bank 12: 96-103
2854661Sksewell@umich.edu        IntCtl,
2864661Sksewell@umich.edu        SRSCtl,
2874661Sksewell@umich.edu        SRSMap,
2884661Sksewell@umich.edu
2895222Sksewell@umich.edu        Cause = Ctrl_Base_DepTag + 104,         //Bank 13: 104-111
2904661Sksewell@umich.edu
2915222Sksewell@umich.edu        EPC = Ctrl_Base_DepTag + 112,           //Bank 14: 112-119
2924661Sksewell@umich.edu
2935222Sksewell@umich.edu        PRId = Ctrl_Base_DepTag + 120,          //Bank 15: 120-127,
2944661Sksewell@umich.edu        EBase,
2954661Sksewell@umich.edu
2965222Sksewell@umich.edu        Config = Ctrl_Base_DepTag + 128,        //Bank 16: 128-135
2974661Sksewell@umich.edu        Config1,
2984661Sksewell@umich.edu        Config2,
2994661Sksewell@umich.edu        Config3,
3004661Sksewell@umich.edu        Config4,
3014661Sksewell@umich.edu        Config5,
3024661Sksewell@umich.edu        Config6,
3034661Sksewell@umich.edu        Config7,
3044661Sksewell@umich.edu
3054661Sksewell@umich.edu
3065222Sksewell@umich.edu        LLAddr = Ctrl_Base_DepTag + 136,        //Bank 17: 136-143
3074661Sksewell@umich.edu
3085222Sksewell@umich.edu        WatchLo0 = Ctrl_Base_DepTag + 144,      //Bank 18: 144-151
3094661Sksewell@umich.edu        WatchLo1,
3104661Sksewell@umich.edu        WatchLo2,
3114661Sksewell@umich.edu        WatchLo3,
3124661Sksewell@umich.edu        WatchLo4,
3134661Sksewell@umich.edu        WatchLo5,
3144661Sksewell@umich.edu        WatchLo6,
3154661Sksewell@umich.edu        WatchLo7,
3164661Sksewell@umich.edu
3175222Sksewell@umich.edu        WatchHi0 = Ctrl_Base_DepTag + 152,     //Bank 19: 152-159
3184661Sksewell@umich.edu        WatchHi1,
3194661Sksewell@umich.edu        WatchHi2,
3204661Sksewell@umich.edu        WatchHi3,
3214661Sksewell@umich.edu        WatchHi4,
3224661Sksewell@umich.edu        WatchHi5,
3234661Sksewell@umich.edu        WatchHi6,
3244661Sksewell@umich.edu        WatchHi7,
3254661Sksewell@umich.edu
3265222Sksewell@umich.edu        XCContext64 = Ctrl_Base_DepTag + 160, //Bank 20: 160-167
3274661Sksewell@umich.edu
3284661Sksewell@umich.edu                           //Bank 21: 168-175
3294661Sksewell@umich.edu
3304661Sksewell@umich.edu                           //Bank 22: 176-183
3314661Sksewell@umich.edu
3325222Sksewell@umich.edu        Debug = Ctrl_Base_DepTag + 184,       //Bank 23: 184-191
3334661Sksewell@umich.edu        TraceControl1,
3344661Sksewell@umich.edu        TraceControl2,
3354661Sksewell@umich.edu        UserTraceData,
3364661Sksewell@umich.edu        TraceBPC,
3374661Sksewell@umich.edu
3385222Sksewell@umich.edu        DEPC = Ctrl_Base_DepTag + 192,        //Bank 24: 192-199
3394661Sksewell@umich.edu
3405222Sksewell@umich.edu        PerfCnt0 = Ctrl_Base_DepTag + 200,    //Bank 25: 200-207
3414661Sksewell@umich.edu        PerfCnt1,
3424661Sksewell@umich.edu        PerfCnt2,
3434661Sksewell@umich.edu        PerfCnt3,
3444661Sksewell@umich.edu        PerfCnt4,
3454661Sksewell@umich.edu        PerfCnt5,
3464661Sksewell@umich.edu        PerfCnt6,
3474661Sksewell@umich.edu        PerfCnt7,
3484661Sksewell@umich.edu
3495222Sksewell@umich.edu        ErrCtl = Ctrl_Base_DepTag + 208,      //Bank 26: 208-215
3504661Sksewell@umich.edu
3515222Sksewell@umich.edu        CacheErr0 = Ctrl_Base_DepTag + 216,   //Bank 27: 216-223
3524661Sksewell@umich.edu        CacheErr1,
3534661Sksewell@umich.edu        CacheErr2,
3544661Sksewell@umich.edu        CacheErr3,
3554661Sksewell@umich.edu
3565222Sksewell@umich.edu        TagLo0 = Ctrl_Base_DepTag + 224,      //Bank 28: 224-231
3574661Sksewell@umich.edu        DataLo1,
3584661Sksewell@umich.edu        TagLo2,
3594661Sksewell@umich.edu        DataLo3,
3604661Sksewell@umich.edu        TagLo4,
3614661Sksewell@umich.edu        DataLo5,
3624661Sksewell@umich.edu        TagLo6,
3634661Sksewell@umich.edu        DataLo7,
3644661Sksewell@umich.edu
3655222Sksewell@umich.edu        TagHi0 = Ctrl_Base_DepTag + 232,      //Bank 29: 232-239
3664661Sksewell@umich.edu        DataHi1,
3674661Sksewell@umich.edu        TagHi2,
3684661Sksewell@umich.edu        DataHi3,
3694661Sksewell@umich.edu        TagHi4,
3704661Sksewell@umich.edu        DataHi5,
3714661Sksewell@umich.edu        TagHi6,
3724661Sksewell@umich.edu        DataHi7,
3734661Sksewell@umich.edu
3744661Sksewell@umich.edu
3755222Sksewell@umich.edu        ErrorEPC = Ctrl_Base_DepTag + 240,    //Bank 30: 240-247
3764661Sksewell@umich.edu
3775222Sksewell@umich.edu        DESAVE = Ctrl_Base_DepTag + 248,       //Bank 31: 248-256
3784661Sksewell@umich.edu
3795222Sksewell@umich.edu        LLFlag = Ctrl_Base_DepTag + 257,
3804661Sksewell@umich.edu
3814661Sksewell@umich.edu        NumControlRegs
3824661Sksewell@umich.edu    };
3834661Sksewell@umich.edu
3845222Sksewell@umich.edu    const int TotalDataRegs = NumIntRegs + NumFloatRegs;
3855222Sksewell@umich.edu
3864661Sksewell@umich.edu    const int NumMiscRegs = NumControlRegs;
3874661Sksewell@umich.edu
3884661Sksewell@umich.edu    const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
3894661Sksewell@umich.edu
3904661Sksewell@umich.edu
3912023SN/A};
3922023SN/A
3932447SN/Ausing namespace MipsISA;
3942447SN/A
3952028SN/A#endif // __ARCH_MIPS_ISA_TRAITS_HH__
396