registers.hh revision 6329
11689SN/A/*
21689SN/A * Copyright (c) 2007-2008 The Florida State University
31689SN/A * All rights reserved.
41689SN/A *
51689SN/A * Redistribution and use in source and binary forms, with or without
61689SN/A * modification, are permitted provided that the following conditions are
71689SN/A * met: redistributions of source code must retain the above copyright
81689SN/A * notice, this list of conditions and the following disclaimer;
91689SN/A * redistributions in binary form must reproduce the above copyright
101689SN/A * notice, this list of conditions and the following disclaimer in the
111689SN/A * documentation and/or other materials provided with the distribution;
121689SN/A * neither the name of the copyright holders nor the names of its
131689SN/A * contributors may be used to endorse or promote products derived from
141689SN/A * this software without specific prior written permission.
151689SN/A *
161689SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
171689SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
181689SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
191689SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
201689SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
211689SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
221689SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
231689SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
241689SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
251689SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
261689SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272665Ssaidi@eecs.umich.edu *
282665Ssaidi@eecs.umich.edu * Authors: Stephen Hines
292756Sksewell@umich.edu */
301689SN/A
311689SN/A#ifndef __ARCH_ARM_REGISTERS_HH__
322325SN/A#define __ARCH_ARM_REGISTERS_HH__
332325SN/A
341060SN/A#include "arch/arm/max_inst_regs.hh"
351060SN/A#include "arch/arm/miscregs.hh"
361060SN/A
372292SN/Anamespace ArmISA {
382292SN/A
391681SN/Ausing ArmISAInst::MaxInstSrcRegs;
401060SN/Ausing ArmISAInst::MaxInstDestRegs;
412980Sgblack@eecs.umich.edu
421060SN/Atypedef uint8_t  RegIndex;
431060SN/A
441858SN/Atypedef uint64_t IntReg;
454598Sbinkertn@umich.edu
462325SN/A// floating point register file entry type
471717SN/Atypedef uint32_t FloatRegBits;
482683Sktlim@umich.edutypedef float FloatReg;
491717SN/A
501717SN/A// cop-0/cop-1 system control register
512292SN/Atypedef uint64_t MiscReg;
522292SN/A
532817Sksewell@umich.edu// Constants Related to the number of registers
541060SN/Aconst int NumIntArchRegs = 16;
551060SN/Aconst int NumIntSpecialRegs = 19;
565529Snate@binkert.orgconst int NumFloatArchRegs = 16;
575529Snate@binkert.orgconst int NumFloatSpecialRegs = 5;
582316SN/Aconst int NumInternalProcRegs = 0;
592316SN/A
602680Sktlim@umich.educonst int NumIntRegs = NumIntArchRegs + NumIntSpecialRegs;
612817Sksewell@umich.educonst int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;
622817Sksewell@umich.edu
632843Sktlim@umich.educonst int NumMiscRegs = NUM_MISCREGS;
642843Sktlim@umich.edu
652669Sktlim@umich.edu
661060SN/A// semantically meaningful register indices
671060SN/Aconst int ReturnValueReg = 0;
685529Snate@binkert.orgconst int ReturnValueReg1 = 1;
695529Snate@binkert.orgconst int ReturnValueReg2 = 2;
702733Sktlim@umich.educonst int ArgumentReg0 = 0;
711060SN/Aconst int ArgumentReg1 = 1;
721060SN/Aconst int ArgumentReg2 = 2;
731060SN/Aconst int ArgumentReg3 = 3;
745529Snate@binkert.orgconst int FramePointerReg = 11;
752292SN/Aconst int StackPointerReg = 13;
762292SN/Aconst int ReturnAddressReg = 14;
771060SN/Aconst int PCReg = 15;
781060SN/A
792348SN/Aconst int ZeroReg = NumIntArchRegs;
802348SN/Aconst int AddrReg = ZeroReg + 1; // Used to generate address for uops
812348SN/A
822348SN/Aconst int SyscallNumReg = ReturnValueReg;
832348SN/Aconst int SyscallPseudoReturnReg = ReturnValueReg;
841060SN/Aconst int SyscallSuccessReg = ReturnValueReg;
852733Sktlim@umich.edu
861060SN/A// These help enumerate all the registers for dependence tracking.
871060SN/Aconst int FP_Base_DepTag = NumIntRegs;
882325SN/Aconst int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs;
891060SN/A
901061SN/Atypedef union {
914329Sktlim@umich.edu    IntReg   intreg;
921060SN/A    FloatReg fpreg;
935595Sgblack@eecs.umich.edu    MiscReg  ctrlreg;
942292SN/A} AnyReg;
952292SN/A
962292SN/Aenum FPControlRegNums {
972292SN/A   FIR = NumFloatArchRegs,
982817Sksewell@umich.edu   FCCR,
992829Sksewell@umich.edu   FEXR,
1001060SN/A   FENR,
1011060SN/A   FCSR
1021060SN/A};
1031060SN/A
1041060SN/Aenum FCSRBits {
1052307SN/A    Inexact = 1,
1062307SN/A    Underflow,
1071060SN/A    Overflow,
1081060SN/A    DivideByZero,
1096022Sgblack@eecs.umich.edu    Invalid,
1106022Sgblack@eecs.umich.edu    Unimplemented
1113781Sgblack@eecs.umich.edu};
1122292SN/A
1131060SN/Aenum FCSRFields {
1141060SN/A    Flag_Field = 1,
1152829Sksewell@umich.edu    Enable_Field = 6,
1162829Sksewell@umich.edu    Cause_Field = 11
1172829Sksewell@umich.edu};
1181060SN/A
1191060SN/Aenum MiscIntRegNums {
1201060SN/A    zero_reg = NumIntArchRegs,
1211060SN/A    addr_reg,
1222292SN/A
1231755SN/A    rhi,
1241060SN/A    rlo,
1251060SN/A
1262292SN/A    r8_fiq,    /* FIQ mode register bank */
1271755SN/A    r9_fiq,
1282292SN/A    r10_fiq,
1292292SN/A    r11_fiq,
1301060SN/A    r12_fiq,
1312292SN/A
1325336Shines@cs.fsu.edu    r13_fiq,   /* FIQ mode SP and LR */
1331060SN/A    r14_fiq,
1341060SN/A
1352292SN/A    r13_irq,   /* IRQ mode SP and LR */
1361060SN/A    r14_irq,
1371060SN/A
1382292SN/A    r13_svc,   /* SVC mode SP and LR */
1391060SN/A    r14_svc,
1401060SN/A
1411060SN/A    r13_undef, /* UNDEF mode SP and LR */
1425606Snate@binkert.org    r14_undef,
1431060SN/A
1445606Snate@binkert.org    r13_abt,   /* ABT mode SP and LR */
1451060SN/A    r14_abt
1461060SN/A};
1472292SN/A
1481060SN/A} // namespace ArmISA
1491060SN/A
1501060SN/A#endif
1511060SN/A