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