74584d79b6
Some breakage was from my BitUnion change, some was much older.
330 lines
8.5 KiB
C++
Executable file
330 lines
8.5 KiB
C++
Executable file
/*
|
|
* Copyright (c) 2007 MIPS Technologies, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met: redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer;
|
|
* redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution;
|
|
* neither the name of the copyright holders nor the names of its
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* Authors: Jaidev Patwardhan
|
|
*/
|
|
|
|
#ifndef __ARCH_MIPS_PRA_CONSTANTS_HH__
|
|
#define __ARCH_MIPS_PRA_CONSTANTS_HH__
|
|
|
|
#include "arch/mips/types.hh"
|
|
#include "base/bitunion.hh"
|
|
|
|
namespace MipsISA
|
|
{
|
|
|
|
BitUnion32(IndexReg)
|
|
Bitfield<31> p;
|
|
// Need to figure out how to put in the TLB specific bits here
|
|
// For now, we assume that the entire length is used by the index
|
|
// field In reality, Index_HI = N-1, where
|
|
// N = Ceiling(log2(TLB Entries))
|
|
Bitfield<30, 0> index;
|
|
EndBitUnion(IndexReg)
|
|
|
|
BitUnion32(RandomReg)
|
|
// This has a problem similar to the IndexReg index field. We'll keep
|
|
// both consistent at 30 for now
|
|
Bitfield<30, 0> random;
|
|
EndBitUnion(RandomReg)
|
|
|
|
BitUnion64(EntryLoReg)
|
|
Bitfield<63, 30> fill;
|
|
Bitfield<29, 6> pfn; // Page frame number
|
|
Bitfield<5, 3> c; // Coherency attribute
|
|
Bitfield<2> d; // Dirty Bit
|
|
Bitfield<1> v; // Valid Bit
|
|
Bitfield<0> g; // Global Bit
|
|
EndBitUnion(EntryLoReg)
|
|
|
|
BitUnion64(ContextReg)
|
|
Bitfield<63, 23> pteBase;
|
|
Bitfield<22, 4> badVPN2;
|
|
// Bits 3-0 are 0
|
|
EndBitUnion(ContextReg)
|
|
|
|
BitUnion32(PageMaskReg)
|
|
// Bits 31-29 are 0
|
|
Bitfield<28, 13> mask;
|
|
Bitfield<12, 11> maskx;
|
|
// Bits 10-0 are zero
|
|
EndBitUnion(PageMaskReg)
|
|
|
|
BitUnion32(PageGrainReg)
|
|
Bitfield<31, 30> aseUp;
|
|
Bitfield<29> elpa;
|
|
Bitfield<28> esp;
|
|
// Bits 27-13 are zeros
|
|
Bitfield<12, 8> aseDn;
|
|
// Bits 7-0 are zeros
|
|
EndBitUnion(PageGrainReg)
|
|
|
|
BitUnion32(WiredReg)
|
|
// See note on Index register above
|
|
Bitfield<30, 0> wired;
|
|
EndBitUnion(WiredReg)
|
|
|
|
BitUnion32(HWREnaReg)
|
|
Bitfield<31, 30> impl;
|
|
Bitfield<3, 0> mask;
|
|
EndBitUnion(HWREnaReg)
|
|
|
|
BitUnion64(EntryHiReg)
|
|
Bitfield<63, 62> r;
|
|
Bitfield<61, 40> fill;
|
|
Bitfield<39, 13> vpn2;
|
|
Bitfield<12, 11> vpn2x;
|
|
Bitfield<7, 0> asid;
|
|
EndBitUnion(EntryHiReg)
|
|
|
|
BitUnion32(StatusReg)
|
|
SubBitUnion(cu, 31, 28)
|
|
Bitfield<31> cu3;
|
|
Bitfield<30> cu2;
|
|
Bitfield<29> cu1;
|
|
Bitfield<28> cu0;
|
|
EndSubBitUnion(cu)
|
|
Bitfield<27> rp;
|
|
Bitfield<26> fr;
|
|
Bitfield<25> re;
|
|
Bitfield<24> mx;
|
|
Bitfield<23> px;
|
|
Bitfield<22> bev;
|
|
Bitfield<21> ts;
|
|
Bitfield<20> sr;
|
|
Bitfield<19> nmi;
|
|
// Bit 18 is zero
|
|
Bitfield<17, 16> impl;
|
|
Bitfield<15, 10> ipl;
|
|
SubBitUnion(im, 15, 8)
|
|
Bitfield<15> im7;
|
|
Bitfield<14> im6;
|
|
Bitfield<13> im5;
|
|
Bitfield<12> im4;
|
|
Bitfield<11> im3;
|
|
Bitfield<10> im2;
|
|
Bitfield<9> im1;
|
|
Bitfield<8> im0;
|
|
EndSubBitUnion(im)
|
|
Bitfield<7> kx;
|
|
Bitfield<6> sx;
|
|
Bitfield<5> ux;
|
|
Bitfield<4, 3> ksu;
|
|
Bitfield<4> um;
|
|
Bitfield<3> r0;
|
|
Bitfield<2> erl;
|
|
Bitfield<1> exl;
|
|
Bitfield<0> ie;
|
|
EndBitUnion(StatusReg)
|
|
|
|
BitUnion32(IntCtlReg)
|
|
Bitfield<31, 29> ipti;
|
|
Bitfield<28, 26> ippci;
|
|
// Bits 26-10 are zeros
|
|
Bitfield<9, 5> vs;
|
|
// Bits 4-0 are zeros
|
|
EndBitUnion(IntCtlReg)
|
|
|
|
BitUnion32(SRSCtlReg)
|
|
// Bits 31-30 are zeros
|
|
Bitfield<29, 26> hss;
|
|
// Bits 25-22 are zeros
|
|
Bitfield<21, 18> eicss;
|
|
// Bits 17-16 are zeros
|
|
Bitfield<15, 12> ess;
|
|
// Bits 11-10 are zeros
|
|
Bitfield<9, 6> pss;
|
|
// Bits 5-4 are zeros
|
|
Bitfield<3, 0> css;
|
|
EndBitUnion(SRSCtlReg)
|
|
|
|
BitUnion32(SRSMapReg)
|
|
Bitfield<31, 28> ssv7;
|
|
Bitfield<27, 24> ssv6;
|
|
Bitfield<23, 20> ssv5;
|
|
Bitfield<19, 16> ssv4;
|
|
Bitfield<15, 12> ssv3;
|
|
Bitfield<11, 8> ssv2;
|
|
Bitfield<7, 4> ssv1;
|
|
Bitfield<3, 0> ssv0;
|
|
EndBitUnion(SRSMapReg)
|
|
|
|
BitUnion32(CauseReg)
|
|
Bitfield<31> bd;
|
|
Bitfield<30> ti;
|
|
Bitfield<29, 28> ce;
|
|
Bitfield<27> dc;
|
|
Bitfield<26> pci;
|
|
// Bits 25-24 are zeros
|
|
Bitfield<23> iv;
|
|
Bitfield<22> wp;
|
|
// Bits 21-16 are zeros
|
|
Bitfield<15, 10> ripl;
|
|
SubBitUnion(ip, 15, 8)
|
|
Bitfield<15> ip7;
|
|
Bitfield<14> ip6;
|
|
Bitfield<13> ip5;
|
|
Bitfield<12> ip4;
|
|
Bitfield<11> ip3;
|
|
Bitfield<10> ip2;
|
|
Bitfield<9> ip1;
|
|
Bitfield<8> ip0;
|
|
EndSubBitUnion(ip);
|
|
// Bit 7 is zero
|
|
Bitfield<6, 2> excCode;
|
|
// Bits 1-0 are zeros
|
|
EndBitUnion(CauseReg)
|
|
|
|
BitUnion32(PRIdReg)
|
|
Bitfield<31, 24> coOp;
|
|
Bitfield<23, 16> coId;
|
|
Bitfield<15, 8> procId;
|
|
Bitfield<7, 0> rev;
|
|
EndBitUnion(PRIdReg)
|
|
|
|
BitUnion32(EBaseReg)
|
|
// Bit 31 is one
|
|
// Bit 30 is zero
|
|
Bitfield<29, 12> exceptionBase;
|
|
// Bits 11-10 are zeros
|
|
Bitfield<9, 9> cpuNum;
|
|
EndBitUnion(EBaseReg)
|
|
|
|
BitUnion32(ConfigReg)
|
|
Bitfield<31> m;
|
|
Bitfield<30, 28> k23;
|
|
Bitfield<27, 25> ku;
|
|
Bitfield<24, 16> impl;
|
|
Bitfield<15> be;
|
|
Bitfield<14, 13> at;
|
|
Bitfield<12, 10> ar;
|
|
Bitfield<9, 7> mt;
|
|
// Bits 6-4 are zeros
|
|
Bitfield<3> vi;
|
|
Bitfield<2, 0> k0;
|
|
EndBitUnion(ConfigReg)
|
|
|
|
BitUnion32(Config1Reg)
|
|
Bitfield<31> m;
|
|
Bitfield<30, 25> mmuSize;
|
|
Bitfield<24, 22> is;
|
|
Bitfield<21, 19> il;
|
|
Bitfield<18, 16> ia;
|
|
Bitfield<15, 13> ds;
|
|
Bitfield<12, 10> dl;
|
|
Bitfield<9, 7> da;
|
|
Bitfield<6> c2;
|
|
Bitfield<5> md;
|
|
Bitfield<4> pc;
|
|
Bitfield<3> wr;
|
|
Bitfield<2> ca;
|
|
Bitfield<1> ep;
|
|
Bitfield<0> fp;
|
|
EndBitUnion(Config1Reg)
|
|
|
|
BitUnion32(Config2Reg)
|
|
Bitfield<31> m;
|
|
Bitfield<30, 28> tu;
|
|
Bitfield<27, 24> ts;
|
|
Bitfield<23, 20> tl;
|
|
Bitfield<19, 16> ta;
|
|
Bitfield<15, 12> su;
|
|
Bitfield<11, 8> ss;
|
|
Bitfield<7, 4> sl;
|
|
Bitfield<3, 0> sa;
|
|
EndBitUnion(Config2Reg)
|
|
|
|
BitUnion32(Config3Reg)
|
|
Bitfield<31> m;
|
|
// Bits 30-11 are zeros
|
|
Bitfield<10> dspp;
|
|
// Bits 9-8 are zeros
|
|
Bitfield<7> lpa;
|
|
Bitfield<6> veic;
|
|
Bitfield<5> vint;
|
|
Bitfield<4> sp;
|
|
// Bit 3 is zero
|
|
Bitfield<2> mt;
|
|
Bitfield<1> sm;
|
|
Bitfield<0> tl;
|
|
EndBitUnion(Config3Reg)
|
|
|
|
BitUnion64(WatchLoReg)
|
|
Bitfield<63, 3> vaddr;
|
|
Bitfield<2> i;
|
|
Bitfield<1> r;
|
|
Bitfield<0> w;
|
|
EndBitUnion(WatchLoReg)
|
|
|
|
BitUnion32(WatchHiReg)
|
|
Bitfield<31> m;
|
|
Bitfield<30> g;
|
|
// Bits 29-24 are zeros
|
|
Bitfield<23, 16> asid;
|
|
// Bits 15-12 are zeros
|
|
Bitfield<11, 3> mask;
|
|
Bitfield<2> i;
|
|
Bitfield<1> r;
|
|
Bitfield<0> w;
|
|
EndBitUnion(WatchHiReg)
|
|
|
|
BitUnion32(PerfCntCtlReg)
|
|
Bitfield<31> m;
|
|
Bitfield<30> w;
|
|
// Bits 29-11 are zeros
|
|
Bitfield<10, 5> event;
|
|
Bitfield<4> ie;
|
|
Bitfield<3> u;
|
|
Bitfield<2> s;
|
|
Bitfield<1> k;
|
|
Bitfield<0> exl;
|
|
EndBitUnion(PerfCntCtlReg)
|
|
|
|
BitUnion32(CacheErrReg)
|
|
Bitfield<31> er;
|
|
Bitfield<30> ec;
|
|
Bitfield<29> ed;
|
|
Bitfield<28> et;
|
|
Bitfield<27> es;
|
|
Bitfield<26> ee;
|
|
Bitfield<25> eb;
|
|
Bitfield<24, 22> impl;
|
|
Bitfield<22, 0> index;
|
|
EndBitUnion(CacheErrReg)
|
|
|
|
BitUnion32(TagLoReg)
|
|
Bitfield<31, 8> pTagLo;
|
|
Bitfield<7, 6> pState;
|
|
Bitfield<5> l;
|
|
Bitfield<4, 3> impl;
|
|
// Bits 2-1 are zeros
|
|
Bitfield<0> p;
|
|
EndBitUnion(TagLoReg)
|
|
|
|
} // namespace MipsISA
|
|
|
|
#endif
|