summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/insts/str.isa
diff options
context:
space:
mode:
authorGiacomo Travaglini <giacomo.travaglini@arm.com>2018-06-07 17:17:16 +0100
committerGiacomo Travaglini <giacomo.travaglini@arm.com>2018-06-22 10:52:55 +0000
commitfc278fffb78512ff3d62a906804d6b285edd00c7 (patch)
tree5c8f488763041f6774ebada7609b86d6a3a865bd /src/arch/arm/isa/insts/str.isa
parent3ed0c3c0bef2eefddcf2033e6ab9d22cf45c486d (diff)
downloadgem5-fc278fffb78512ff3d62a906804d6b285edd00c7.tar.xz
arch-arm: BadMode checking if corresponding EL is implemented
The old utility function called badMode was only checking if the mode passed as an argument was a recognized mode. It was not checking if the corresponding mode/EL was implemented. That function has been renamed to unknownMode and a new badMode has been introduced. This is used by the cpsrWriteByInstruction function. In this way any try to change the execution mode won't succeed if the mode hasn't been implemented. Change-Id: Ibfe385c5465b904acc0d2eb9647710891d72c9df Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/11196 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/arch/arm/isa/insts/str.isa')
-rw-r--r--src/arch/arm/isa/insts/str.isa6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/arch/arm/isa/insts/str.isa b/src/arch/arm/isa/insts/str.isa
index 1c697d3ff..c165eaf1a 100644
--- a/src/arch/arm/isa/insts/str.isa
+++ b/src/arch/arm/isa/insts/str.isa
@@ -112,6 +112,12 @@ let {{
if self.add:
wbDiff = 8
accCode = '''
+
+ auto tc = xc->tcBase();
+ if (badMode32(tc, static_cast<OperatingMode>(regMode))) {
+ return undefinedFault32(tc, opModeToEL(currOpMode(tc)));
+ }
+
CPSR cpsr = Cpsr;
Mem_ud = (uint64_t)cSwap(LR_uw, cpsr.e) |
((uint64_t)cSwap(Spsr_uw, cpsr.e) << 32);