The purpose of this extension is to provide load-acquire and store-release instructions into RISC-V. As seen in cite:[hansdoc], these can be important for high performance designs.
They are also widely used in language-level memory models.
Both the Java cite:[manson2005java] and C++ cite:[boehm2008foundations] memory models make use of acquire-release semantics, and C++'s atomic
provides primitives that are meant to map directly to load-acquire and store-release instructions.