qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [Bug] : write back operation in ld /st [aarch64] inst


From: Peter Maydell
Subject: Re: [Qemu-devel] [Bug] : write back operation in ld /st [aarch64] inst
Date: Thu, 27 Nov 2014 12:40:53 +0000

On 27 November 2014 at 12:15, Gaurav Sharma <address@hidden> wrote:
> As per arm specs, if the src and dest register are same, write back
> operation is suppressed.
> [Specs]
> if memop == MemOp_LOAD && wback && n == t && n != 31 then
> c = ConstrainUnpredictable();
> assert c IN {Constraint_WBSUPPRESS, Constraint_UNKNOWN, Constraint_UNDEF,
> Constraint_NOP};
> case c of
> when Constraint_WBSUPPRESS wback = FALSE; // writeback is suppressed
>
> However, in the code implementation for load / store operation I see that we
> do a write back anyhow. [ disas_ldst_reg_imm9]

I think you are misreading the ARM ARM here. This case (load with
writeback requested but Rn == Rt) is CONSTRAINED UNPREDICTABLE,
which means that guest code must not rely on this behaviour
(it is UNPREDICTABLE) but the architecture specifies a
limited set of possible things that might happen. (Note that
an implementation is not required to do the *same* thing
every time!) For this case there are four implementation
choices allowed, as you can see from the assertion:
 (1) suppress writeback, ie do not update the writeback register
 (2) write an UNKNOWN value to the writeback register
 (3) UNDEF, ie treat the insn as an unallocated encoding
 (4) NOP, ie ignore the insn completely

QEMU chooses option (2). (As it happens our unknown value will
always be the address.) Really case (1) is a subset of (2),
and in fact if you look in Appendix J in the ARM ARM you'll
see that the only options listed are UNDEF, NOP and UNKNOWN.

The concept of CONSTRAINED UNPREDICTABLE is new in v8 of the
ARM architecture, and so there are probably cases in QEMU where
our UNPREDICTABLE behaviour is not one of the limited set imposed
by the CONSTRAINED UNPREDICTABLE specification, especially where
the UNPREDICTABLE is in old code we've retained from the ARMv7
model. However for this particular example we're within spec.

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]