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

Reply via email to