Re: [PATCH v2 1/3] powerpc: sstep: Fix load and update emulation
From: Naveen N. Rao <hidden>
Date: 2021-02-04 08:29:56
On 2021/02/03 03:17PM, Segher Boessenkool wrote:
On Wed, Feb 03, 2021 at 03:19:09PM +0530, Naveen N. Rao wrote:quoted
On 2021/02/03 12:08PM, Sandipan Das wrote:quoted
The Power ISA says that the fixed-point load and update instructions must neither use R0 for the base address (RA) nor have the destination (RT) and the base address (RA) as the same register. In these cases, the instruction is invalid.quoted
quoted
However, the following behaviour is observed using some invalid opcodes where RA = RT. An userspace program using an invalid instruction word like 0xe9ce0001, i.e. "ldu r14, 0(r14)", runs and exits without getting terminated abruptly. The instruction performs the load operation but does not write the effective address to the base address register.While the processor (p8 in my test) doesn't seem to be throwing an exception, I don't think it is necessarily loading the value. Qemu throws an exception though. It's probably best to term the behavior as being undefined.Power8 does: Load with Update Instructions (RA = 0) EA is placed into R0. Load with Update Instructions (RA = RT) EA is placed into RT. The storage operand addressed by EA is accessed, but the data returned by the load is discarded.
I'm actually not seeing that. This is what I am testing with: li 8,0xaaa mr 6,1 std 8,64(6) #ldu 6,64(6) .long 0xe8c60041 And, r6 always ends up with 0xaea. It changes with the value I put into r6 though. Granted, this is all up in the air, but it does look like there is more going on and the value isn't the EA or the value at the address.
Power9 does:
Load with Update Instructions (RA = 0)
EA is placed into R0.
Load with Update Instructions (RA = RT)
The storage operand addressed by EA is accessed. The displacement
field is added to the data returned by the load and placed into RT.
Both UMs also say
Invalid Forms
In general, the POWER9 core handles invalid forms of instructions in
the manner that is most convenient for the particular case (within
the scope of meeting the boundedly-undefined definition described in
the Power ISA). This document specifies the behavior for these
cases. However, it is not recommended that software or other system
facilities make use of the POWER9 behavior in these cases because
such behavior might be different in another processor that
implements the Power ISA.
(or POWER8 instead of POWER9 of course). Always complaining about most
invalid forms seems wise, certainly if not all recent CPUs behave the
same :-)Agreed. - Naveen