isa_traits.hh revision 6216
12023SN/A/*
25268Sksewell@umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
35254Sksewell@umich.edu * Copyright (c) 2007 MIPS Technologies, Inc.
45254Sksewell@umich.edu * All rights reserved.
52023SN/A *
65254Sksewell@umich.edu * Redistribution and use in source and binary forms, with or without
75254Sksewell@umich.edu * modification, are permitted provided that the following conditions are
85254Sksewell@umich.edu * met: redistributions of source code must retain the above copyright
95254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer;
105254Sksewell@umich.edu * redistributions in binary form must reproduce the above copyright
115254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer in the
125254Sksewell@umich.edu * documentation and/or other materials provided with the distribution;
135254Sksewell@umich.edu * neither the name of the copyright holders nor the names of its
145254Sksewell@umich.edu * contributors may be used to endorse or promote products derived from
155254Sksewell@umich.edu * this software without specific prior written permission.
162023SN/A *
175254Sksewell@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
185254Sksewell@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
195254Sksewell@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
205254Sksewell@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
215254Sksewell@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
225254Sksewell@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
235254Sksewell@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
245254Sksewell@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
255254Sksewell@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
265254Sksewell@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
275254Sksewell@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
282665Ssaidi@eecs.umich.edu *
295254Sksewell@umich.edu * Authors: Gabe Black
305254Sksewell@umich.edu *          Korey Sewell
315222Sksewell@umich.edu *          Jaidev Patwardhan
322023SN/A */
332023SN/A
342028SN/A#ifndef __ARCH_MIPS_ISA_TRAITS_HH__
352028SN/A#define __ARCH_MIPS_ISA_TRAITS_HH__
362023SN/A
372597SN/A#include "arch/mips/types.hh"
385254Sksewell@umich.edu#include "arch/mips/mips_core_specific.hh"
396216Snate@binkert.org#include "base/types.hh"
405222Sksewell@umich.edu#include "config/full_system.hh"
412023SN/A
422239SN/Anamespace LittleEndianGuest {};
432239SN/A
442028SN/A#define TARGET_MIPS
452023SN/A
462131SN/Aclass StaticInstPtr;
472023SN/A
482131SN/Anamespace MipsISA
492023SN/A{
502525SN/A    using namespace LittleEndianGuest;
512525SN/A
522447SN/A    StaticInstPtr decodeInst(ExtMachInst);
532023SN/A
545222Sksewell@umich.edu    // MIPS DOES have a delay slot
553093Sksewell@umich.edu    #define ISA_HAS_DELAY_SLOT 1
563093Sksewell@umich.edu
572972Sgblack@eecs.umich.edu    const Addr PageShift = 13;
582972Sgblack@eecs.umich.edu    const Addr PageBytes = ULL(1) << PageShift;
595222Sksewell@umich.edu    const Addr Page_Mask = ~(PageBytes - 1);
602972Sgblack@eecs.umich.edu    const Addr PageOffset = PageBytes - 1;
612239SN/A
625222Sksewell@umich.edu
635222Sksewell@umich.edu    ////////////////////////////////////////////////////////////////////////
645222Sksewell@umich.edu    //
655222Sksewell@umich.edu    //  Translation stuff
665222Sksewell@umich.edu    //
675222Sksewell@umich.edu
685222Sksewell@umich.edu    const Addr PteShift = 3;
695222Sksewell@umich.edu    const Addr NPtePageShift = PageShift - PteShift;
705222Sksewell@umich.edu    const Addr NPtePage = ULL(1) << NPtePageShift;
715222Sksewell@umich.edu    const Addr PteMask = NPtePage - 1;
725222Sksewell@umich.edu
735222Sksewell@umich.edu    //// All 'Mapped' segments go through the TLB
745222Sksewell@umich.edu    //// All other segments are translated by dropping the MSB, to give
755222Sksewell@umich.edu    //// the corresponding physical address
765222Sksewell@umich.edu    // User Segment - Mapped
775222Sksewell@umich.edu    const Addr USegBase = ULL(0x0);
785222Sksewell@umich.edu    const Addr USegEnd = ULL(0x7FFFFFFF);
795222Sksewell@umich.edu
805222Sksewell@umich.edu    // Kernel Segment 0 - Unmapped
815222Sksewell@umich.edu    const Addr KSeg0End = ULL(0x9FFFFFFF);
825222Sksewell@umich.edu    const Addr KSeg0Base =  ULL(0x80000000);
835222Sksewell@umich.edu    const Addr KSeg0Mask = ULL(0x1FFFFFFF);
845222Sksewell@umich.edu
855222Sksewell@umich.edu    // Kernel Segment 1 - Unmapped, Uncached
865222Sksewell@umich.edu    const Addr KSeg1End = ULL(0xBFFFFFFF);
875222Sksewell@umich.edu    const Addr KSeg1Base = ULL(0xA0000000);
885222Sksewell@umich.edu    const Addr KSeg1Mask = ULL(0x1FFFFFFF);
895222Sksewell@umich.edu
905222Sksewell@umich.edu    // Kernel/Supervisor Segment - Mapped
915222Sksewell@umich.edu    const Addr KSSegEnd = ULL(0xDFFFFFFF);
925222Sksewell@umich.edu    const Addr KSSegBase = ULL(0xC0000000);
935222Sksewell@umich.edu
945222Sksewell@umich.edu    // Kernel Segment 3 - Mapped
955222Sksewell@umich.edu    const Addr KSeg3End = ULL(0xFFFFFFFF);
965222Sksewell@umich.edu    const Addr KSeg3Base = ULL(0xE0000000);
975222Sksewell@umich.edu
985222Sksewell@umich.edu
995222Sksewell@umich.edu    // For loading... XXX This maybe could be USegEnd?? --ali
1005222Sksewell@umich.edu    const Addr LoadAddrMask = ULL(0xffffffffff);
1015222Sksewell@umich.edu
1025222Sksewell@umich.edu    inline Addr Phys2K0Seg(Addr addr)
1035222Sksewell@umich.edu    {
1045222Sksewell@umich.edu   //  if (addr & PAddrUncachedBit43) {
1055222Sksewell@umich.edu//         addr &= PAddrUncachedMask;
1065222Sksewell@umich.edu//         addr |= PAddrUncachedBit40;
1075222Sksewell@umich.edu//     }
1085222Sksewell@umich.edu        return addr | KSeg0Base;
1095222Sksewell@umich.edu    }
1105222Sksewell@umich.edu
1115254Sksewell@umich.edu
1125254Sksewell@umich.edu    const unsigned VABits = 32;
1135254Sksewell@umich.edu    const unsigned PABits = 32; // Is this correct?
1145254Sksewell@umich.edu    const Addr VAddrImplMask = (ULL(1) << VABits) - 1;
1155254Sksewell@umich.edu    const Addr VAddrUnImplMask = ~VAddrImplMask;
1165254Sksewell@umich.edu    inline Addr VAddrImpl(Addr a) { return a & VAddrImplMask; }
1175254Sksewell@umich.edu    inline Addr VAddrVPN(Addr a) { return a >> MipsISA::PageShift; }
1185254Sksewell@umich.edu    inline Addr VAddrOffset(Addr a) { return a & MipsISA::PageOffset; }
1195254Sksewell@umich.edu
1205254Sksewell@umich.edu    const Addr PAddrImplMask = (ULL(1) << PABits) - 1;
1215254Sksewell@umich.edu
1225222Sksewell@umich.edu    ////////////////////////////////////////////////////////////////////////
1235222Sksewell@umich.edu    //
1245222Sksewell@umich.edu    //  Interrupt levels
1255222Sksewell@umich.edu    //
1265222Sksewell@umich.edu    enum InterruptLevels
1275222Sksewell@umich.edu    {
1285222Sksewell@umich.edu        INTLEVEL_SOFTWARE_MIN = 4,
1295222Sksewell@umich.edu        INTLEVEL_SOFTWARE_MAX = 19,
1305222Sksewell@umich.edu
1315222Sksewell@umich.edu        INTLEVEL_EXTERNAL_MIN = 20,
1325222Sksewell@umich.edu        INTLEVEL_EXTERNAL_MAX = 34,
1335222Sksewell@umich.edu
1345222Sksewell@umich.edu        INTLEVEL_IRQ0 = 20,
1355222Sksewell@umich.edu        INTLEVEL_IRQ1 = 21,
1365222Sksewell@umich.edu        INTINDEX_ETHERNET = 0,
1375222Sksewell@umich.edu        INTINDEX_SCSI = 1,
1385222Sksewell@umich.edu        INTLEVEL_IRQ2 = 22,
1395222Sksewell@umich.edu        INTLEVEL_IRQ3 = 23,
1405222Sksewell@umich.edu
1415222Sksewell@umich.edu        INTLEVEL_SERIAL = 33,
1425222Sksewell@umich.edu
1435222Sksewell@umich.edu        NumInterruptLevels = INTLEVEL_EXTERNAL_MAX
1445222Sksewell@umich.edu    };
1455222Sksewell@umich.edu
1465222Sksewell@umich.edu
1475222Sksewell@umich.edu    // MIPS modes
1485222Sksewell@umich.edu    enum mode_type
1495222Sksewell@umich.edu    {
1505543Ssaidi@eecs.umich.edu        mode_kernel = 0,        // kernel
1515543Ssaidi@eecs.umich.edu        mode_supervisor = 1,    // supervisor
1525543Ssaidi@eecs.umich.edu        mode_user = 2,          // user mode
1535222Sksewell@umich.edu        mode_debug = 3,         // debug mode
1545543Ssaidi@eecs.umich.edu        mode_number             // number of modes
1555222Sksewell@umich.edu    };
1565222Sksewell@umich.edu
1575222Sksewell@umich.edu  inline mode_type getOperatingMode(MiscReg Stat)
1585222Sksewell@umich.edu  {
1595222Sksewell@umich.edu    if((Stat & 0x10000006) != 0 || (Stat & 0x18) ==0)
1605222Sksewell@umich.edu      return mode_kernel;
1615222Sksewell@umich.edu    else{
1625222Sksewell@umich.edu      if((Stat & 0x18) == 0x8)
1635222Sksewell@umich.edu        return mode_supervisor;
1645222Sksewell@umich.edu      else if((Stat & 0x18) == 0x10)
1655222Sksewell@umich.edu        return mode_user;
1665222Sksewell@umich.edu      else return mode_number;
1675222Sksewell@umich.edu    }
1685222Sksewell@umich.edu  }
1695222Sksewell@umich.edu
1705222Sksewell@umich.edu
1712972Sgblack@eecs.umich.edu    // return a no-op instruction... used for instruction fetch faults
1722972Sgblack@eecs.umich.edu    const ExtMachInst NoopMachInst = 0x00000000;
1732131SN/A
1742972Sgblack@eecs.umich.edu    // Constants Related to the number of registers
1752972Sgblack@eecs.umich.edu    const int NumIntArchRegs = 32;
1764661Sksewell@umich.edu    const int NumIntSpecialRegs = 9;
1772972Sgblack@eecs.umich.edu    const int NumFloatArchRegs = 32;
1782972Sgblack@eecs.umich.edu    const int NumFloatSpecialRegs = 5;
1792597SN/A
1806035Sksewell@umich.edu    const int MaxShadowRegSets = 16; // Maximum number of shadow register sets
1816035Sksewell@umich.edu    const int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs;        //HI & LO Regs
1825222Sksewell@umich.edu    const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;//
1835222Sksewell@umich.edu
1844772Sgblack@eecs.umich.edu    // Static instruction parameters
1855222Sksewell@umich.edu    const int MaxInstSrcRegs = 10;
1865222Sksewell@umich.edu    const int MaxInstDestRegs = 8;
1874772Sgblack@eecs.umich.edu
1882972Sgblack@eecs.umich.edu    // semantically meaningful register indices
1892972Sgblack@eecs.umich.edu    const int ZeroReg = 0;
1902972Sgblack@eecs.umich.edu    const int AssemblerReg = 1;
1916110Ssteve.reinhardt@amd.com    const int SyscallSuccessReg = 7;
1926110Ssteve.reinhardt@amd.com    const int FirstArgumentReg = 4;
1936110Ssteve.reinhardt@amd.com    const int ReturnValueReg = 2;
1946110Ssteve.reinhardt@amd.com
1952972Sgblack@eecs.umich.edu    const int KernelReg0 = 26;
1962972Sgblack@eecs.umich.edu    const int KernelReg1 = 27;
1972972Sgblack@eecs.umich.edu    const int GlobalPointerReg = 28;
1982972Sgblack@eecs.umich.edu    const int StackPointerReg = 29;
1992972Sgblack@eecs.umich.edu    const int FramePointerReg = 30;
2002972Sgblack@eecs.umich.edu    const int ReturnAddressReg = 31;
2012597SN/A
2025958Sgblack@eecs.umich.edu    const int SyscallPseudoReturnReg = 3;
2032131SN/A
2045543Ssaidi@eecs.umich.edu    const int LogVMPageSize = 13;       // 8K bytes
2052972Sgblack@eecs.umich.edu    const int VMPageSize = (1 << LogVMPageSize);
2062131SN/A
2072972Sgblack@eecs.umich.edu    const int BranchPredAddrShiftAmt = 2; // instructions are 4-byte aligned
2082131SN/A
2092972Sgblack@eecs.umich.edu    const int MachineBytes = 4;
2102972Sgblack@eecs.umich.edu    const int WordBytes = 4;
2112972Sgblack@eecs.umich.edu    const int HalfwordBytes = 2;
2122972Sgblack@eecs.umich.edu    const int ByteBytes = 1;
2132131SN/A
2142972Sgblack@eecs.umich.edu    const int ANNOTE_NONE = 0;
2152972Sgblack@eecs.umich.edu    const uint32_t ITOUCH_ANNOTE = 0xffffffff;
2162131SN/A
2175222Sksewell@umich.edu    // These help enumerate all the registers for dependence tracking.
2185222Sksewell@umich.edu    const int FP_Base_DepTag = NumIntRegs;
2195222Sksewell@umich.edu    const int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs;
2205222Sksewell@umich.edu
2214661Sksewell@umich.edu    // Enumerate names for 'Control' Registers in the CPU
2224661Sksewell@umich.edu    // Reference MIPS32 Arch. for Programmers, Vol. III, Ch.8
2234661Sksewell@umich.edu    // (Register Number-Register Select) Summary of Register
2244661Sksewell@umich.edu    //------------------------------------------------------
2254661Sksewell@umich.edu    // The first set of names classify the CP0 names as Register Banks
2264661Sksewell@umich.edu    // for easy indexing when using the 'RD + SEL' index combination
2274661Sksewell@umich.edu    // in CP0 instructions.
2284661Sksewell@umich.edu    enum MiscRegTags {
2295222Sksewell@umich.edu        Index = Ctrl_Base_DepTag + 0,       //Bank 0: 0 - 3
2304661Sksewell@umich.edu        MVPControl,
2314661Sksewell@umich.edu        MVPConf0,
2324661Sksewell@umich.edu        MVPConf1,
2334661Sksewell@umich.edu
2345222Sksewell@umich.edu        CP0_Random = Ctrl_Base_DepTag + 8,      //Bank 1: 8 - 15
2354661Sksewell@umich.edu        VPEControl,
2364661Sksewell@umich.edu        VPEConf0,
2374661Sksewell@umich.edu        VPEConf1,
2384661Sksewell@umich.edu        YQMask,
2394661Sksewell@umich.edu        VPESchedule,
2404661Sksewell@umich.edu        VPEScheFBack,
2414661Sksewell@umich.edu        VPEOpt,
2424661Sksewell@umich.edu
2435222Sksewell@umich.edu        EntryLo0 = Ctrl_Base_DepTag + 16,   //Bank 2: 16 - 23
2444661Sksewell@umich.edu        TCStatus,
2454661Sksewell@umich.edu        TCBind,
2464661Sksewell@umich.edu        TCRestart,
2474661Sksewell@umich.edu        TCHalt,
2484661Sksewell@umich.edu        TCContext,
2494661Sksewell@umich.edu        TCSchedule,
2504661Sksewell@umich.edu        TCScheFBack,
2514661Sksewell@umich.edu
2525222Sksewell@umich.edu        EntryLo1 = Ctrl_Base_DepTag + 24,   // Bank 3: 24
2534661Sksewell@umich.edu
2545222Sksewell@umich.edu        Context = Ctrl_Base_DepTag + 32,    // Bank 4: 32 - 33
2554661Sksewell@umich.edu        ContextConfig,
2564661Sksewell@umich.edu
2575222Sksewell@umich.edu        PageMask = Ctrl_Base_DepTag + 40, //Bank 5: 40 - 41
2585222Sksewell@umich.edu        PageGrain = Ctrl_Base_DepTag + 41,
2594661Sksewell@umich.edu
2605222Sksewell@umich.edu        Wired = Ctrl_Base_DepTag + 48,          //Bank 6:48-55
2614661Sksewell@umich.edu        SRSConf0,
2624661Sksewell@umich.edu        SRSConf1,
2634661Sksewell@umich.edu        SRSConf2,
2644661Sksewell@umich.edu        SRSConf3,
2654661Sksewell@umich.edu        SRSConf4,
2664661Sksewell@umich.edu
2675222Sksewell@umich.edu        HWRena = Ctrl_Base_DepTag + 56,         //Bank 7: 56-63
2684661Sksewell@umich.edu
2695222Sksewell@umich.edu        BadVAddr = Ctrl_Base_DepTag + 64,       //Bank 8: 64-71
2704661Sksewell@umich.edu
2715222Sksewell@umich.edu        Count = Ctrl_Base_DepTag + 72,          //Bank 9: 72-79
2724661Sksewell@umich.edu
2735222Sksewell@umich.edu        EntryHi = Ctrl_Base_DepTag + 80,        //Bank 10: 80-87
2744661Sksewell@umich.edu
2755222Sksewell@umich.edu        Compare = Ctrl_Base_DepTag + 88,        //Bank 11: 88-95
2764661Sksewell@umich.edu
2775222Sksewell@umich.edu        Status = Ctrl_Base_DepTag + 96,         //Bank 12: 96-103
2784661Sksewell@umich.edu        IntCtl,
2794661Sksewell@umich.edu        SRSCtl,
2804661Sksewell@umich.edu        SRSMap,
2814661Sksewell@umich.edu
2825222Sksewell@umich.edu        Cause = Ctrl_Base_DepTag + 104,         //Bank 13: 104-111
2834661Sksewell@umich.edu
2845222Sksewell@umich.edu        EPC = Ctrl_Base_DepTag + 112,           //Bank 14: 112-119
2854661Sksewell@umich.edu
2865222Sksewell@umich.edu        PRId = Ctrl_Base_DepTag + 120,          //Bank 15: 120-127,
2874661Sksewell@umich.edu        EBase,
2884661Sksewell@umich.edu
2895222Sksewell@umich.edu        Config = Ctrl_Base_DepTag + 128,        //Bank 16: 128-135
2904661Sksewell@umich.edu        Config1,
2914661Sksewell@umich.edu        Config2,
2924661Sksewell@umich.edu        Config3,
2934661Sksewell@umich.edu        Config4,
2944661Sksewell@umich.edu        Config5,
2954661Sksewell@umich.edu        Config6,
2964661Sksewell@umich.edu        Config7,
2974661Sksewell@umich.edu
2984661Sksewell@umich.edu
2995222Sksewell@umich.edu        LLAddr = Ctrl_Base_DepTag + 136,        //Bank 17: 136-143
3004661Sksewell@umich.edu
3015222Sksewell@umich.edu        WatchLo0 = Ctrl_Base_DepTag + 144,      //Bank 18: 144-151
3024661Sksewell@umich.edu        WatchLo1,
3034661Sksewell@umich.edu        WatchLo2,
3044661Sksewell@umich.edu        WatchLo3,
3054661Sksewell@umich.edu        WatchLo4,
3064661Sksewell@umich.edu        WatchLo5,
3074661Sksewell@umich.edu        WatchLo6,
3084661Sksewell@umich.edu        WatchLo7,
3094661Sksewell@umich.edu
3105222Sksewell@umich.edu        WatchHi0 = Ctrl_Base_DepTag + 152,     //Bank 19: 152-159
3114661Sksewell@umich.edu        WatchHi1,
3124661Sksewell@umich.edu        WatchHi2,
3134661Sksewell@umich.edu        WatchHi3,
3144661Sksewell@umich.edu        WatchHi4,
3154661Sksewell@umich.edu        WatchHi5,
3164661Sksewell@umich.edu        WatchHi6,
3174661Sksewell@umich.edu        WatchHi7,
3184661Sksewell@umich.edu
3195222Sksewell@umich.edu        XCContext64 = Ctrl_Base_DepTag + 160, //Bank 20: 160-167
3204661Sksewell@umich.edu
3214661Sksewell@umich.edu                           //Bank 21: 168-175
3224661Sksewell@umich.edu
3234661Sksewell@umich.edu                           //Bank 22: 176-183
3244661Sksewell@umich.edu
3255222Sksewell@umich.edu        Debug = Ctrl_Base_DepTag + 184,       //Bank 23: 184-191
3264661Sksewell@umich.edu        TraceControl1,
3274661Sksewell@umich.edu        TraceControl2,
3284661Sksewell@umich.edu        UserTraceData,
3294661Sksewell@umich.edu        TraceBPC,
3304661Sksewell@umich.edu
3315222Sksewell@umich.edu        DEPC = Ctrl_Base_DepTag + 192,        //Bank 24: 192-199
3324661Sksewell@umich.edu
3335222Sksewell@umich.edu        PerfCnt0 = Ctrl_Base_DepTag + 200,    //Bank 25: 200-207
3344661Sksewell@umich.edu        PerfCnt1,
3354661Sksewell@umich.edu        PerfCnt2,
3364661Sksewell@umich.edu        PerfCnt3,
3374661Sksewell@umich.edu        PerfCnt4,
3384661Sksewell@umich.edu        PerfCnt5,
3394661Sksewell@umich.edu        PerfCnt6,
3404661Sksewell@umich.edu        PerfCnt7,
3414661Sksewell@umich.edu
3425222Sksewell@umich.edu        ErrCtl = Ctrl_Base_DepTag + 208,      //Bank 26: 208-215
3434661Sksewell@umich.edu
3445222Sksewell@umich.edu        CacheErr0 = Ctrl_Base_DepTag + 216,   //Bank 27: 216-223
3454661Sksewell@umich.edu        CacheErr1,
3464661Sksewell@umich.edu        CacheErr2,
3474661Sksewell@umich.edu        CacheErr3,
3484661Sksewell@umich.edu
3495222Sksewell@umich.edu        TagLo0 = Ctrl_Base_DepTag + 224,      //Bank 28: 224-231
3504661Sksewell@umich.edu        DataLo1,
3514661Sksewell@umich.edu        TagLo2,
3524661Sksewell@umich.edu        DataLo3,
3534661Sksewell@umich.edu        TagLo4,
3544661Sksewell@umich.edu        DataLo5,
3554661Sksewell@umich.edu        TagLo6,
3564661Sksewell@umich.edu        DataLo7,
3574661Sksewell@umich.edu
3585222Sksewell@umich.edu        TagHi0 = Ctrl_Base_DepTag + 232,      //Bank 29: 232-239
3594661Sksewell@umich.edu        DataHi1,
3604661Sksewell@umich.edu        TagHi2,
3614661Sksewell@umich.edu        DataHi3,
3624661Sksewell@umich.edu        TagHi4,
3634661Sksewell@umich.edu        DataHi5,
3644661Sksewell@umich.edu        TagHi6,
3654661Sksewell@umich.edu        DataHi7,
3664661Sksewell@umich.edu
3674661Sksewell@umich.edu
3685222Sksewell@umich.edu        ErrorEPC = Ctrl_Base_DepTag + 240,    //Bank 30: 240-247
3694661Sksewell@umich.edu
3705222Sksewell@umich.edu        DESAVE = Ctrl_Base_DepTag + 248,       //Bank 31: 248-256
3714661Sksewell@umich.edu
3725222Sksewell@umich.edu        LLFlag = Ctrl_Base_DepTag + 257,
3734661Sksewell@umich.edu
3744661Sksewell@umich.edu        NumControlRegs
3754661Sksewell@umich.edu    };
3764661Sksewell@umich.edu
3775222Sksewell@umich.edu    const int TotalDataRegs = NumIntRegs + NumFloatRegs;
3785222Sksewell@umich.edu
3794661Sksewell@umich.edu    const int NumMiscRegs = NumControlRegs;
3804661Sksewell@umich.edu
3814661Sksewell@umich.edu    const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
3824661Sksewell@umich.edu
3834661Sksewell@umich.edu
3842023SN/A};
3852023SN/A
3862028SN/A#endif // __ARCH_MIPS_ISA_TRAITS_HH__
387