diff options
author | Gabor Dozsa <gabor.dozsa@arm.com> | 2019-06-11 11:47:26 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2019-07-18 15:09:22 +0000 |
commit | 9130f5427d7009c4f40e0097b79b4972430a27c3 (patch) | |
tree | 98f39295d24a16637c2fba641ef66b4a0741663a /src/arch/arm/faults.hh | |
parent | ddd3f43f8a590cd287cd3449ea6e49bc48dad06a (diff) | |
download | gem5-9130f5427d7009c4f40e0097b79b4972430a27c3.tar.xz |
arch-arm: Add first-/non-faulting load instructions
First-/non-faulting loads are part of Arm SVE.
Change-Id: I93dfd6d1d74791653927e99098ddb651150a8ef7
Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19177
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/arch/arm/faults.hh')
-rw-r--r-- | src/arch/arm/faults.hh | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/arch/arm/faults.hh b/src/arch/arm/faults.hh index e04a0dcc6..d14983d28 100644 --- a/src/arch/arm/faults.hh +++ b/src/arch/arm/faults.hh @@ -234,6 +234,8 @@ class ArmFault : public FaultBase virtual bool isStage2() const { return false; } virtual FSR getFsr(ThreadContext *tc) const { return 0; } virtual void setSyndrome(ThreadContext *tc, MiscRegIndex syndrome_reg); + virtual bool getFaultVAddr(Addr &va) const { return false; } + }; template<typename T> @@ -435,6 +437,8 @@ class AbortFault : public ArmFaultVals<T> stage2(_stage2), s1ptw(false), tranMethod(_tranMethod) {} + bool getFaultVAddr(Addr &va) const override; + void invoke(ThreadContext *tc, const StaticInstPtr &inst = StaticInst::nullStaticInstPtr) override; @@ -625,6 +629,18 @@ template<> ArmFault::FaultVals ArmFaultVals<SystemError>::vals; template<> ArmFault::FaultVals ArmFaultVals<SoftwareBreakpoint>::vals; template<> ArmFault::FaultVals ArmFaultVals<ArmSev>::vals; +/** + * Returns true if the fault passed as a first argument was triggered + * by a memory access, false otherwise. + * If true it is storing the faulting address in the va argument + * + * @param fault generated fault + * @param va function will modify this passed-by-reference parameter + * with the correct faulting virtual address + * @return true if va contains a valid value, false otherwise + */ +bool getFaultVAddr(Fault fault, Addr &va); + } // namespace ArmISA |