isa_traits.hh revision 8412
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
378229Snate@binkert.org#include "arch/mips/mips_core_specific.hh"
382597SN/A#include "arch/mips/types.hh"
396216Snate@binkert.org#include "base/types.hh"
405222Sksewell@umich.edu#include "config/full_system.hh"
412023SN/A
427811Ssteve.reinhardt@amd.comnamespace LittleEndianGuest {}
432239SN/A
442131SN/Aclass StaticInstPtr;
452023SN/A
462131SN/Anamespace MipsISA
472023SN/A{
482525SN/A
496378Sgblack@eecs.umich.eduusing namespace LittleEndianGuest;
502023SN/A
516378Sgblack@eecs.umich.eduStaticInstPtr decodeInst(ExtMachInst);
523093Sksewell@umich.edu
536378Sgblack@eecs.umich.edu// MIPS DOES have a delay slot
546378Sgblack@eecs.umich.edu#define ISA_HAS_DELAY_SLOT 1
552239SN/A
566378Sgblack@eecs.umich.educonst Addr PageShift = 13;
576378Sgblack@eecs.umich.educonst Addr PageBytes = ULL(1) << PageShift;
586378Sgblack@eecs.umich.educonst Addr Page_Mask = ~(PageBytes - 1);
596378Sgblack@eecs.umich.educonst Addr PageOffset = PageBytes - 1;
605222Sksewell@umich.edu
615222Sksewell@umich.edu
626378Sgblack@eecs.umich.edu////////////////////////////////////////////////////////////////////////
636378Sgblack@eecs.umich.edu//
646378Sgblack@eecs.umich.edu//  Translation stuff
656378Sgblack@eecs.umich.edu//
665222Sksewell@umich.edu
676378Sgblack@eecs.umich.educonst Addr PteShift = 3;
686378Sgblack@eecs.umich.educonst Addr NPtePageShift = PageShift - PteShift;
696378Sgblack@eecs.umich.educonst Addr NPtePage = ULL(1) << NPtePageShift;
706378Sgblack@eecs.umich.educonst Addr PteMask = NPtePage - 1;
715222Sksewell@umich.edu
726378Sgblack@eecs.umich.edu//// All 'Mapped' segments go through the TLB
736378Sgblack@eecs.umich.edu//// All other segments are translated by dropping the MSB, to give
746378Sgblack@eecs.umich.edu//// the corresponding physical address
756378Sgblack@eecs.umich.edu// User Segment - Mapped
766378Sgblack@eecs.umich.educonst Addr USegBase = ULL(0x0);
776378Sgblack@eecs.umich.educonst Addr USegEnd = ULL(0x7FFFFFFF);
785222Sksewell@umich.edu
796378Sgblack@eecs.umich.edu// Kernel Segment 0 - Unmapped
806378Sgblack@eecs.umich.educonst Addr KSeg0End = ULL(0x9FFFFFFF);
816378Sgblack@eecs.umich.educonst Addr KSeg0Base =  ULL(0x80000000);
826378Sgblack@eecs.umich.educonst Addr KSeg0Mask = ULL(0x1FFFFFFF);
835222Sksewell@umich.edu
846378Sgblack@eecs.umich.edu// Kernel Segment 1 - Unmapped, Uncached
856378Sgblack@eecs.umich.educonst Addr KSeg1End = ULL(0xBFFFFFFF);
866378Sgblack@eecs.umich.educonst Addr KSeg1Base = ULL(0xA0000000);
876378Sgblack@eecs.umich.educonst Addr KSeg1Mask = ULL(0x1FFFFFFF);
885222Sksewell@umich.edu
896378Sgblack@eecs.umich.edu// Kernel/Supervisor Segment - Mapped
906378Sgblack@eecs.umich.educonst Addr KSSegEnd = ULL(0xDFFFFFFF);
916378Sgblack@eecs.umich.educonst Addr KSSegBase = ULL(0xC0000000);
925222Sksewell@umich.edu
936378Sgblack@eecs.umich.edu// Kernel Segment 3 - Mapped
946378Sgblack@eecs.umich.educonst Addr KSeg3End = ULL(0xFFFFFFFF);
956378Sgblack@eecs.umich.educonst Addr KSeg3Base = ULL(0xE0000000);
965222Sksewell@umich.edu
975222Sksewell@umich.edu
986378Sgblack@eecs.umich.eduinline Addr Phys2K0Seg(Addr addr)
996378Sgblack@eecs.umich.edu{
1006378Sgblack@eecs.umich.edu    return addr | KSeg0Base;
1016378Sgblack@eecs.umich.edu}
1025254Sksewell@umich.edu
1035254Sksewell@umich.edu
1046378Sgblack@eecs.umich.educonst unsigned VABits = 32;
1056378Sgblack@eecs.umich.educonst unsigned PABits = 32; // Is this correct?
1066378Sgblack@eecs.umich.educonst Addr VAddrImplMask = (ULL(1) << VABits) - 1;
1076378Sgblack@eecs.umich.educonst Addr VAddrUnImplMask = ~VAddrImplMask;
1086378Sgblack@eecs.umich.eduinline Addr VAddrImpl(Addr a) { return a & VAddrImplMask; }
1096378Sgblack@eecs.umich.eduinline Addr VAddrVPN(Addr a) { return a >> MipsISA::PageShift; }
1106378Sgblack@eecs.umich.eduinline Addr VAddrOffset(Addr a) { return a & MipsISA::PageOffset; }
1115254Sksewell@umich.edu
1126378Sgblack@eecs.umich.educonst Addr PAddrImplMask = (ULL(1) << PABits) - 1;
1135222Sksewell@umich.edu
1146378Sgblack@eecs.umich.edu////////////////////////////////////////////////////////////////////////
1156378Sgblack@eecs.umich.edu//
1166378Sgblack@eecs.umich.edu//  Interrupt levels
1176378Sgblack@eecs.umich.edu//
1186378Sgblack@eecs.umich.eduenum InterruptLevels
1196378Sgblack@eecs.umich.edu{
1206378Sgblack@eecs.umich.edu    INTLEVEL_SOFTWARE_MIN = 4,
1216378Sgblack@eecs.umich.edu    INTLEVEL_SOFTWARE_MAX = 19,
1225222Sksewell@umich.edu
1236378Sgblack@eecs.umich.edu    INTLEVEL_EXTERNAL_MIN = 20,
1246378Sgblack@eecs.umich.edu    INTLEVEL_EXTERNAL_MAX = 34,
1255222Sksewell@umich.edu
1266378Sgblack@eecs.umich.edu    INTLEVEL_IRQ0 = 20,
1276378Sgblack@eecs.umich.edu    INTLEVEL_IRQ1 = 21,
1286378Sgblack@eecs.umich.edu    INTINDEX_ETHERNET = 0,
1296378Sgblack@eecs.umich.edu    INTINDEX_SCSI = 1,
1306378Sgblack@eecs.umich.edu    INTLEVEL_IRQ2 = 22,
1316378Sgblack@eecs.umich.edu    INTLEVEL_IRQ3 = 23,
1325222Sksewell@umich.edu
1336378Sgblack@eecs.umich.edu    INTLEVEL_SERIAL = 33,
1345222Sksewell@umich.edu
1356378Sgblack@eecs.umich.edu    NumInterruptLevels = INTLEVEL_EXTERNAL_MAX
1366378Sgblack@eecs.umich.edu};
1375222Sksewell@umich.edu
1386378Sgblack@eecs.umich.edu// MIPS modes
1396378Sgblack@eecs.umich.eduenum mode_type
1406378Sgblack@eecs.umich.edu{
1416378Sgblack@eecs.umich.edu    mode_kernel = 0,        // kernel
1426378Sgblack@eecs.umich.edu    mode_supervisor = 1,    // supervisor
1436378Sgblack@eecs.umich.edu    mode_user = 2,          // user mode
1446378Sgblack@eecs.umich.edu    mode_debug = 3,         // debug mode
1456378Sgblack@eecs.umich.edu    mode_number             // number of modes
1466378Sgblack@eecs.umich.edu};
1472131SN/A
1486378Sgblack@eecs.umich.edu// return a no-op instruction... used for instruction fetch faults
1496378Sgblack@eecs.umich.educonst ExtMachInst NoopMachInst = 0x00000000;
1502131SN/A
1516378Sgblack@eecs.umich.educonst int LogVMPageSize = 13;       // 8K bytes
1526378Sgblack@eecs.umich.educonst int VMPageSize = (1 << LogVMPageSize);
1532131SN/A
1546378Sgblack@eecs.umich.educonst int BranchPredAddrShiftAmt = 2; // instructions are 4-byte aligned
1552131SN/A
1566378Sgblack@eecs.umich.educonst int MachineBytes = 4;
1576378Sgblack@eecs.umich.educonst int WordBytes = 4;
1586378Sgblack@eecs.umich.educonst int HalfwordBytes = 2;
1596378Sgblack@eecs.umich.educonst int ByteBytes = 1;
1606378Sgblack@eecs.umich.edu
1616378Sgblack@eecs.umich.educonst int ANNOTE_NONE = 0;
1626378Sgblack@eecs.umich.educonst uint32_t ITOUCH_ANNOTE = 0xffffffff;
1636378Sgblack@eecs.umich.edu
1648412Sksewell@umich.educonst bool HasUnalignedMemAcc = true;
1656974Stjones1@inf.ed.ac.uk
1667811Ssteve.reinhardt@amd.com} // namespace MipsISA
1672023SN/A
1682028SN/A#endif // __ARCH_MIPS_ISA_TRAITS_HH__
169