registers.hh revision 12104
111723Sar4jc@virginia.edu/* 211723Sar4jc@virginia.edu * Copyright (c) 2013 ARM Limited 311723Sar4jc@virginia.edu * Copyright (c) 2014-2015 Sven Karlsson 411723Sar4jc@virginia.edu * All rights reserved 511723Sar4jc@virginia.edu * 611723Sar4jc@virginia.edu * The license below extends only to copyright in the software and shall 711723Sar4jc@virginia.edu * not be construed as granting a license to any other intellectual 811723Sar4jc@virginia.edu * property including but not limited to intellectual property relating 911723Sar4jc@virginia.edu * to a hardware implementation of the functionality of the software 1011723Sar4jc@virginia.edu * licensed hereunder. You may use the software subject to the license 1111723Sar4jc@virginia.edu * terms below provided that you ensure that this notice is replicated 1211723Sar4jc@virginia.edu * unmodified and in its entirety in all distributions of the software, 1311723Sar4jc@virginia.edu * modified or unmodified, in source code or in binary form. 1411723Sar4jc@virginia.edu * 1511723Sar4jc@virginia.edu * Copyright (c) 2016 RISC-V Foundation 1611723Sar4jc@virginia.edu * Copyright (c) 2016 The University of Virginia 1711723Sar4jc@virginia.edu * All rights reserved. 1811723Sar4jc@virginia.edu * 1911723Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 2011723Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 2111723Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 2211723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 2311723Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 2411723Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 2511723Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 2611723Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 2711723Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 2811723Sar4jc@virginia.edu * this software without specific prior written permission. 2911723Sar4jc@virginia.edu * 3011723Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3111723Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3211723Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 3311723Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3411723Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3511723Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3611723Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3711723Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3811723Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3911723Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 4011723Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4111723Sar4jc@virginia.edu * 4211723Sar4jc@virginia.edu * Authors: Andreas Hansson 4311723Sar4jc@virginia.edu * Sven Karlsson 4411723Sar4jc@virginia.edu * Alec Roelke 4511723Sar4jc@virginia.edu */ 4611723Sar4jc@virginia.edu 4711723Sar4jc@virginia.edu#ifndef __ARCH_RISCV_REGISTERS_HH__ 4811723Sar4jc@virginia.edu#define __ARCH_RISCV_REGISTERS_HH__ 4911723Sar4jc@virginia.edu 5011723Sar4jc@virginia.edu#include <map> 5111723Sar4jc@virginia.edu#include <string> 5211723Sar4jc@virginia.edu 5312104Snathanael.premillieu@arm.com#include "arch/generic/types.hh" 5411911SBrandon.Potter@amd.com#include "arch/isa_traits.hh" 5511723Sar4jc@virginia.edu#include "arch/riscv/generated/max_inst_regs.hh" 5611723Sar4jc@virginia.edu#include "base/types.hh" 5711723Sar4jc@virginia.edu 5811723Sar4jc@virginia.edunamespace RiscvISA { 5911723Sar4jc@virginia.edu 6011723Sar4jc@virginia.eduusing RiscvISAInst::MaxInstSrcRegs; 6111723Sar4jc@virginia.eduusing RiscvISAInst::MaxInstDestRegs; 6211723Sar4jc@virginia.educonst int MaxMiscDestRegs = 1; 6311723Sar4jc@virginia.edu 6411723Sar4jc@virginia.edutypedef uint64_t IntReg; 6511723Sar4jc@virginia.edutypedef uint64_t FloatRegBits; 6611723Sar4jc@virginia.edutypedef double FloatReg; 6711723Sar4jc@virginia.edutypedef uint8_t CCReg; // Not applicable to Riscv 6811723Sar4jc@virginia.edutypedef uint64_t MiscReg; 6911723Sar4jc@virginia.edu 7011723Sar4jc@virginia.educonst int NumIntArchRegs = 32; 7111726Sar4jc@virginia.educonst int NumMicroIntRegs = 1; 7211726Sar4jc@virginia.educonst int NumIntRegs = NumIntArchRegs + NumMicroIntRegs; 7311725Sar4jc@virginia.educonst int NumFloatRegs = 32; 7411723Sar4jc@virginia.educonst int NumCCRegs = 0; 7511723Sar4jc@virginia.educonst int NumMiscRegs = 4096; 7611723Sar4jc@virginia.edu 7711723Sar4jc@virginia.edu// Semantically meaningful register indices 7811723Sar4jc@virginia.educonst int ZeroReg = 0; 7911723Sar4jc@virginia.educonst int ReturnAddrReg = 1; 8011723Sar4jc@virginia.educonst int StackPointerReg = 2; 8111723Sar4jc@virginia.educonst int GlobalPointerReg = 3; 8211723Sar4jc@virginia.educonst int ThreadPointerReg = 4; 8311723Sar4jc@virginia.educonst int FramePointerReg = 8; 8411723Sar4jc@virginia.educonst int ReturnValueRegs[] = {10, 11}; 8511723Sar4jc@virginia.educonst int ReturnValueReg = ReturnValueRegs[0]; 8611723Sar4jc@virginia.educonst int ArgumentRegs[] = {10, 11, 12, 13, 14, 15, 16, 17}; 8711726Sar4jc@virginia.educonst int AMOTempReg = 32; 8811723Sar4jc@virginia.edu 8911723Sar4jc@virginia.educonst char* const RegisterNames[] = {"zero", "ra", "sp", "gp", 9011723Sar4jc@virginia.edu "tp", "t0", "t1", "t2", 9111723Sar4jc@virginia.edu "s0", "s1", "a0", "a1", 9211723Sar4jc@virginia.edu "a2", "a3", "a4", "a5", 9311723Sar4jc@virginia.edu "a6", "a7", "s2", "s3", 9411723Sar4jc@virginia.edu "s4", "s5", "s6", "s7", 9511723Sar4jc@virginia.edu "s8", "s9", "s10", "s11", 9611723Sar4jc@virginia.edu "t3", "t4", "t5", "t6"}; 9711723Sar4jc@virginia.edu 9811723Sar4jc@virginia.educonst int SyscallNumReg = ArgumentRegs[7]; 9911723Sar4jc@virginia.educonst int SyscallArgumentRegs[] = {ArgumentRegs[0], ArgumentRegs[1], 10011723Sar4jc@virginia.edu ArgumentRegs[2], ArgumentRegs[3]}; 10111723Sar4jc@virginia.educonst int SyscallPseudoReturnReg = ReturnValueRegs[0]; 10211723Sar4jc@virginia.edu 10311963Sar4jc@virginia.educonst int NumHpmcounter = 29; 10411963Sar4jc@virginia.educonst int NumHpmcounterh = 29; 10511963Sar4jc@virginia.educonst int NumMhpmcounter = 29; 10611963Sar4jc@virginia.educonst int NumMhpmevent = 29; 10711723Sar4jc@virginia.eduenum MiscRegIndex { 10811963Sar4jc@virginia.edu MISCREG_USTATUS = 0x000, 10911963Sar4jc@virginia.edu MISCREG_UIE = 0x004, 11011963Sar4jc@virginia.edu MISCREG_UTVEC = 0x005, 11111963Sar4jc@virginia.edu MISCREG_USCRATCH = 0x040, 11211963Sar4jc@virginia.edu MISCREG_UEPC = 0x041, 11311963Sar4jc@virginia.edu MISCREG_UCAUSE = 0x042, 11411963Sar4jc@virginia.edu MISCREG_UBADADDR = 0x043, 11511963Sar4jc@virginia.edu MISCREG_UIP = 0x044, 11611723Sar4jc@virginia.edu MISCREG_FFLAGS = 0x001, 11711723Sar4jc@virginia.edu MISCREG_FRM = 0x002, 11811723Sar4jc@virginia.edu MISCREG_FCSR = 0x003, 11911723Sar4jc@virginia.edu MISCREG_CYCLE = 0xC00, 12011723Sar4jc@virginia.edu MISCREG_TIME = 0xC01, 12111723Sar4jc@virginia.edu MISCREG_INSTRET = 0xC02, 12211963Sar4jc@virginia.edu MISCREG_HPMCOUNTER_BASE = 0xC03, 12311723Sar4jc@virginia.edu MISCREG_CYCLEH = 0xC80, 12411723Sar4jc@virginia.edu MISCREG_TIMEH = 0xC81, 12511723Sar4jc@virginia.edu MISCREG_INSTRETH = 0xC82, 12611963Sar4jc@virginia.edu MISCREG_HPMCOUNTERH_BASE = 0xC83, 12711723Sar4jc@virginia.edu 12811723Sar4jc@virginia.edu MISCREG_SSTATUS = 0x100, 12911963Sar4jc@virginia.edu MISCREG_SEDELEG = 0x102, 13011963Sar4jc@virginia.edu MISCREG_SIDELEG = 0x103, 13111723Sar4jc@virginia.edu MISCREG_SIE = 0x104, 13211963Sar4jc@virginia.edu MISCREG_STVEC = 0x105, 13311723Sar4jc@virginia.edu MISCREG_SSCRATCH = 0x140, 13411723Sar4jc@virginia.edu MISCREG_SEPC = 0x141, 13511963Sar4jc@virginia.edu MISCREG_SCAUSE = 0x142, 13611963Sar4jc@virginia.edu MISCREG_SBADADDR = 0x143, 13711723Sar4jc@virginia.edu MISCREG_SIP = 0x144, 13811723Sar4jc@virginia.edu MISCREG_SPTBR = 0x180, 13911723Sar4jc@virginia.edu 14011723Sar4jc@virginia.edu MISCREG_HSTATUS = 0x200, 14111963Sar4jc@virginia.edu MISCREG_HEDELEG = 0x202, 14211963Sar4jc@virginia.edu MISCREG_HIDELEG = 0x203, 14311963Sar4jc@virginia.edu MISCREG_HIE = 0x204, 14411963Sar4jc@virginia.edu MISCREG_HTVEC = 0x205, 14511723Sar4jc@virginia.edu MISCREG_HSCRATCH = 0x240, 14611723Sar4jc@virginia.edu MISCREG_HEPC = 0x241, 14711723Sar4jc@virginia.edu MISCREG_HCAUSE = 0x242, 14811723Sar4jc@virginia.edu MISCREG_HBADADDR = 0x243, 14911963Sar4jc@virginia.edu MISCREG_HIP = 0x244, 15011723Sar4jc@virginia.edu 15111963Sar4jc@virginia.edu MISCREG_MVENDORID = 0xF11, 15211963Sar4jc@virginia.edu MISCREG_MARCHID = 0xF12, 15311963Sar4jc@virginia.edu MISCREG_MIMPID = 0xF13, 15411963Sar4jc@virginia.edu MISCREG_MHARTID = 0xF14, 15511723Sar4jc@virginia.edu MISCREG_MSTATUS = 0x300, 15611963Sar4jc@virginia.edu MISCREG_MISA = 0x301, 15711963Sar4jc@virginia.edu MISCREG_MEDELEG = 0x302, 15811963Sar4jc@virginia.edu MISCREG_MIDELEG = 0x303, 15911723Sar4jc@virginia.edu MISCREG_MIE = 0x304, 16011963Sar4jc@virginia.edu MISCREG_MTVEC = 0x305, 16111723Sar4jc@virginia.edu MISCREG_MSCRATCH = 0x340, 16211723Sar4jc@virginia.edu MISCREG_MEPC = 0x341, 16311723Sar4jc@virginia.edu MISCREG_MCAUSE = 0x342, 16411723Sar4jc@virginia.edu MISCREG_MBADADDR = 0x343, 16511723Sar4jc@virginia.edu MISCREG_MIP = 0x344, 16611723Sar4jc@virginia.edu MISCREG_MBASE = 0x380, 16711723Sar4jc@virginia.edu MISCREG_MBOUND = 0x381, 16811723Sar4jc@virginia.edu MISCREG_MIBASE = 0x382, 16911723Sar4jc@virginia.edu MISCREG_MIBOUND = 0x383, 17011723Sar4jc@virginia.edu MISCREG_MDBASE = 0x384, 17111723Sar4jc@virginia.edu MISCREG_MDBOUND = 0x385, 17211963Sar4jc@virginia.edu MISCREG_MCYCLE = 0xB00, 17311963Sar4jc@virginia.edu MISCREG_MINSTRET = 0xB02, 17411963Sar4jc@virginia.edu MISCREG_MHPMCOUNTER_BASE = 0xB03, 17511963Sar4jc@virginia.edu MISCREG_MUCOUNTEREN = 0x320, 17611963Sar4jc@virginia.edu MISCREG_MSCOUNTEREN = 0x321, 17711963Sar4jc@virginia.edu MISCREG_MHCOUNTEREN = 0x322, 17811963Sar4jc@virginia.edu MISCREG_MHPMEVENT_BASE = 0x323, 17911963Sar4jc@virginia.edu 18011963Sar4jc@virginia.edu MISCREG_TSELECT = 0x7A0, 18111963Sar4jc@virginia.edu MISCREG_TDATA1 = 0x7A1, 18211963Sar4jc@virginia.edu MISCREG_TDATA2 = 0x7A2, 18311963Sar4jc@virginia.edu MISCREG_TDATA3 = 0x7A3, 18411963Sar4jc@virginia.edu MISCREG_DCSR = 0x7B0, 18511963Sar4jc@virginia.edu MISCREG_DPC = 0x7B1, 18611963Sar4jc@virginia.edu MISCREG_DSCRATCH = 0x7B2 18711723Sar4jc@virginia.edu}; 18811723Sar4jc@virginia.edu 18911723Sar4jc@virginia.edu} 19011723Sar4jc@virginia.edu 19111723Sar4jc@virginia.edu#endif // __ARCH_RISCV_REGISTERS_HH__ 192