diff options
author | Giacomo Gabrielli <giacomo.gabrielli@arm.com> | 2018-10-16 16:09:02 +0100 |
---|---|---|
committer | Giacomo Gabrielli <giacomo.gabrielli@arm.com> | 2019-03-14 10:42:27 +0000 |
commit | c4cc3145cd1eeed236b5cd3f7b2424bc0761878e (patch) | |
tree | b38eab6f5f389dfc53c2cf74275a83bacd2e9b18 /src/arch/arm/registers.hh | |
parent | 91195ae7f637d1d4879cc3bf0860147333846e75 (diff) | |
download | gem5-c4cc3145cd1eeed236b5cd3f7b2424bc0761878e.tar.xz |
arch-arm,cpu: Add initial support for Arm SVE
This changeset adds initial support for the Arm Scalable Vector Extension
(SVE) by implementing:
- support for most data-processing instructions (no loads/stores yet);
- basic system-level support.
Additional authors:
- Javier Setoain <javier.setoain@arm.com>
- Gabor Dozsa <gabor.dozsa@arm.com>
- Giacomo Travaglini <giacomo.travaglini@arm.com>
Thanks to Pau Cabre for his contribution of bugfixes.
Change-Id: I1808b5ff55b401777eeb9b99c9a1129e0d527709
Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/13515
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/arch/arm/registers.hh')
-rw-r--r-- | src/arch/arm/registers.hh | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/arch/arm/registers.hh b/src/arch/arm/registers.hh index fd59f3ed8..8ee48edc0 100644 --- a/src/arch/arm/registers.hh +++ b/src/arch/arm/registers.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2011, 2014, 2016 ARM Limited + * Copyright (c) 2010-2011, 2014, 2016-2017 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -62,20 +62,18 @@ using ArmISAInst::MaxInstDestRegs; using ArmISAInst::MaxMiscDestRegs; // Number of VecElem per Vector Register, computed based on the vector length -constexpr unsigned NumVecElemPerVecReg = 4; +constexpr unsigned NumVecElemPerVecReg = MaxSveVecLenInWords; + using VecElem = uint32_t; using VecReg = ::VecRegT<VecElem, NumVecElemPerVecReg, false>; using ConstVecReg = ::VecRegT<VecElem, NumVecElemPerVecReg, true>; using VecRegContainer = VecReg::Container; -constexpr size_t VecRegSizeBytes = NumVecElemPerVecReg * sizeof(VecElem); - -// Dummy typedefs -using VecPredReg = ::DummyVecPredReg; -using ConstVecPredReg = ::DummyConstVecPredReg; -using VecPredRegContainer = ::DummyVecPredRegContainer; -constexpr size_t VecPredRegSizeBits = ::DummyVecPredRegSizeBits; -constexpr bool VecPredRegHasPackedRepr = ::DummyVecPredRegHasPackedRepr; +using VecPredReg = ::VecPredRegT<VecElem, NumVecElemPerVecReg, + VecPredRegHasPackedRepr, false>; +using ConstVecPredReg = ::VecPredRegT<VecElem, NumVecElemPerVecReg, + VecPredRegHasPackedRepr, true>; +using VecPredRegContainer = VecPredReg::Container; // Constants Related to the number of registers const int NumIntArchRegs = NUM_ARCH_INTREGS; @@ -90,7 +88,8 @@ const int NumVecSpecialRegs = 8; const int NumIntRegs = NUM_INTREGS; const int NumFloatRegs = NumFloatV8ArchRegs + NumFloatSpecialRegs; const int NumVecRegs = NumVecV8ArchRegs + NumVecSpecialRegs; -const int NumVecPredRegs = 1; +const int NumVecPredRegs = 17; // P0-P15, FFR +const int PREDREG_FFR = 16; const int NumCCRegs = NUM_CCREGS; const int NumMiscRegs = NUM_MISCREGS; |