registers.hh revision 13617:34a793c681ce
18012Ssaidi@eecs.umich.edu/* 28029Snate@binkert.org * Copyright (c) 2009 The University of Edinburgh 38029Snate@binkert.org * All rights reserved. 48029Snate@binkert.org * 58013Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without 68029Snate@binkert.org * modification, are permitted provided that the following conditions are 78029Snate@binkert.org * met: redistributions of source code must retain the above copyright 88029Snate@binkert.org * notice, this list of conditions and the following disclaimer; 98029Snate@binkert.org * redistributions in binary form must reproduce the above copyright 108029Snate@binkert.org * notice, this list of conditions and the following disclaimer in the 118029Snate@binkert.org * documentation and/or other materials provided with the distribution; 128029Snate@binkert.org * neither the name of the copyright holders nor the names of its 138029Snate@binkert.org * contributors may be used to endorse or promote products derived from 148029Snate@binkert.org * this software without specific prior written permission. 158029Snate@binkert.org * 168013Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178029Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188029Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198029Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208029Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218029Snate@binkert.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228029Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238029Snate@binkert.org * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248029Snate@binkert.org * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258029Snate@binkert.org * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268029Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278029Snate@binkert.org * 288013Sbinkertn@umich.edu * Authors: Timothy M. Jones 298012Ssaidi@eecs.umich.edu */ 308008Ssaidi@eecs.umich.edu 318008Ssaidi@eecs.umich.edu#ifndef __ARCH_POWER_REGISTERS_HH__ 328013Sbinkertn@umich.edu#define __ARCH_POWER_REGISTERS_HH__ 338013Sbinkertn@umich.edu 348008Ssaidi@eecs.umich.edu#include "arch/generic/vec_pred_reg.hh" 358008Ssaidi@eecs.umich.edu#include "arch/generic/vec_reg.hh" 368013Sbinkertn@umich.edu#include "arch/power/generated/max_inst_regs.hh" 378013Sbinkertn@umich.edu#include "arch/power/miscregs.hh" 388013Sbinkertn@umich.edu#include "base/types.hh" 398013Sbinkertn@umich.edu 408013Sbinkertn@umich.edunamespace PowerISA { 418013Sbinkertn@umich.edu 428013Sbinkertn@umich.eduusing PowerISAInst::MaxInstSrcRegs; 438013Sbinkertn@umich.eduusing PowerISAInst::MaxInstDestRegs; 448013Sbinkertn@umich.edu 458013Sbinkertn@umich.edu// Power writes a misc register outside of the isa parser, so it can't 468013Sbinkertn@umich.edu// be detected by it. Manually add it here. 478013Sbinkertn@umich.educonst int MaxMiscDestRegs = PowerISAInst::MaxMiscDestRegs + 1; 488013Sbinkertn@umich.edu 498013Sbinkertn@umich.edu// dummy typedef since we don't have CC regs 508013Sbinkertn@umich.edutypedef uint8_t CCReg; 518013Sbinkertn@umich.edu 528013Sbinkertn@umich.edu// Not applicable to Power 538013Sbinkertn@umich.eduusing VecElem = ::DummyVecElem; 548013Sbinkertn@umich.eduusing VecReg = ::DummyVecReg; 558013Sbinkertn@umich.eduusing ConstVecReg = ::DummyConstVecReg; 568008Ssaidi@eecs.umich.eduusing VecRegContainer = ::DummyVecRegContainer; 578008Ssaidi@eecs.umich.educonstexpr unsigned NumVecElemPerVecReg = ::DummyNumVecElemPerVecReg; 588013Sbinkertn@umich.educonstexpr size_t VecRegSizeBytes = ::DummyVecRegSizeBytes; 598013Sbinkertn@umich.edu 608013Sbinkertn@umich.edu// Not applicable to Power 618008Ssaidi@eecs.umich.eduusing VecPredReg = ::DummyVecPredReg; 628008Ssaidi@eecs.umich.eduusing ConstVecPredReg = ::DummyConstVecPredReg; 638008Ssaidi@eecs.umich.eduusing VecPredRegContainer = ::DummyVecPredRegContainer; 648008Ssaidi@eecs.umich.educonstexpr size_t VecPredRegSizeBits = ::DummyVecPredRegSizeBits; 658008Ssaidi@eecs.umich.educonstexpr bool VecPredRegHasPackedRepr = ::DummyVecPredRegHasPackedRepr; 668008Ssaidi@eecs.umich.edu 678008Ssaidi@eecs.umich.edu// Constants Related to the number of registers 688008Ssaidi@eecs.umich.educonst int NumIntArchRegs = 32; 698008Ssaidi@eecs.umich.edu 708008Ssaidi@eecs.umich.edu// CR, XER, LR, CTR, FPSCR, RSV, RSV-LEN, RSV-ADDR 718008Ssaidi@eecs.umich.edu// and zero register, which doesn't actually exist but needs a number 728008Ssaidi@eecs.umich.educonst int NumIntSpecialRegs = 9; 738008Ssaidi@eecs.umich.educonst int NumFloatArchRegs = 32; 748008Ssaidi@eecs.umich.educonst int NumFloatSpecialRegs = 0; 758008Ssaidi@eecs.umich.educonst int NumInternalProcRegs = 0; 768008Ssaidi@eecs.umich.edu 778008Ssaidi@eecs.umich.educonst int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs; 788013Sbinkertn@umich.educonst int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs; 798008Ssaidi@eecs.umich.educonst int NumVecRegs = 1; // Not applicable to Power 808008Ssaidi@eecs.umich.edu // (1 to prevent warnings) 818008Ssaidi@eecs.umich.educonst int NumVecPredRegs = 1; // Not applicable to Power 828008Ssaidi@eecs.umich.edu // (1 to prevent warnings) 838008Ssaidi@eecs.umich.educonst int NumCCRegs = 0; 848008Ssaidi@eecs.umich.educonst int NumMiscRegs = NUM_MISCREGS; 858008Ssaidi@eecs.umich.edu 868008Ssaidi@eecs.umich.edu// Semantically meaningful register indices 878013Sbinkertn@umich.educonst int ReturnValueReg = 3; 888008Ssaidi@eecs.umich.educonst int ArgumentReg0 = 3; 898008Ssaidi@eecs.umich.educonst int ArgumentReg1 = 4; 908008Ssaidi@eecs.umich.educonst int ArgumentReg2 = 5; 918008Ssaidi@eecs.umich.educonst int ArgumentReg3 = 6; 928013Sbinkertn@umich.educonst int ArgumentReg4 = 7; 938008Ssaidi@eecs.umich.educonst int FramePointerReg = 31; 948008Ssaidi@eecs.umich.educonst int StackPointerReg = 1; 958008Ssaidi@eecs.umich.edu 968008Ssaidi@eecs.umich.edu// There isn't one in Power, but we need to define one somewhere 978008Ssaidi@eecs.umich.educonst int ZeroReg = NumIntRegs - 1; 988008Ssaidi@eecs.umich.edu 998013Sbinkertn@umich.educonst int SyscallNumReg = 0; 1008008Ssaidi@eecs.umich.educonst int SyscallPseudoReturnReg = 3; 1018013Sbinkertn@umich.educonst int SyscallSuccessReg = 3; 1028008Ssaidi@eecs.umich.edu 1038008Ssaidi@eecs.umich.eduenum MiscIntRegNums { 1048008Ssaidi@eecs.umich.edu INTREG_CR = NumIntArchRegs, 1058013Sbinkertn@umich.edu INTREG_XER, 1068008Ssaidi@eecs.umich.edu INTREG_LR, 1078013Sbinkertn@umich.edu INTREG_CTR, 1088013Sbinkertn@umich.edu INTREG_FPSCR, 1098013Sbinkertn@umich.edu INTREG_RSV, 1108013Sbinkertn@umich.edu INTREG_RSV_LEN, 1118013Sbinkertn@umich.edu INTREG_RSV_ADDR 1128013Sbinkertn@umich.edu}; 1138008Ssaidi@eecs.umich.edu 1148013Sbinkertn@umich.edu} // namespace PowerISA 1158013Sbinkertn@umich.edu 1168008Ssaidi@eecs.umich.edu#endif // __ARCH_POWER_REGISTERS_HH__ 1178008Ssaidi@eecs.umich.edu