From 60dd3c7d05c41988abfa9833556e2247466f4b26 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Wed, 8 Feb 2023 10:48:29 +0000 Subject: [PATCH] arch-arm: Simplify FPSCR writes The old logic was setting up a mask which was covering pretty much the entire register, except for the FPSCR[14:13] and FPSCR[6:5] register fields. Those RES0 fields were treated as WI. We simplify this by explicitly marking them as RES0 at construction time Change-Id: I59942bd98c074349307d27e3a99351ee25f4db95 Signed-off-by: Giacomo Travaglini Reviewed-by: Richard Cooper Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/70565 Maintainer: Jason Lowe-Power Tested-by: kokoro --- src/arch/arm/isa.cc | 33 +-------------------------------- src/arch/arm/regs/misc.cc | 1 + 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/src/arch/arm/isa.cc b/src/arch/arm/isa.cc index 83df61fb40..9c8e282e20 100644 --- a/src/arch/arm/isa.cc +++ b/src/arch/arm/isa.cc @@ -815,38 +815,7 @@ ISA::setMiscReg(RegIndex idx, RegVal val) return; case MISCREG_FPSCR: - { - const uint32_t ones = (uint32_t)(-1); - FPSCR fpscrMask = 0; - fpscrMask.ioc = ones; - fpscrMask.dzc = ones; - fpscrMask.ofc = ones; - fpscrMask.ufc = ones; - fpscrMask.ixc = ones; - fpscrMask.idc = ones; - fpscrMask.ioe = ones; - fpscrMask.dze = ones; - fpscrMask.ofe = ones; - fpscrMask.ufe = ones; - fpscrMask.ixe = ones; - fpscrMask.ide = ones; - fpscrMask.len = ones; - fpscrMask.fz16 = ones; - fpscrMask.stride = ones; - fpscrMask.rMode = ones; - fpscrMask.fz = ones; - fpscrMask.dn = ones; - fpscrMask.ahp = ones; - fpscrMask.qc = ones; - fpscrMask.v = ones; - fpscrMask.c = ones; - fpscrMask.z = ones; - fpscrMask.n = ones; - newVal = (newVal & (uint32_t)fpscrMask) | - (readMiscRegNoEffect(MISCREG_FPSCR) & - ~(uint32_t)fpscrMask); - tc->getDecoderPtr()->as().setContext(newVal); - } + tc->getDecoderPtr()->as().setContext(newVal); break; case MISCREG_FPSR: { diff --git a/src/arch/arm/regs/misc.cc b/src/arch/arm/regs/misc.cc index 9203810306..2d76143e08 100644 --- a/src/arch/arm/regs/misc.cc +++ b/src/arch/arm/regs/misc.cc @@ -2199,6 +2199,7 @@ ISA::initializeMiscRegMetadata() .reset(p.fpsid) .allPrivileges(); InitReg(MISCREG_FPSCR) + .res0(mask(14, 13) | mask(6, 5)) .allPrivileges(); InitReg(MISCREG_MVFR1) .reset([] () {