Index: docs/PNaClLangRef.rst |
diff --git a/docs/PNaClLangRef.rst b/docs/PNaClLangRef.rst |
index 75218a0c02465cfee759648dbf229b7776fcd83f..624bebbda66d32bd0ae355cd3f35e4af4c2a57bb 100644 |
--- a/docs/PNaClLangRef.rst |
+++ b/docs/PNaClLangRef.rst |
@@ -143,25 +143,30 @@ Volatile Memory Accesses |
`LLVM LangRef: Volatile Memory Accesses <LangRef.html#volatile>`_ |
-PNaCl bitcode does not support volatile memory accesses. The ``volatile`` |
-attribute on loads and stores is not supported. See the |
+PNaCl bitcode does not support volatile memory accesses. The |
+``volatile`` attribute on loads and stores is not supported. See the |
`PNaCl Developer's Guide <PNaClDeveloperGuide.html>`_ for more details. |
Memory Model for Concurrent Operations |
-------------------------------------- |
-`LLVM LangRef: Memory Model for Concurrent Operations <LangRef.html#memmodel>`_ |
+`LLVM LangRef: Memory Model for Concurrent Operations |
+<LangRef.html#memmodel>`_ |
-See the `PNaCl Developer's Guide <PNaClDeveloperGuide.html>`_ for more details. |
+See the `PNaCl Developer's Guide <PNaClDeveloperGuide.html>`_ for more |
+details. |
Atomic Memory Ordering Constraints |
---------------------------------- |
`LLVM LangRef: Atomic Memory Ordering Constraints <LangRef.html#ordering>`_ |
-PNaCl bitcode currently supports sequential consistency only, through its |
-`atomic intrinsics`_. See the |
-`PNaCl Developer's Guide <PNaClDeveloperGuide.html>`_ for more details. |
+PNaCl bitcode currently supports sequential consistency only, through |
+its `atomic intrinsics`_. See the `PNaCl Developer's Guide |
+<PNaClDeveloperGuide.html>`_ for more details. |
+ |
+The integer values for memory ordering constraints are in |
+``"llvm/IR/NaClAtomicIntrinsics.h"``. |
Fast-Math Flags |
--------------- |
@@ -410,6 +415,8 @@ The only intrinsics supported by PNaCl bitcode are the following. |
* ``llvm.nacl.atomic.rmw`` |
* ``llvm.nacl.atomic.cmpxchg`` |
* ``llvm.nacl.atomic.fence`` |
+* ``llvm.nacl.atomic.fence.all`` |
+* ``llvm.nacl.atomic.is.lock.free`` |
See :ref:`atomic intrinsics <atomicintrinsics>`. |
@@ -434,9 +441,9 @@ Setjmp and Longjmp |
declare void @llvm.nacl.longjmp(i8* %jmpbuf, i32) |
declare i32 @llvm.nacl.setjmp(i8* %jmpbuf) |
-These intrinsics implement the semantics of C11 ``setjmp`` and ``longjmp``. The |
-``jmpbuf`` pointer must be 64-bit aligned and point to at least 1024 bytes of |
-allocated memory. |
+These intrinsics implement the semantics of C11 ``setjmp`` and |
+``longjmp``. The ``jmpbuf`` pointer must be 64-bit aligned and point to |
+at least 1024 bytes of allocated memory. |
.. _atomicintrinsics: |
@@ -455,10 +462,11 @@ Atomic intrinsics |
iN* <object>, iN <expected>, iN <desired>, |
i32 <memory_order_success>, i32 <memory_order_failure>) |
declare void @llvm.nacl.atomic.fence(i32 <memory_order>) |
+ declare void @llvm.nacl.atomic.fence.all() |
-Each of these intrinsics is overloaded on the ``iN`` argument, which |
-is reflected through ``<size>`` in the overload's name. Integral types |
-of 8, 16, 32 and 64-bit width are supported for these arguments. |
+Each of these intrinsics is overloaded on the ``iN`` argument, which is |
+reflected through ``<size>`` in the overload's name. Integral types of |
+8, 16, 32 and 64-bit width are supported for these arguments. |
The ``@llvm.nacl.atomic.rmw`` intrinsic implements the following |
read-modify-write operations, from the general and arithmetic sections |
@@ -472,8 +480,8 @@ of the C11/C++11 standards: |
- ``exchange`` |
For all of these read-modify-write operations, the returned value is |
-that at ``object`` before the computation. The ``computation`` |
-argument must be a compile-time constant. |
+that at ``object`` before the computation. The ``computation`` argument |
+must be a compile-time constant. |
All atomic intrinsics also support C11/C++11 memory orderings, which |
must be compile-time constants. Those are detailed in `Atomic Memory |
@@ -482,12 +490,17 @@ Ordering Constraints`_. |
Integer values for these computations and memory orderings are defined |
in ``"llvm/IR/NaClAtomicIntrinsics.h"``. |
+The ``@llvm.nacl.atomic.fence.all`` intrinsic is equivalent to the |
+``@llvm.nacl.atomic.fence`` intrinsic with sequentially consistent |
+ordering and compiler barriers preventing most non-atomic memory |
+accesses from reordering around it. |
+ |
.. note:: |
These intrinsics allow PNaCl to support C11/C++11 style atomic |
operations as well as some legacy GCC-style ``__sync_*`` builtins |
- while remaining stable as the LLVM codebase changes. The user |
- isn't expected to use these intrinsics directly. |
+ while remaining stable as the LLVM codebase changes. The user isn't |
+ expected to use these intrinsics directly. |
.. code-block:: llvm |