1/* 2 * Copyright (c) 2010-2011, 2014, 2016 ARM Limited 3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42 43#ifndef __ARCH_ARM_REGISTERS_HH__ 44#define __ARCH_ARM_REGISTERS_HH__ 45 46#include "arch/arm/ccregs.hh" 47#include "arch/arm/generated/max_inst_regs.hh" 48#include "arch/arm/intregs.hh" 49#include "arch/arm/miscregs.hh" |
50#include "arch/arm/types.hh" 51#include "arch/generic/vec_pred_reg.hh" |
52#include "arch/generic/vec_reg.hh" 53 54namespace ArmISA { 55 56 57// For a predicated instruction, we need all the 58// destination registers to also be sources 59const int MaxInstSrcRegs = ArmISAInst::MaxInstDestRegs + 60 ArmISAInst::MaxInstSrcRegs; 61using ArmISAInst::MaxInstDestRegs; 62using ArmISAInst::MaxMiscDestRegs; 63 64// Number of VecElem per Vector Register, computed based on the vector length 65constexpr unsigned NumVecElemPerVecReg = 4; 66using VecElem = uint32_t; 67using VecReg = ::VecRegT<VecElem, NumVecElemPerVecReg, false>; 68using ConstVecReg = ::VecRegT<VecElem, NumVecElemPerVecReg, true>; 69using VecRegContainer = VecReg::Container; 70 |
71constexpr size_t VecRegSizeBytes = NumVecElemPerVecReg * sizeof(VecElem); 72 73// Dummy typedefs 74using VecPredReg = ::DummyVecPredReg; 75using ConstVecPredReg = ::DummyConstVecPredReg; 76using VecPredRegContainer = ::DummyVecPredRegContainer; 77constexpr size_t VecPredRegSizeBits = ::DummyVecPredRegSizeBits; 78constexpr bool VecPredRegHasPackedRepr = ::DummyVecPredRegHasPackedRepr; 79 |
80// condition code register; must be at least 32 bits for FpCondCodes 81typedef uint64_t CCReg; 82 83// Constants Related to the number of registers 84const int NumIntArchRegs = NUM_ARCH_INTREGS; 85// The number of single precision floating point registers 86const int NumFloatV7ArchRegs = 64; 87const int NumFloatV8ArchRegs = 128; 88const int NumFloatSpecialRegs = 32; 89const int NumVecV7ArchRegs = 64; 90const int NumVecV8ArchRegs = 32; 91const int NumVecSpecialRegs = 8; 92 93const int NumIntRegs = NUM_INTREGS; 94const int NumFloatRegs = NumFloatV8ArchRegs + NumFloatSpecialRegs; 95const int NumVecRegs = NumVecV8ArchRegs + NumVecSpecialRegs; |
96const int NumVecPredRegs = 1; |
97const int NumCCRegs = NUM_CCREGS; 98const int NumMiscRegs = NUM_MISCREGS; 99 100#define ISA_HAS_CC_REGS 101 |
102const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumVecRegs + 103 NumVecPredRegs + NumMiscRegs; |
104 105// semantically meaningful register indices 106const int ReturnValueReg = 0; 107const int ReturnValueReg1 = 1; 108const int ReturnValueReg2 = 2; 109const int NumArgumentRegs = 4; 110const int NumArgumentRegs64 = 8; 111const int ArgumentReg0 = 0; --- 17 unchanged lines hidden --- |