target/arm: Implement v8.1M NOCP handling
authorPeter Maydell <peter.maydell@linaro.org>
Mon, 19 Oct 2020 15:12:53 +0000 (16:12 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Tue, 20 Oct 2020 15:12:01 +0000 (16:12 +0100)
commit5d2555a1fe7370feeb1efbbf276a653040910017
treef072bb9b945e67ae629aeb2ae7f70b8dda1b6ec2
parent514101c0b931f0a11a40d29d26af1cc40482f951
target/arm: Implement v8.1M NOCP handling

From v8.1M, disabled-coprocessor handling changes slightly:
 * coprocessors 8, 9, 14 and 15 are also governed by the
   cp10 enable bit, like cp11
 * an extra range of instruction patterns is considered
   to be inside the coprocessor space

We previously marked these up with TODO comments; implement the
correct behaviour.

Unfortunately there is no ID register field which indicates this
behaviour.  We could in theory test an unrelated ID register which
indicates guaranteed-to-be-in-v8.1M behaviour like ID_ISAR0.CmpBranch
>= 3 (low-overhead-loops), but it seems better to simply define a new
ARM_FEATURE_V8_1M feature flag and use it for this and other
new-in-v8.1M behaviour that isn't identifiable from the ID registers.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20201019151301.2046-3-peter.maydell@linaro.org
target/arm/cpu.h
target/arm/m-nocp.decode
target/arm/translate-vfp.c.inc