<div dir="ltr">Replied too early... Below:<div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 10, 2016 at 2:04 PM, JF Bastien <span dir="ltr"><<a href="mailto:jfb@google.com">jfb@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Thanks for the writeup, that is indeed pretty ugly. Simple asm(:::"memory") isn't sufficient either, since the regalloc can decode to spill :-(<br><div class="gmail_extra"><br><div class="gmail_quote"><span class="gmail-">On Tue, May 10, 2016 at 12:22 PM, James Knight via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><div>Unfortunately, neither ARM nor PPC appear to precisely document the architectural constraints under which forward progress must be guaranteed by the implementation. They certainly have the same underlying implementation issues that give rise to the above rules -- that much seems documented -- they just don't appear to make explicit guarantees on how you can guarantee success. ARM does "recommend" that LL/SC loops fit within 128 bytes, though.</div></div></div></div></blockquote><div><br></div></span><div>For ARMv7 from the ARM ARM:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>A Load-Exclusive instruction tags a small block of memory for exclusive access. The size of the tagged block is IMPLEMENTATION DEFINED, see Tagging and the size of the tagged memory block on page A3-121. A Store-Exclusive instruction to the same address clears the tag.</div></div></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><div>And:</div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>The value of a in this assignment is IMPLEMENTATION DEFINED, between a minimum value of 3 and a maximum value of 11. For example, in an implementation where a is 4, a successful LDREX of address 0x000341B4 gives a tag value of bits[31:4] of the address, giving 0x000341B. This means that the four words of memory from 0x000341B0 to 0x000341BF are tagged for exclusive access.</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>The size of the tagged memory block is called the Exclusives Reservation Granule. The Exclusives Reservation Granule is IMPLEMENTATION DEFINED in the range 2-512 words:</div></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><div>• 2 words in an implementation where a is 3</div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div><div>• 512 words in an implementation where a is 11</div></div></div></div></blockquote></div></blockquote><div><br></div><div><br></div><div>There's a bit more info here:</div></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div class="gmail_extra"><div class="gmail_quote"><div>When a processor writes using any instruction other than a Store-Exclusive:</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>• if the write is to a physical address that is not covered by its local monitor the write does not affect the state of the local monitor</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>• if the write is to a physical address that is covered by its local monitor it is IMPLEMENTATION DEFINED whether the write affects the state of the local monitor.</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div><br></div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>If the local monitor is in the Exclusive Access state and the processor performs a Store-Exclusive to any address other than the last one from which it performed a Load-Exclusive, it is IMPLEMENTATION DEFINED whether the store updates memory, but in all cases the local monitor is reset to the Open Access state. This mechanism:</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>• is used on a context switch, see Context switch support on page A3-122</div></div></div><div class="gmail_extra"><div class="gmail_quote"><div>• must be treated as a software programming error in all other cases </div></div></div></blockquote><div class="gmail_extra"><br></div><div class="gmail_extra">And around similar parts of the manual. You can search the web for these, they're all "superseded" versions of the docs and I can't find the canonical one!</div></div>