isa_traits.hh revision 1858
110448Snilay@cs.wisc.edu/*
210448Snilay@cs.wisc.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
310448Snilay@cs.wisc.edu * All rights reserved.
410448Snilay@cs.wisc.edu *
510448Snilay@cs.wisc.edu * Redistribution and use in source and binary forms, with or without
610448Snilay@cs.wisc.edu * modification, are permitted provided that the following conditions are
710448Snilay@cs.wisc.edu * met: redistributions of source code must retain the above copyright
810448Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer;
910448Snilay@cs.wisc.edu * redistributions in binary form must reproduce the above copyright
1010448Snilay@cs.wisc.edu * notice, this list of conditions and the following disclaimer in the
1110448Snilay@cs.wisc.edu * documentation and/or other materials provided with the distribution;
1210448Snilay@cs.wisc.edu * neither the name of the copyright holders nor the names of its
1310448Snilay@cs.wisc.edu * contributors may be used to endorse or promote products derived from
1410448Snilay@cs.wisc.edu * this software without specific prior written permission.
1510448Snilay@cs.wisc.edu *
1610448Snilay@cs.wisc.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1710448Snilay@cs.wisc.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1810448Snilay@cs.wisc.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1910448Snilay@cs.wisc.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2010448Snilay@cs.wisc.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2110448Snilay@cs.wisc.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2210447Snilay@cs.wisc.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2310447Snilay@cs.wisc.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2410447Snilay@cs.wisc.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2510447Snilay@cs.wisc.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2610447Snilay@cs.wisc.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2710447Snilay@cs.wisc.edu */
2810447Snilay@cs.wisc.edu
2910447Snilay@cs.wisc.edu#ifndef __ARCH_ALPHA_ISA_TRAITS_HH__
3010447Snilay@cs.wisc.edu#define __ARCH_ALPHA_ISA_TRAITS_HH__
3110447Snilay@cs.wisc.edu
3210447Snilay@cs.wisc.edu#include "arch/alpha/faults.hh"
3310447Snilay@cs.wisc.edu#include "base/misc.hh"
3410447Snilay@cs.wisc.edu#include "config/full_system.hh"
3510447Snilay@cs.wisc.edu#include "sim/host.hh"
3610447Snilay@cs.wisc.edu
3710447Snilay@cs.wisc.educlass FastCPU;
3810447Snilay@cs.wisc.educlass FullCPU;
3910447Snilay@cs.wisc.educlass Checkpoint;
4010447Snilay@cs.wisc.edu
4110447Snilay@cs.wisc.edu#define TARGET_ALPHA
4210447Snilay@cs.wisc.edu
4310447Snilay@cs.wisc.edutemplate <class ISA> class StaticInst;
4410447Snilay@cs.wisc.edutemplate <class ISA> class StaticInstPtr;
4510447Snilay@cs.wisc.edu
4610447Snilay@cs.wisc.edunamespace EV5 {
4710447Snilay@cs.wisc.eduint DTB_ASN_ASN(uint64_t reg);
4810447Snilay@cs.wisc.eduint ITB_ASN_ASN(uint64_t reg);
4910447Snilay@cs.wisc.edu}
5010447Snilay@cs.wisc.edu
5110447Snilay@cs.wisc.educlass AlphaISA
5210447Snilay@cs.wisc.edu{
5310447Snilay@cs.wisc.edu  public:
5410447Snilay@cs.wisc.edu
5510447Snilay@cs.wisc.edu    typedef uint32_t MachInst;
5610447Snilay@cs.wisc.edu    typedef uint64_t Addr;
5710447Snilay@cs.wisc.edu    typedef uint8_t  RegIndex;
5810447Snilay@cs.wisc.edu
5910447Snilay@cs.wisc.edu    enum {
6010447Snilay@cs.wisc.edu        MemoryEnd = 0xffffffffffffffffULL,
6110447Snilay@cs.wisc.edu
6210447Snilay@cs.wisc.edu        NumIntRegs = 32,
6310447Snilay@cs.wisc.edu        NumFloatRegs = 32,
6410447Snilay@cs.wisc.edu        NumMiscRegs = 32,
6510447Snilay@cs.wisc.edu
6610447Snilay@cs.wisc.edu        MaxRegsOfAnyType = 32,
6710447Snilay@cs.wisc.edu        // Static instruction parameters
6810447Snilay@cs.wisc.edu        MaxInstSrcRegs = 3,
6910447Snilay@cs.wisc.edu        MaxInstDestRegs = 2,
7010447Snilay@cs.wisc.edu
7110447Snilay@cs.wisc.edu        // semantically meaningful register indices
7210447Snilay@cs.wisc.edu        ZeroReg = 31,	// architecturally meaningful
7310447Snilay@cs.wisc.edu        // the rest of these depend on the ABI
7410447Snilay@cs.wisc.edu        StackPointerReg = 30,
7510447Snilay@cs.wisc.edu        GlobalPointerReg = 29,
7610447Snilay@cs.wisc.edu        ReturnAddressReg = 26,
7710447Snilay@cs.wisc.edu        ReturnValueReg = 0,
7810447Snilay@cs.wisc.edu        ArgumentReg0 = 16,
7910447Snilay@cs.wisc.edu        ArgumentReg1 = 17,
8010447Snilay@cs.wisc.edu        ArgumentReg2 = 18,
8110447Snilay@cs.wisc.edu        ArgumentReg3 = 19,
8210447Snilay@cs.wisc.edu        ArgumentReg4 = 20,
8310447Snilay@cs.wisc.edu        ArgumentReg5 = 21,
8410447Snilay@cs.wisc.edu
8510447Snilay@cs.wisc.edu        LogVMPageSize = 13,	// 8K bytes
8610447Snilay@cs.wisc.edu        VMPageSize = (1 << LogVMPageSize),
8710447Snilay@cs.wisc.edu
8810447Snilay@cs.wisc.edu        BranchPredAddrShiftAmt = 2, // instructions are 4-byte aligned
8910447Snilay@cs.wisc.edu
9010447Snilay@cs.wisc.edu        WordBytes = 4,
9110447Snilay@cs.wisc.edu        HalfwordBytes = 2,
9210447Snilay@cs.wisc.edu        ByteBytes = 1,
9310447Snilay@cs.wisc.edu        DepNA = 0,
9410447Snilay@cs.wisc.edu    };
9510447Snilay@cs.wisc.edu
9610447Snilay@cs.wisc.edu    // These enumerate all the registers for dependence tracking.
9710447Snilay@cs.wisc.edu    enum DependenceTags {
9810447Snilay@cs.wisc.edu        // 0..31 are the integer regs 0..31
9910447Snilay@cs.wisc.edu        // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag)
10010447Snilay@cs.wisc.edu        FP_Base_DepTag = 32,
10110447Snilay@cs.wisc.edu        Ctrl_Base_DepTag = 64,
10210447Snilay@cs.wisc.edu        Fpcr_DepTag = 64,		// floating point control register
10310447Snilay@cs.wisc.edu        Uniq_DepTag = 65,
10410447Snilay@cs.wisc.edu        IPR_Base_DepTag = 66
10510447Snilay@cs.wisc.edu    };
10610447Snilay@cs.wisc.edu
10710447Snilay@cs.wisc.edu    typedef uint64_t IntReg;
10810447Snilay@cs.wisc.edu    typedef IntReg IntRegFile[NumIntRegs];
10910447Snilay@cs.wisc.edu
11010447Snilay@cs.wisc.edu    // floating point register file entry type
11110447Snilay@cs.wisc.edu    typedef union {
11210447Snilay@cs.wisc.edu        uint64_t q;
11310447Snilay@cs.wisc.edu        double d;
11410447Snilay@cs.wisc.edu    } FloatReg;
11510447Snilay@cs.wisc.edu
11610447Snilay@cs.wisc.edu    typedef union {
11710447Snilay@cs.wisc.edu        uint64_t q[NumFloatRegs];	// integer qword view
11810447Snilay@cs.wisc.edu        double d[NumFloatRegs];		// double-precision floating point view
11910447Snilay@cs.wisc.edu    } FloatRegFile;
12010447Snilay@cs.wisc.edu
12110447Snilay@cs.wisc.edu    // control register file contents
12210447Snilay@cs.wisc.edu    typedef uint64_t MiscReg;
12310447Snilay@cs.wisc.edu    typedef struct {
12410447Snilay@cs.wisc.edu        uint64_t	fpcr;		// floating point condition codes
12510447Snilay@cs.wisc.edu        uint64_t	uniq;		// process-unique register
12610447Snilay@cs.wisc.edu        bool		lock_flag;	// lock flag for LL/SC
12710447Snilay@cs.wisc.edu        Addr		lock_addr;	// lock address for LL/SC
12810447Snilay@cs.wisc.edu    } MiscRegFile;
12910447Snilay@cs.wisc.edu
13010447Snilay@cs.wisc.edustatic const Addr PageShift = 13;
13110447Snilay@cs.wisc.edustatic const Addr PageBytes = ULL(1) << PageShift;
13210447Snilay@cs.wisc.edustatic const Addr PageMask = ~(PageBytes - 1);
13310447Snilay@cs.wisc.edustatic const Addr PageOffset = PageBytes - 1;
13410447Snilay@cs.wisc.edu
13510447Snilay@cs.wisc.edu#if FULL_SYSTEM
13610447Snilay@cs.wisc.edu
13710447Snilay@cs.wisc.edu    typedef uint64_t InternalProcReg;
13810447Snilay@cs.wisc.edu
13910447Snilay@cs.wisc.edu#include "arch/alpha/isa_fullsys_traits.hh"
14010447Snilay@cs.wisc.edu
14110447Snilay@cs.wisc.edu#else
14210447Snilay@cs.wisc.edu    enum {
14310447Snilay@cs.wisc.edu        NumInternalProcRegs = 0
14410447Snilay@cs.wisc.edu    };
14510447Snilay@cs.wisc.edu#endif
14610447Snilay@cs.wisc.edu
14710447Snilay@cs.wisc.edu    enum {
14810447Snilay@cs.wisc.edu        TotalNumRegs =
14910447Snilay@cs.wisc.edu        NumIntRegs + NumFloatRegs + NumMiscRegs + NumInternalProcRegs
15010447Snilay@cs.wisc.edu    };
15110447Snilay@cs.wisc.edu
15210447Snilay@cs.wisc.edu    enum {
15310447Snilay@cs.wisc.edu        TotalDataRegs = NumIntRegs + NumFloatRegs
15410447Snilay@cs.wisc.edu    };
15510447Snilay@cs.wisc.edu
15610447Snilay@cs.wisc.edu    typedef union {
15710447Snilay@cs.wisc.edu        IntReg  intreg;
15810447Snilay@cs.wisc.edu        FloatReg   fpreg;
15910447Snilay@cs.wisc.edu        MiscReg ctrlreg;
16010447Snilay@cs.wisc.edu    } AnyReg;
16110447Snilay@cs.wisc.edu
16210447Snilay@cs.wisc.edu    struct RegFile {
16310447Snilay@cs.wisc.edu        IntRegFile intRegFile;		// (signed) integer register file
16410447Snilay@cs.wisc.edu        FloatRegFile floatRegFile;	// floating point register file
16510447Snilay@cs.wisc.edu        MiscRegFile miscRegs;		// control register file
16610447Snilay@cs.wisc.edu        Addr pc;			// program counter
16710447Snilay@cs.wisc.edu        Addr npc;			// next-cycle program counter
16810447Snilay@cs.wisc.edu#if FULL_SYSTEM
16910447Snilay@cs.wisc.edu        IntReg palregs[NumIntRegs];	// PAL shadow registers
17010447Snilay@cs.wisc.edu        InternalProcReg ipr[NumInternalProcRegs]; // internal processor regs
17110447Snilay@cs.wisc.edu        int intrflag;			// interrupt flag
17210447Snilay@cs.wisc.edu        bool pal_shadow;		// using pal_shadow registers
17310447Snilay@cs.wisc.edu        inline int instAsid() { return EV5::ITB_ASN_ASN(ipr[IPR_ITB_ASN]); }
17410447Snilay@cs.wisc.edu        inline int dataAsid() { return EV5::DTB_ASN_ASN(ipr[IPR_DTB_ASN]); }
17510447Snilay@cs.wisc.edu#endif // FULL_SYSTEM
17610447Snilay@cs.wisc.edu
17710447Snilay@cs.wisc.edu        void serialize(std::ostream &os);
17810447Snilay@cs.wisc.edu        void unserialize(Checkpoint *cp, const std::string &section);
17910447Snilay@cs.wisc.edu    };
18010447Snilay@cs.wisc.edu
18110447Snilay@cs.wisc.edu    static StaticInstPtr<AlphaISA> decodeInst(MachInst);
18210447Snilay@cs.wisc.edu
18310447Snilay@cs.wisc.edu    // return a no-op instruction... used for instruction fetch faults
18410447Snilay@cs.wisc.edu    static const MachInst NoopMachInst;
18510447Snilay@cs.wisc.edu
18610447Snilay@cs.wisc.edu    enum annotes {
18710447Snilay@cs.wisc.edu        ANNOTE_NONE = 0,
18810447Snilay@cs.wisc.edu        // An impossible number for instruction annotations
18910447Snilay@cs.wisc.edu        ITOUCH_ANNOTE = 0xffffffff,
19010447Snilay@cs.wisc.edu    };
19110447Snilay@cs.wisc.edu
19210447Snilay@cs.wisc.edu    static inline bool isCallerSaveIntegerRegister(unsigned int reg) {
19310447Snilay@cs.wisc.edu        panic("register classification not implemented");
19410447Snilay@cs.wisc.edu        return (reg >= 1 && reg <= 8 || reg >= 22 && reg <= 25 || reg == 27);
19510447Snilay@cs.wisc.edu    }
19610447Snilay@cs.wisc.edu
19710447Snilay@cs.wisc.edu    static inline bool isCalleeSaveIntegerRegister(unsigned int reg) {
19810447Snilay@cs.wisc.edu        panic("register classification not implemented");
19910447Snilay@cs.wisc.edu        return (reg >= 9 && reg <= 15);
20010447Snilay@cs.wisc.edu    }
20110447Snilay@cs.wisc.edu
20210447Snilay@cs.wisc.edu    static inline bool isCallerSaveFloatRegister(unsigned int reg) {
20310447Snilay@cs.wisc.edu        panic("register classification not implemented");
20410447Snilay@cs.wisc.edu        return false;
20510447Snilay@cs.wisc.edu    }
20610447Snilay@cs.wisc.edu
20710447Snilay@cs.wisc.edu    static inline bool isCalleeSaveFloatRegister(unsigned int reg) {
20810447Snilay@cs.wisc.edu        panic("register classification not implemented");
20910447Snilay@cs.wisc.edu        return false;
21010447Snilay@cs.wisc.edu    }
21110447Snilay@cs.wisc.edu
21210447Snilay@cs.wisc.edu    static inline Addr alignAddress(const Addr &addr,
21310447Snilay@cs.wisc.edu                                         unsigned int nbytes) {
21410447Snilay@cs.wisc.edu        return (addr & ~(nbytes - 1));
21510447Snilay@cs.wisc.edu    }
21610447Snilay@cs.wisc.edu
21710447Snilay@cs.wisc.edu    // Instruction address compression hooks
21810447Snilay@cs.wisc.edu    static inline Addr realPCToFetchPC(const Addr &addr) {
21910447Snilay@cs.wisc.edu        return addr;
22010447Snilay@cs.wisc.edu    }
22110447Snilay@cs.wisc.edu
22210447Snilay@cs.wisc.edu    static inline Addr fetchPCToRealPC(const Addr &addr) {
22310447Snilay@cs.wisc.edu        return addr;
22410447Snilay@cs.wisc.edu    }
22510447Snilay@cs.wisc.edu
22610447Snilay@cs.wisc.edu    // the size of "fetched" instructions (not necessarily the size
22710447Snilay@cs.wisc.edu    // of real instructions for PISA)
22810447Snilay@cs.wisc.edu    static inline size_t fetchInstSize() {
22910447Snilay@cs.wisc.edu        return sizeof(MachInst);
23010447Snilay@cs.wisc.edu    }
23110447Snilay@cs.wisc.edu
23210447Snilay@cs.wisc.edu    static inline MachInst makeRegisterCopy(int dest, int src) {
23310447Snilay@cs.wisc.edu        panic("makeRegisterCopy not implemented");
23410447Snilay@cs.wisc.edu        return 0;
23510447Snilay@cs.wisc.edu    }
23610447Snilay@cs.wisc.edu
23710447Snilay@cs.wisc.edu    // Machine operations
23810447Snilay@cs.wisc.edu
23910447Snilay@cs.wisc.edu    static void saveMachineReg(AnyReg &savereg, const RegFile &reg_file,
24010447Snilay@cs.wisc.edu                               int regnum);
24110447Snilay@cs.wisc.edu
24210447Snilay@cs.wisc.edu    static void restoreMachineReg(RegFile &regs, const AnyReg &reg,
24310447Snilay@cs.wisc.edu                                  int regnum);
24410447Snilay@cs.wisc.edu
24510447Snilay@cs.wisc.edu#if 0
24610447Snilay@cs.wisc.edu    static void serializeSpecialRegs(const Serializable::Proxy &proxy,
24710447Snilay@cs.wisc.edu                                     const RegFile &regs);
24810447Snilay@cs.wisc.edu
24910447Snilay@cs.wisc.edu    static void unserializeSpecialRegs(const IniFile *db,
25010447Snilay@cs.wisc.edu                                       const std::string &category,
25110447Snilay@cs.wisc.edu                                       ConfigNode *node,
25210447Snilay@cs.wisc.edu                                       RegFile &regs);
25310447Snilay@cs.wisc.edu#endif
25410447Snilay@cs.wisc.edu
25510447Snilay@cs.wisc.edu    /**
25610447Snilay@cs.wisc.edu     * Function to insure ISA semantics about 0 registers.
25710447Snilay@cs.wisc.edu     * @param xc The execution context.
25810447Snilay@cs.wisc.edu     */
25910447Snilay@cs.wisc.edu    template <class XC>
26010447Snilay@cs.wisc.edu    static void zeroRegisters(XC *xc);
26110447Snilay@cs.wisc.edu};
26210447Snilay@cs.wisc.edu
26310447Snilay@cs.wisc.edu
26410447Snilay@cs.wisc.edutypedef AlphaISA TheISA;
26510447Snilay@cs.wisc.edu
26610447Snilay@cs.wisc.edutypedef TheISA::MachInst MachInst;
26710447Snilay@cs.wisc.edutypedef TheISA::Addr Addr;
26810447Snilay@cs.wisc.edutypedef TheISA::RegIndex RegIndex;
26910447Snilay@cs.wisc.edutypedef TheISA::IntReg IntReg;
27010447Snilay@cs.wisc.edutypedef TheISA::IntRegFile IntRegFile;
27110447Snilay@cs.wisc.edutypedef TheISA::FloatReg FloatReg;
27210447Snilay@cs.wisc.edutypedef TheISA::FloatRegFile FloatRegFile;
27310447Snilay@cs.wisc.edutypedef TheISA::MiscReg MiscReg;
27410447Snilay@cs.wisc.edutypedef TheISA::MiscRegFile MiscRegFile;
27510447Snilay@cs.wisc.edutypedef TheISA::AnyReg AnyReg;
27610447Snilay@cs.wisc.edutypedef TheISA::RegFile RegFile;
27710447Snilay@cs.wisc.edu
27810447Snilay@cs.wisc.educonst int NumIntRegs   = TheISA::NumIntRegs;
27910447Snilay@cs.wisc.educonst int NumFloatRegs = TheISA::NumFloatRegs;
28010447Snilay@cs.wisc.educonst int NumMiscRegs  = TheISA::NumMiscRegs;
28110447Snilay@cs.wisc.educonst int TotalNumRegs = TheISA::TotalNumRegs;
28210447Snilay@cs.wisc.educonst int VMPageSize   = TheISA::VMPageSize;
28310447Snilay@cs.wisc.educonst int LogVMPageSize   = TheISA::LogVMPageSize;
28410447Snilay@cs.wisc.educonst int ZeroReg = TheISA::ZeroReg;
28510447Snilay@cs.wisc.educonst int StackPointerReg = TheISA::StackPointerReg;
28610447Snilay@cs.wisc.educonst int GlobalPointerReg = TheISA::GlobalPointerReg;
28710447Snilay@cs.wisc.educonst int ReturnAddressReg = TheISA::ReturnAddressReg;
28810447Snilay@cs.wisc.educonst int ReturnValueReg = TheISA::ReturnValueReg;
28910447Snilay@cs.wisc.educonst int ArgumentReg0 = TheISA::ArgumentReg0;
29010447Snilay@cs.wisc.educonst int ArgumentReg1 = TheISA::ArgumentReg1;
29110447Snilay@cs.wisc.educonst int ArgumentReg2 = TheISA::ArgumentReg2;
29210447Snilay@cs.wisc.educonst int BranchPredAddrShiftAmt = TheISA::BranchPredAddrShiftAmt;
29310447Snilay@cs.wisc.educonst int MaxAddr = (Addr)-1;
29410447Snilay@cs.wisc.edu
29510447Snilay@cs.wisc.edu#if !FULL_SYSTEM
29610447Snilay@cs.wisc.educlass SyscallReturn {
29710447Snilay@cs.wisc.edu        public:
29810447Snilay@cs.wisc.edu           template <class T>
29910447Snilay@cs.wisc.edu           SyscallReturn(T v, bool s)
30010447Snilay@cs.wisc.edu           {
30110447Snilay@cs.wisc.edu               retval = (uint64_t)v;
30210447Snilay@cs.wisc.edu               success = s;
30310447Snilay@cs.wisc.edu           }
30410447Snilay@cs.wisc.edu
30510447Snilay@cs.wisc.edu           template <class T>
30610447Snilay@cs.wisc.edu           SyscallReturn(T v)
30710447Snilay@cs.wisc.edu           {
30810447Snilay@cs.wisc.edu               success = (v >= 0);
30910447Snilay@cs.wisc.edu               retval = (uint64_t)v;
31010447Snilay@cs.wisc.edu           }
31110447Snilay@cs.wisc.edu
31210447Snilay@cs.wisc.edu           ~SyscallReturn() {}
31310447Snilay@cs.wisc.edu
31410447Snilay@cs.wisc.edu           SyscallReturn& operator=(const SyscallReturn& s) {
31510447Snilay@cs.wisc.edu               retval = s.retval;
31610447Snilay@cs.wisc.edu               success = s.success;
31710447Snilay@cs.wisc.edu               return *this;
31810447Snilay@cs.wisc.edu           }
31910447Snilay@cs.wisc.edu
32010447Snilay@cs.wisc.edu           bool successful() { return success; }
32110447Snilay@cs.wisc.edu           uint64_t value() { return retval; }
32210447Snilay@cs.wisc.edu
32310447Snilay@cs.wisc.edu
32410447Snilay@cs.wisc.edu       private:
32510447Snilay@cs.wisc.edu           uint64_t retval;
32610447Snilay@cs.wisc.edu           bool success;
32710447Snilay@cs.wisc.edu};
32810447Snilay@cs.wisc.edu
32910447Snilay@cs.wisc.edu#endif
33010447Snilay@cs.wisc.edu
33110447Snilay@cs.wisc.edu
33210447Snilay@cs.wisc.edu#if FULL_SYSTEM
33310447Snilay@cs.wisc.edutypedef TheISA::InternalProcReg InternalProcReg;
33410447Snilay@cs.wisc.educonst int NumInternalProcRegs  = TheISA::NumInternalProcRegs;
33510447Snilay@cs.wisc.educonst int NumInterruptLevels = TheISA::NumInterruptLevels;
33610447Snilay@cs.wisc.edu
33710447Snilay@cs.wisc.edu#include "arch/alpha/ev5.hh"
33810447Snilay@cs.wisc.edu#endif
33910447Snilay@cs.wisc.edu
34010447Snilay@cs.wisc.edu#endif // __ARCH_ALPHA_ISA_TRAITS_HH__
34110447Snilay@cs.wisc.edu