<div>found these, which gives some additional context:</div><a href="https://elixir.bootlin.com/linux/latest/source/arch/powerpc/include/asm/atomic.h">https://elixir.bootlin.com/linux/latest/source/arch/powerpc/include/asm/atomic.h</a><div><br></div><div>quick thoughts / reflections, the ATOMIC_OPS(xor) etc are macro-equivalent to why RV added amoadd, amoand, amoxor etc.</div><div><br></div><div>these RV operations (amo*) are what i was referring to that Ariane (Eth Zurich) actually implemented down in the L2 cache, behind a single (contended) AXI4 bus.  consequently they can&#39;t *be* anything other than atomic. here&#39;s the client-side communication:</div><div><a href="https://github.com/openhwgroup/cva6/blob/master/src/cache_subsystem/wt_axi_adapter.sv#L191">https://github.com/openhwgroup/cva6/blob/master/src/cache_subsystem/wt_axi_adapter.sv#L191</a><br></div><div>now i think about it, i wonder how that would scale? hmm.<br></div><div><br></div><div>all of the other linux kernel ppc macros are very short: maximum of six/seven instructions, usually 4/5.  they&#39;re also very basic.</div><div><br></div><div>coming back then to what is in the RV spec:</div><div><br></div><table class="highlight tab-size js-file-line-container" style="box-sizing:border-box;border-spacing:0px;border-collapse:collapse;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;font-size:14px"><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box"><td id="LC327" class="blob-code blob-code-inner js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:SFMono-Regular,Consolas,&quot;Liberation Mono&quot;,Menlo,monospace;font-size:12px;color:var(--color-text-primary);word-wrap:normal;white-space:pre">  Floating-point operations and integer<br><table class="highlight tab-size js-file-line-container" style="white-space:normal;box-sizing:border-box;border-spacing:0px;border-collapse:collapse;font-family:-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;font-size:14px"><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box;background-color:initial"><td id="LC328" class="blob-code blob-code-inner js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:SFMono-Regular,Consolas,&quot;Liberation Mono&quot;,Menlo,monospace;font-size:12px;color:var(--color-text-primary);word-wrap:normal;white-space:pre">multiply/divide were disallowed to simplify the operating system&#39;s emulation
<table class="highlight tab-size js-file-line-container" style="white-space:normal;box-sizing:border-box;border-spacing:0px;border-collapse:collapse;font-family:-apple-system,BlinkMacSystemFont,&quot;Segoe UI&quot;,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;font-size:14px"><tbody style="box-sizing:border-box"><tr style="box-sizing:border-box"><td id="LC329" class="blob-code blob-code-inner js-file-line" style="box-sizing:border-box;padding:0px 10px;line-height:20px;vertical-align:top;overflow:visible;font-family:SFMono-Regular,Consolas,&quot;Liberation Mono&quot;,Menlo,monospace;font-size:12px;color:var(--color-text-primary);word-wrap:normal;white-space:pre">of these instructions on implementations lacking appropriate hardware support.
</td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table><div><div><br></div><div>this becomes an issue in Power ISA for Embedded Compliancy where it may be perfectly reasonable, for saving on context-switching time, to add multiple SMP cores plus atomic operations.  (we discussed this very scenario on wednesday, where a single core in FPGA at 50mhz was not quite coping).</div></div><div><br></div><div>if floating point is not implemented, and creates an illegal exception, that&#39;s in the middle of an LR SC, it is going to be challenging.</div><div><br></div><div>in Libre-SOC&#39;s case, it would be SIMD instructions that, if used in an LRSC block, could actually end up causing real-world non-hypothetical problems (because we intend to trap-and-emulate them).</div><div><br></div><div>l.</div><div><br></div><div><br></div><div><br></div><br><br>-- <br>---<br>crowd-funded eco-conscious hardware: <a href="https://www.crowdsupply.com/eoma68" target="_blank">https://www.crowdsupply.com/eoma68</a><br><br>