On 2019-01-15, at 10:48:52, Ngan, Robert wrote:
> If you want to load two doublewords, block concurrency guarantees each
> (aligned) doubleword is consistent, but if task 2 is in process of updating
> both doublewords, using (for example) LMG may result in you loading one
> doubleword from before task 2's change and one after.
>
Oh, this is tricky! I had to look it up. PoOps says:
Block-Concurrent References
For *some* references, the accesses to all bytes within a halfword, word,
doubleword,
or quadword are specified to appear to be block concurrent as observed by
other CPUs
and channel programs.
(I emphasized the "some".) But elsewhere:
...; the instructions LOAD MULTIPLE (LMG) and STORE MULTIPLE (STMG), when
the
operand starts on a doubleword boundary; ... access their storage operands
in a
left-to-right direction, and all bytes accessed within each doubleword
appear
to be accessed concurrently as observed by other CPUs.
-- gil