Re: [PATCH v2 1/3] powerpc: sstep: Fix load and update emulation
flat view
From: Naveen N. Rao <hidden>
Date: 2021-03-04 13:46:13
On 2021/03/01 08:37PM, Segher Boessenkool wrote:
Hi! I didn't see this until now, almost a month later, sorry about that :-)
No problem.
On Thu, Feb 04, 2021 at 01:57:53PM +0530, Naveen N. Rao wrote:quoted
On 2021/02/03 03:17PM, Segher Boessenkool wrote:quoted
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.That is exactly the behaviour specified for p8. 0aaa+0040=0aea.quoted
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.That *is* the EA. The EA is the address the insn does the access at.
I'm probably missing something here. 0xaaa is the value I stored at an offset of 64 bytes from the stack pointer (r1 is copied into r6). In the ldu instruction above, the EA is 64(r6), which should translate to r1+64. The data returned by the load would be 0xaaa, which should be discarded per the description you provided above. So, I would expect to see a 0xc0.. address in r6. In fact, this looks to be the behavior documented for P9:
quoted
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.
- Naveen