qemu-e2k/target/arm
Peter Maydell b722636972 target/arm: Implement v8.1M low-overhead-loop instructions
v8.1M's "low-overhead-loop" extension has three instructions
for looping:
 * DLS (start of a do-loop)
 * WLS (start of a while-loop)
 * LE (end of a loop)

The loop-start instructions are both simple operations to start a
loop whose iteration count (if any) is in LR.  The loop-end
instruction handles "decrement iteration count and jump back to loop
start"; it also caches the information about the branch back to the
start of the loop to improve performance of the branch on subsequent
iterations.

As with the branch-future instructions, the architecture permits an
implementation to discard the LO_BRANCH_INFO cache at any time, and
QEMU takes the IMPDEF option to never set it in the first place
(equivalent to discarding it immediately), because for us a "real"
implementation would be unnecessary complexity.

(This implementation only provides the simple looping constructs; the
vector extension MVE (Helium) adds some extra variants to handle
looping across vectors.  We'll add those later when we implement
MVE.)

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20201019151301.2046-8-peter.maydell@linaro.org
2020-10-20 16:12:01 +01:00
..
a32-uncond.decode
a32.decode
arch_dump.c
arm_ldst.h
arm-powerctl.c
arm-powerctl.h
arm-semi.c
cpu64.c target/arm: Make '-cpu max' have a 48-bit PA 2020-10-08 21:40:01 +01:00
cpu_tcg.c target/arm: Add ID register values for Cortex-M0 2020-10-01 15:31:00 +01:00
cpu-param.h
cpu-qom.h qom: Remove module_obj_name parameter from OBJECT_DECLARE* macros 2020-09-18 14:12:32 -04:00
cpu.c hw/arm/virt: Implement kvm-steal-time 2020-10-08 15:24:32 +01:00
cpu.h target/arm: Implement v8.1M branch-future insns (as NOPs) 2020-10-20 16:12:01 +01:00
crypto_helper.c
debug_helper.c
gdbstub64.c
gdbstub.c
helper-a64.c
helper-a64.h
helper-sve.h
helper.c target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11 2020-10-20 16:12:00 +01:00
helper.h target/arm: AArch32 VCVT fixed-point to float is always round-to-nearest 2020-10-20 16:12:00 +01:00
idau.h Use DECLARE_*CHECKER* macros 2020-09-09 09:27:09 -04:00
internals.h target/arm: Ignore HCR_EL2.ATA when {E2H,TGE} != 11 2020-10-20 16:12:00 +01:00
iwmmxt_helper.c
kvm64.c hw/arm/virt: Implement kvm-steal-time 2020-10-08 15:24:32 +01:00
kvm_arm.h hw/arm/virt: Implement kvm-steal-time 2020-10-08 15:24:32 +01:00
kvm-consts.h target/arm: Remove no-longer-reachable 32-bit KVM code 2020-09-14 14:23:19 +01:00
kvm-stub.c
kvm.c hw/arm/virt: Implement kvm-steal-time 2020-10-08 15:24:32 +01:00
m_helper.c
m-nocp.decode target/arm: Implement v8.1M NOCP handling 2020-10-20 16:12:01 +01:00
machine.c
meson.build target/arm: Remove KVM support for 32-bit Arm hosts 2020-09-14 14:23:19 +01:00
monitor.c hw/arm/virt: Implement kvm-steal-time 2020-10-08 15:24:32 +01:00
mte_helper.c target/arm: Fix reported EL for mte_check_fail 2020-10-20 16:12:00 +01:00
neon_helper.c
neon-dp.decode target/arm: Convert Neon VCVT fp size field to MO_* in decode 2020-09-14 14:23:19 +01:00
neon-ls.decode
neon-shared.decode target/arm: Convert VCMLA, VCADD size field to MO_* in decode 2020-09-14 14:23:19 +01:00
op_addsub.h
op_helper.c
pauth_helper.c
psci.c
sve_helper.c
sve.decode
t16.decode
t32.decode target/arm: Implement v8.1M low-overhead-loop instructions 2020-10-20 16:12:01 +01:00
tlb_helper.c
trace-events
trace.h
translate-a64.c
translate-a64.h
translate-neon.c.inc target/arm: Convert VCMLA, VCADD size field to MO_* in decode 2020-09-14 14:23:19 +01:00
translate-sve.c target/arm: Fix SVE splice 2020-10-01 15:31:00 +01:00
translate-vfp.c.inc target/arm: Implement v8.1M NOCP handling 2020-10-20 16:12:01 +01:00
translate.c target/arm: Implement v8.1M low-overhead-loop instructions 2020-10-20 16:12:01 +01:00
translate.h
vec_helper.c target/arm/vec_helper: Add gvec fp indexed multiply-and-add operations 2020-09-01 11:45:32 +01:00
vec_internal.h
vfp_helper.c target/arm: AArch32 VCVT fixed-point to float is always round-to-nearest 2020-10-20 16:12:00 +01:00
vfp-uncond.decode
vfp.decode