| OLD | NEW |
| 1 ============================ | 1 ============================ |
| 2 PNaCl C/C++ Language Support | 2 PNaCl C/C++ Language Support |
| 3 ============================ | 3 ============================ |
| 4 | 4 |
| 5 .. contents:: | 5 .. contents:: |
| 6 :local: | 6 :local: |
| 7 :backlinks: none | 7 :backlinks: none |
| 8 :depth: 3 | 8 :depth: 3 |
| 9 | 9 |
| 10 Source language support | 10 Source language support |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 The memory model offered by PNaCl relies on the same coding guidelines | 42 The memory model offered by PNaCl relies on the same coding guidelines |
| 43 as the C11/C++11 one: concurrent accesses must always occur through | 43 as the C11/C++11 one: concurrent accesses must always occur through |
| 44 atomic primitives (offered by `atomic intrinsics | 44 atomic primitives (offered by `atomic intrinsics |
| 45 <PNaClLangRef.html#atomicintrinsics>`_), and these accesses must always | 45 <PNaClLangRef.html#atomicintrinsics>`_), and these accesses must always |
| 46 occur with the same size for the same memory location. Visibility of | 46 occur with the same size for the same memory location. Visibility of |
| 47 stores is provided on a happens-before basis that relates memory | 47 stores is provided on a happens-before basis that relates memory |
| 48 locations to each other as the C11/C++11 standards do. | 48 locations to each other as the C11/C++11 standards do. |
| 49 | 49 |
| 50 Non-atomic memory accesses may be reordered, separated, elided or fused | 50 Non-atomic memory accesses may be reordered, separated, elided or fused |
| 51 according to C and C++'s memory model before the pexe is created as well | 51 according to C and C++'s memory model before the pexe is created as well |
| 52 as after its creation. | 52 as after its creation. Accessing atomic memory location through |
| 53 non-atomic primitives is `Undefined Behavior <undefined_behavior>`. |
| 53 | 54 |
| 54 As in C11/C++11 some atomic accesses may be implemented with locks on | 55 As in C11/C++11 some atomic accesses may be implemented with locks on |
| 55 certain platforms. The ``ATOMIC_*_LOCK_FREE`` macros will always be | 56 certain platforms. The ``ATOMIC_*_LOCK_FREE`` macros will always be |
| 56 ``1``, signifying that all types are sometimes lock-free. The | 57 ``1``, signifying that all types are sometimes lock-free. The |
| 57 ``is_lock_free`` methods and ``atomic_is_lock_free`` will return the | 58 ``is_lock_free`` methods and ``atomic_is_lock_free`` will return the |
| 58 current platform's implementation at translation time. These macros, | 59 current platform's implementation at translation time. These macros, |
| 59 methods and functions are in the C11 header ``<stdatomic.h>`` and the | 60 methods and functions are in the C11 header ``<stdatomic.h>`` and the |
| 60 C++11 header ``<atomic>``. | 61 C++11 header ``<atomic>``. |
| 61 | 62 |
| 62 The PNaCl toolchain supports concurrent memory accesses through legacy | 63 The PNaCl toolchain supports concurrent memory accesses through legacy |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 ``asm("":::"memory")``, which gets transformed to a sequentially | 182 ``asm("":::"memory")``, which gets transformed to a sequentially |
| 182 consistent memory barrier (equivalent to ``__sync_synchronize()``). In | 183 consistent memory barrier (equivalent to ``__sync_synchronize()``). In |
| 183 PNaCl this barrier is only guaranteed to order ``volatile`` and atomic | 184 PNaCl this barrier is only guaranteed to order ``volatile`` and atomic |
| 184 memory accesses, though in practice the implementation attempts to also | 185 memory accesses, though in practice the implementation attempts to also |
| 185 prevent reordering of memory accesses to objects which may escape. | 186 prevent reordering of memory accesses to objects which may escape. |
| 186 | 187 |
| 187 NaCl supports a fairly wide subset of inline assembly through GCC's | 188 NaCl supports a fairly wide subset of inline assembly through GCC's |
| 188 inline assembly syntax, with the restriction that the sandboxing model | 189 inline assembly syntax, with the restriction that the sandboxing model |
| 189 for the target architecture has to be respected. | 190 for the target architecture has to be respected. |
| 190 | 191 |
| 192 Undefined Behavior |
| 193 ================== |
| 194 |
| 195 The C and C++ languages expose some undefined behavior which is |
| 196 discussed in `PNaCl Undefined Behavior <undefined_behavior>`. |
| 197 |
| 191 Future Directions | 198 Future Directions |
| 192 ================= | 199 ================= |
| 193 | 200 |
| 194 SIMD | 201 SIMD |
| 195 ---- | 202 ---- |
| 196 | 203 |
| 197 PNaCl currently doesn't support SIMD. We plan to add SIMD support in the | 204 PNaCl currently doesn't support SIMD. We plan to add SIMD support in the |
| 198 very near future. | 205 very near future. |
| 199 | 206 |
| 200 NaCl supports SIMD. | 207 NaCl supports SIMD. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 ``volatile`` and atomics with same-thread signal handling would need | 244 ``volatile`` and atomics with same-thread signal handling would need |
| 238 to be carefully detailed. | 245 to be carefully detailed. |
| 239 | 246 |
| 240 Computed ``goto`` | 247 Computed ``goto`` |
| 241 ----------------- | 248 ----------------- |
| 242 | 249 |
| 243 PNaCl currently doesn't support computed ``goto``, a non-standard | 250 PNaCl currently doesn't support computed ``goto``, a non-standard |
| 244 extension to C used by some interpreters. | 251 extension to C used by some interpreters. |
| 245 | 252 |
| 246 NaCl supports computed ``goto``. | 253 NaCl supports computed ``goto``. |
| OLD | NEW |