isa_traits.hh revision 2447
16313Sgblack@eecs.umich.edu/*
26313Sgblack@eecs.umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
36313Sgblack@eecs.umich.edu * All rights reserved.
46313Sgblack@eecs.umich.edu *
56313Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
66313Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
76313Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
86313Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
96313Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
106313Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
116313Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
126313Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
136313Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
146313Sgblack@eecs.umich.edu * this software without specific prior written permission.
156313Sgblack@eecs.umich.edu *
166313Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176313Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186313Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
196313Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
206313Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
216313Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
226313Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
236313Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
246313Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
256313Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
266313Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
276313Sgblack@eecs.umich.edu */
286313Sgblack@eecs.umich.edu
296313Sgblack@eecs.umich.edu#ifndef __ARCH_MIPS_ISA_TRAITS_HH__
306313Sgblack@eecs.umich.edu#define __ARCH_MIPS_ISA_TRAITS_HH__
317678Sgblack@eecs.umich.edu
327678Sgblack@eecs.umich.edu//#include "arch/mips/misc_regfile.hh"
336313Sgblack@eecs.umich.edu#include "base/misc.hh"
346330Sgblack@eecs.umich.edu#include "config/full_system.hh"
356313Sgblack@eecs.umich.edu#include "sim/host.hh"
367680Sgblack@eecs.umich.edu#include "sim/faults.hh"
376313Sgblack@eecs.umich.edu
386313Sgblack@eecs.umich.edu#include <vector>
396313Sgblack@eecs.umich.edu
406313Sgblack@eecs.umich.educlass FastCPU;
416313Sgblack@eecs.umich.educlass FullCPU;
426678Sgblack@eecs.umich.educlass Checkpoint;
436313Sgblack@eecs.umich.edu
446330Sgblack@eecs.umich.edunamespace LittleEndianGuest {};
456330Sgblack@eecs.umich.eduusing namespace LittleEndianGuest;
466330Sgblack@eecs.umich.edu
476330Sgblack@eecs.umich.edu#define TARGET_MIPS
486330Sgblack@eecs.umich.edu
496313Sgblack@eecs.umich.educlass StaticInst;
506313Sgblack@eecs.umich.educlass StaticInstPtr;
516313Sgblack@eecs.umich.edu
526678Sgblack@eecs.umich.edunamespace MIPS34K {
536313Sgblack@eecs.umich.eduint DTB_ASN_ASN(uint64_t reg);
546330Sgblack@eecs.umich.eduint ITB_ASN_ASN(uint64_t reg);
556330Sgblack@eecs.umich.edu};
566330Sgblack@eecs.umich.edu
576330Sgblack@eecs.umich.edu#if !FULL_SYSTEM
586330Sgblack@eecs.umich.educlass SyscallReturn {
596330Sgblack@eecs.umich.edu        public:
606330Sgblack@eecs.umich.edu           template <class T>
616330Sgblack@eecs.umich.edu           SyscallReturn(T v, bool s)
626330Sgblack@eecs.umich.edu           {
636330Sgblack@eecs.umich.edu               retval = (uint64_t)v;
646330Sgblack@eecs.umich.edu               success = s;
656330Sgblack@eecs.umich.edu           }
666330Sgblack@eecs.umich.edu
676330Sgblack@eecs.umich.edu           template <class T>
686330Sgblack@eecs.umich.edu           SyscallReturn(T v)
696330Sgblack@eecs.umich.edu           {
706330Sgblack@eecs.umich.edu               success = (v >= 0);
716330Sgblack@eecs.umich.edu               retval = (uint64_t)v;
726330Sgblack@eecs.umich.edu           }
736330Sgblack@eecs.umich.edu
746330Sgblack@eecs.umich.edu           ~SyscallReturn() {}
756330Sgblack@eecs.umich.edu
766330Sgblack@eecs.umich.edu           SyscallReturn& operator=(const SyscallReturn& s) {
776330Sgblack@eecs.umich.edu               retval = s.retval;
786330Sgblack@eecs.umich.edu               success = s.success;
796330Sgblack@eecs.umich.edu               return *this;
806330Sgblack@eecs.umich.edu           }
816330Sgblack@eecs.umich.edu
826330Sgblack@eecs.umich.edu           bool successful() { return success; }
836330Sgblack@eecs.umich.edu           uint64_t value() { return retval; }
846330Sgblack@eecs.umich.edu
856330Sgblack@eecs.umich.edu
866330Sgblack@eecs.umich.edu       private:
876330Sgblack@eecs.umich.edu           uint64_t retval;
886330Sgblack@eecs.umich.edu           bool success;
896330Sgblack@eecs.umich.edu};
906330Sgblack@eecs.umich.edu#endif
916330Sgblack@eecs.umich.edu
926330Sgblack@eecs.umich.edunamespace MipsISA
936330Sgblack@eecs.umich.edu{
946330Sgblack@eecs.umich.edu    typedef uint32_t MachInst;
956330Sgblack@eecs.umich.edu    typedef uint32_t MachInst;
966330Sgblack@eecs.umich.edu    typedef uint64_t ExtMachInst;
976330Sgblack@eecs.umich.edu    typedef uint8_t  RegIndex;
986330Sgblack@eecs.umich.edu//  typedef uint64_t Addr;
996330Sgblack@eecs.umich.edu    enum {
1006330Sgblack@eecs.umich.edu        MemoryEnd = 0xffffffffffffffffULL,
1016330Sgblack@eecs.umich.edu
1026330Sgblack@eecs.umich.edu        NumIntRegs = 32,
1036330Sgblack@eecs.umich.edu        NumFloatRegs = 32,
1046330Sgblack@eecs.umich.edu        NumMiscRegs = 258, //account for hi,lo regs
1056330Sgblack@eecs.umich.edu
1066330Sgblack@eecs.umich.edu        MaxRegsOfAnyType = 32,
1076330Sgblack@eecs.umich.edu        // Static instruction parameters
1086330Sgblack@eecs.umich.edu        MaxInstSrcRegs = 3,
1096330Sgblack@eecs.umich.edu        MaxInstDestRegs = 2,
1106330Sgblack@eecs.umich.edu
1116330Sgblack@eecs.umich.edu        // semantically meaningful register indices
1126330Sgblack@eecs.umich.edu        ZeroReg = 0,	// architecturally meaningful
1136330Sgblack@eecs.umich.edu        // the rest of these depend on the ABI
1146330Sgblack@eecs.umich.edu        StackPointerReg = 30,
1156330Sgblack@eecs.umich.edu        GlobalPointerReg = 29,
1166330Sgblack@eecs.umich.edu        ProcedureValueReg = 27,
1176330Sgblack@eecs.umich.edu        ReturnAddressReg = 26,
1186330Sgblack@eecs.umich.edu        ReturnValueReg = 0,
1196330Sgblack@eecs.umich.edu        FramePointerReg = 15,
1206330Sgblack@eecs.umich.edu        ArgumentReg0 = 16,
1216330Sgblack@eecs.umich.edu        ArgumentReg1 = 17,
1226330Sgblack@eecs.umich.edu        ArgumentReg2 = 18,
1236330Sgblack@eecs.umich.edu        ArgumentReg3 = 19,
1246330Sgblack@eecs.umich.edu        ArgumentReg4 = 20,
1256330Sgblack@eecs.umich.edu        ArgumentReg5 = 21,
1266330Sgblack@eecs.umich.edu        SyscallNumReg = ReturnValueReg,
1276330Sgblack@eecs.umich.edu        SyscallPseudoReturnReg = ArgumentReg4,
1286330Sgblack@eecs.umich.edu        SyscallSuccessReg = 19,
1296330Sgblack@eecs.umich.edu        LogVMPageSize = 13,	// 8K bytes
1306330Sgblack@eecs.umich.edu        VMPageSize = (1 << LogVMPageSize),
1316330Sgblack@eecs.umich.edu
1326330Sgblack@eecs.umich.edu        BranchPredAddrShiftAmt = 2, // instructions are 4-byte aligned
1336330Sgblack@eecs.umich.edu
1346330Sgblack@eecs.umich.edu        WordBytes = 4,
1356330Sgblack@eecs.umich.edu        HalfwordBytes = 2,
1366330Sgblack@eecs.umich.edu        ByteBytes = 1,
1376330Sgblack@eecs.umich.edu        DepNA = 0,
1386330Sgblack@eecs.umich.edu    };
1396330Sgblack@eecs.umich.edu
1406330Sgblack@eecs.umich.edu    // These enumerate all the registers for dependence tracking.
1416330Sgblack@eecs.umich.edu    enum DependenceTags {
1426330Sgblack@eecs.umich.edu        // 0..31 are the integer regs 0..31
1436330Sgblack@eecs.umich.edu        // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag)
1446330Sgblack@eecs.umich.edu        FP_Base_DepTag = 32,
1456330Sgblack@eecs.umich.edu        Ctrl_Base_DepTag = 64,
1466330Sgblack@eecs.umich.edu        Fpcr_DepTag = 64,		// floating point control register
1476330Sgblack@eecs.umich.edu        Uniq_DepTag = 65,
1486330Sgblack@eecs.umich.edu        IPR_Base_DepTag = 66,
1496330Sgblack@eecs.umich.edu        MiscReg_DepTag = 67
1506330Sgblack@eecs.umich.edu    };
1516313Sgblack@eecs.umich.edu
1526313Sgblack@eecs.umich.edu    typedef uint64_t IntReg;
1536313Sgblack@eecs.umich.edu    typedef IntReg IntRegFile[NumIntRegs];
154
155    // floating point register file entry type
156    typedef union {
157        uint64_t q;
158        double d;
159    } FloatReg;
160
161    typedef union {
162        uint64_t q[NumFloatRegs];	// integer qword view
163        double d[NumFloatRegs];		// double-precision floating point view
164    } FloatRegFile;
165
166    // cop-0/cop-1 system control register file
167    typedef uint64_t MiscReg;
168//typedef MiscReg MiscRegFile[NumMiscRegs];
169    class MiscRegFile {
170
171      protected:
172        uint64_t	fpcr;		// floating point condition codes
173        uint64_t	uniq;		// process-unique register
174        bool		lock_flag;	// lock flag for LL/SC
175        Addr		lock_addr;	// lock address for LL/SC
176
177        MiscReg miscRegFile[NumMiscRegs];
178
179      public:
180        //These functions should be removed once the simplescalar cpu model
181        //has been replaced.
182        int getInstAsid();
183        int getDataAsid();
184
185        void copyMiscRegs(ExecContext *xc);
186
187        MiscReg readReg(int misc_reg)
188        { return miscRegFile[misc_reg]; }
189
190        MiscReg readRegWithEffect(int misc_reg, Fault &fault, ExecContext *xc)
191        { return miscRegFile[misc_reg];}
192
193        Fault setReg(int misc_reg, const MiscReg &val)
194        { miscRegFile[misc_reg] = val; return NoFault; }
195
196        Fault setRegWithEffect(int misc_reg, const MiscReg &val,
197                               ExecContext *xc)
198        { miscRegFile[misc_reg] = val; return NoFault; }
199
200#if FULL_SYSTEM
201        void clearIprs() { }
202
203      protected:
204        InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs
205
206      private:
207        MiscReg readIpr(int idx, Fault &fault, ExecContext *xc) { }
208
209        Fault setIpr(int idx, uint64_t val, ExecContext *xc) { }
210#endif
211        friend class RegFile;
212    };
213
214    enum MiscRegTags {
215        //Coprocessor 0 Registers
216        //Reference MIPS32 Arch. for Programmers, Vol. III, Ch.8
217        //(Register Number-Register Select) Summary of Register
218        //------------------------------------------------------
219        Index = 0,       //0-0 Index into the TLB array
220
221        MVPControl = 1,  //0-1 Per-processor register containing global
222                     //MIPS� MT configuration data
223
224        MVPConf0 = 2,    //0-2 Per-processor register containing global
225                     //MIPS� MT configuration data
226
227        MVPConf1 = 3,    //0-3 Per-processor register containing global
228                     //MIPS� MT configuration data
229
230        Random = 8,      //1-0 Randomly generated index into the TLB array
231
232        VPEControl = 9,  //1-1 Per-VPE register containing relatively volatile
233                     //thread configuration data
234
235        VPEConf0 = 10,    //1-2 Per-VPE multi-thread configuration
236                     //information
237
238
239        VPEConf1 = 11,    //1-2 Per-VPE multi-thread configuration
240                     //information
241
242        YQMask = 12,      //Per-VPE register defining which YIELD
243                     //qualifier bits may be used without generating
244                     //an exception
245
246        VPESchedule = 13,
247        VPEScheFBack =  14,
248        VPEOpt = 15,
249        EntryLo0 = 16, // Bank 3: 16 - 23
250        TCStatus = 17,
251        TCBind = 18,
252        TCRestart = 19,
253        TCHalt = 20,
254        TCContext = 21,
255        TCSchedule = 22,
256        TCScheFBack = 23,
257
258        EntryLo1 = 24,// Bank 4: 24 - 31
259
260        Context = 32, // Bank 5: 32 - 39
261        ContextConfig = 33,
262
263        //PageMask = 40, //Bank 6: 40 - 47
264        PageGrain = 41,
265
266        Wired = 48, //Bank 7:48 - 55
267        SRSConf0 = 49,
268        SRSConf1 = 50,
269        SRSConf2 = 51,
270        SRSConf3 = 52,
271        SRSConf4 = 53,
272        BadVAddr = 54,
273
274        HWRena = 56,//Bank 8:56 - 63
275
276        Count = 64, //Bank 9:64 - 71
277
278        EntryHi = 72,//Bank 10:72 - 79
279
280        Compare = 80,//Bank 11:80 - 87
281
282        Status = 88,//Bank 12:88 - 96     //12-0 Processor status and control
283        IntCtl = 89,                      //12-1 Interrupt system status and control
284        SRSCtl = 90,                      //12-2 Shadow register set status and control
285        SRSMap = 91,                      //12-3 Shadow set IPL mapping
286
287        Cause = 97,//97-104      //13-0 Cause of last general exception
288
289        EPC = 105,//105-112        //14-0 Program counter at last exception
290
291        PRId = 113,//113-120,       //15-0 Processor identification and revision
292        EBase = 114,      //15-1 Exception vector base register
293
294        Config = 121,//Bank 16: 121-128
295        Config1 = 122,
296        Config2 = 123,
297        Config3 = 124,
298        Config6 = 127,
299        Config7 = 128,
300
301
302        LLAddr = 129,//Bank 17: 129-136
303
304        WatchLo0 = 137,//Bank 18: 137-144
305        WatchLo1 = 138,
306        WatchLo2 = 139,
307        WatchLo3 = 140,
308        WatchLo4 = 141,
309        WatchLo5 = 142,
310        WatchLo6 = 143,
311        WatchLo7 = 144,
312
313        WatchHi0 = 145,//Bank 19: 145-152
314        WatchHi1 = 146,
315        WatchHi2 = 147,
316        WatchHi3 = 148,
317        WatchHi4 = 149,
318        WatchHi5 = 150,
319        WatchHi6 = 151,
320        WatchHi7 = 152,
321
322        XCContext64 = 153,//Bank 20: 153-160
323
324        //Bank 21: 161-168
325
326        //Bank 22: 169-176
327
328        Debug = 177, //Bank 23: 177-184
329        TraceControl1 = 178,
330        TraceControl2 = 179,
331        UserTraceData = 180,
332        TraceBPC = 181,
333
334        DEPC = 185,//Bank 24: 185-192
335
336        PerfCnt0 = 193,//Bank 25: 193 - 200
337        PerfCnt1 = 194,
338        PerfCnt2 = 195,
339        PerfCnt3 = 196,
340        PerfCnt4 = 197,
341        PerfCnt5 = 198,
342        PerfCnt6 = 199,
343        PerfCnt7 = 200,
344
345        ErrCtl = 201, //Bank 26: 201 - 208
346
347        CacheErr0 = 209, //Bank 27: 209 - 216
348        CacheErr1 = 210,
349        CacheErr2 = 211,
350        CacheErr3 = 212,
351
352        TagLo0 = 217,//Bank 28: 217 - 224
353        DataLo1 = 218,
354        TagLo2 = 219,
355        DataLo3 = 220,
356        TagLo4 = 221,
357        DataLo5 = 222,
358        TagLo6 = 223,
359        DataLo7 = 234,
360
361        TagHi0 = 233,//Bank 29: 233 - 240
362        DataHi1 = 234,
363        TagHi2 = 235,
364        DataHi3 = 236,
365        TagHi4 = 237,
366        DataHi5 = 238,
367        TagHi6 = 239,
368        DataHi7 = 240,
369
370
371        ErrorEPC = 249,//Bank 30: 241 - 248
372
373        DESAVE = 257,//Bank 31: 249-256
374
375        //More Misc. Regs
376        Hi,
377        Lo,
378        FCSR,
379        FPCR,
380
381        //Alpha Regs, but here now, for
382        //compiling sake
383        UNIQ,
384        LockAddr,
385        LockFlag
386    };
387
388extern const Addr PageShift;
389extern const Addr PageBytes;
390extern const Addr PageMask;
391extern const Addr PageOffset;
392
393#if FULL_SYSTEM
394
395    typedef uint64_t InternalProcReg;
396
397#include "arch/mips/isa_fullsys_traits.hh"
398
399#else
400    enum {
401        NumInternalProcRegs = 0
402    };
403#endif
404
405    enum {
406        TotalNumRegs =
407        NumIntRegs + NumFloatRegs + NumMiscRegs + NumInternalProcRegs
408    };
409
410    enum {
411        TotalDataRegs = NumIntRegs + NumFloatRegs
412    };
413
414    typedef union {
415        IntReg  intreg;
416        FloatReg   fpreg;
417        MiscReg ctrlreg;
418    } AnyReg;
419
420    struct RegFile {
421        IntRegFile intRegFile;		// (signed) integer register file
422        FloatRegFile floatRegFile;	// floating point register file
423        MiscRegFile miscRegs;		// control register file
424
425
426        Addr pc;			// program counter
427        Addr npc;			// next-cycle program counter
428        Addr nnpc;			// next-next-cycle program counter
429                                        // used to implement branch delay slot
430                                        // not real register
431
432        MiscReg hi;                     // MIPS HI Register
433        MiscReg lo;                     // MIPS LO Register
434
435
436#if FULL_SYSTEM
437        IntReg palregs[NumIntRegs];	// PAL shadow registers
438        InternalProcReg ipr[NumInternalProcRegs]; // internal processor regs
439        int intrflag;			// interrupt flag
440        bool pal_shadow;		// using pal_shadow registers
441        inline int instAsid() { return MIPS34K::ITB_ASN_ASN(ipr[IPR_ITB_ASN]); }
442        inline int dataAsid() { return MIPS34K::DTB_ASN_ASN(ipr[IPR_DTB_ASN]); }
443#endif // FULL_SYSTEM
444
445        //void initCP0Regs();
446        void serialize(std::ostream &os);
447        void unserialize(Checkpoint *cp, const std::string &section);
448
449        void createCP0Regs();
450        void coldReset();
451    };
452
453    StaticInstPtr decodeInst(ExtMachInst);
454
455    // return a no-op instruction... used for instruction fetch faults
456    extern const MachInst NoopMachInst;
457
458    enum annotes {
459        ANNOTE_NONE = 0,
460        // An impossible number for instruction annotations
461        ITOUCH_ANNOTE = 0xffffffff,
462    };
463
464//void getMiscRegIdx(int reg_name,int &idx, int &sel);
465
466    static inline ExtMachInst
467    makeExtMI(MachInst inst, const uint64_t &pc) {
468#if FULL_SYSTEM
469        ExtMachInst ext_inst = inst;
470        if (pc && 0x1)
471            return ext_inst|=(static_cast<ExtMachInst>(pc & 0x1) << 32);
472        else
473            return ext_inst;
474#else
475        return ExtMachInst(inst);
476#endif
477    }
478
479    static inline bool isCallerSaveIntegerRegister(unsigned int reg) {
480        panic("register classification not implemented");
481        return (reg >= 1 && reg <= 8 || reg >= 22 && reg <= 25 || reg == 27);
482    }
483
484    static inline bool isCalleeSaveIntegerRegister(unsigned int reg) {
485        panic("register classification not implemented");
486        return (reg >= 9 && reg <= 15);
487    }
488
489    static inline bool isCallerSaveFloatRegister(unsigned int reg) {
490        panic("register classification not implemented");
491        return false;
492    }
493
494    static inline bool isCalleeSaveFloatRegister(unsigned int reg) {
495        panic("register classification not implemented");
496        return false;
497    }
498
499    static inline Addr alignAddress(const Addr &addr,
500                                         unsigned int nbytes) {
501        return (addr & ~(nbytes - 1));
502    }
503
504    // Instruction address compression hooks
505    static inline Addr realPCToFetchPC(const Addr &addr) {
506        return addr;
507    }
508
509    static inline Addr fetchPCToRealPC(const Addr &addr) {
510        return addr;
511    }
512
513    // the size of "fetched" instructions (not necessarily the size
514    // of real instructions for PISA)
515    static inline size_t fetchInstSize() {
516        return sizeof(MachInst);
517    }
518
519    static inline MachInst makeRegisterCopy(int dest, int src) {
520        panic("makeRegisterCopy not implemented");
521        return 0;
522    }
523
524    static inline void setSyscallReturn(SyscallReturn return_value, RegFile *regs)
525    {
526        // check for error condition.  SPARC syscall convention is to
527        // indicate success/failure in reg the carry bit of the ccr
528        // and put the return value itself in the standard return value reg ().
529        if (return_value.successful()) {
530            // no error
531            //regs->miscRegFile.ccrFields.iccFields.c = 0;
532            regs->intRegFile[ReturnValueReg] = return_value.value();
533        } else {
534            // got an error, return details
535            //regs->miscRegFile.ccrFields.iccFields.c = 1;
536            regs->intRegFile[ReturnValueReg] = -return_value.value();
537        }
538    }
539
540    // Machine operations
541
542    void saveMachineReg(AnyReg &savereg, const RegFile &reg_file,
543                               int regnum);
544
545    void restoreMachineReg(RegFile &regs, const AnyReg &reg,
546                                  int regnum);
547
548#if 0
549    static void serializeSpecialRegs(const Serializable::Proxy &proxy,
550                                     const RegFile &regs);
551
552    static void unserializeSpecialRegs(const IniFile *db,
553                                       const std::string &category,
554                                       ConfigNode *node,
555                                       RegFile &regs);
556#endif
557
558    /**
559     * Function to insure ISA semantics about 0 registers.
560     * @param xc The execution context.
561     */
562    template <class XC>
563    void zeroRegisters(XC *xc);
564
565    const Addr MaxAddr = (Addr)-1;
566};
567
568#if FULL_SYSTEM
569//typedef TheISA::InternalProcReg InternalProcReg;
570//const int NumInternalProcRegs  = TheISA::NumInternalProcRegs;
571//const int NumInterruptLevels = TheISA::NumInterruptLevels;
572
573#include "arch/mips/mips34k.hh"
574#endif
575
576using namespace MipsISA;
577
578#endif // __ARCH_MIPS_ISA_TRAITS_HH__
579