arch-arm: Unify VLdmStm behaviour when reg out of index
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 19 Nov 2019 11:29:39 +0000 (11:29 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 10 Dec 2019 10:15:05 +0000 (10:15 +0000)
commitf191901bd8def842b4f8c9d06f4adc0f47ae4918
tree0a0940fa1301466832c222fc0fb5a994bb864a14
parent1398a81618e18405afaeb31197929df2dd1cf5f4
arch-arm: Unify VLdmStm behaviour when reg out of index

The generic VLdmStm class (modelling A32 VLDM/VSTM) is handling a wrong
register list in a inconsistent way. Some instructions are opting
for being decoded as Unknown, while others handle it inside the
macro instruction constructor by manually adjusting the reglist.

Those are two valid implementation of the CONSTRAINT UNPREDICTABLE
behaviour (1 and 3):

"If regs > 16 || (d+regs) > 32 , then one of the following behaviors must
occur:
1) The instruction is UNDEFINED .
2) The instruction executes as NOP .
3)  One or more of the SIMD and floating-point registers are UNKNOWN . If
the instruction specifies writeback, the base register becomes UNKNOWN .
This behavior does not affect any general-purpose registers."

This patch unfies the behaviour by always opting for option 1) over 3)

Change-Id: I4f98409243d5a2ec64113fe9c87e961a391abe94
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23106
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/arm/insts/macromem.cc
src/arch/arm/isa/formats/fp.isa