| 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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 =============== | 187 =============== |
| 188 | 188 |
| 189 Inline assembly isn't supported by PNaCl because it isn't portable. The | 189 Inline assembly isn't supported by PNaCl because it isn't portable. The |
| 190 one current exception is the common compiler barrier idiom | 190 one current exception is the common compiler barrier idiom |
| 191 ``asm("":::"memory")``, which gets transformed to a sequentially | 191 ``asm("":::"memory")``, which gets transformed to a sequentially |
| 192 consistent memory barrier (equivalent to ``__sync_synchronize()``). In | 192 consistent memory barrier (equivalent to ``__sync_synchronize()``). In |
| 193 PNaCl this barrier is only guaranteed to order ``volatile`` and atomic | 193 PNaCl this barrier is only guaranteed to order ``volatile`` and atomic |
| 194 memory accesses, though in practice the implementation attempts to also | 194 memory accesses, though in practice the implementation attempts to also |
| 195 prevent reordering of memory accesses to objects which may escape. | 195 prevent reordering of memory accesses to objects which may escape. |
| 196 | 196 |
| 197 PNaCl supports :ref:`Portable SIMD Vectors <portable_simd_vectors>`, |
| 198 which are traditionally expressed through target-specific intrinsics or |
| 199 inline assembly. |
| 200 |
| 197 NaCl supports a fairly wide subset of inline assembly through GCC's | 201 NaCl supports a fairly wide subset of inline assembly through GCC's |
| 198 inline assembly syntax, with the restriction that the sandboxing model | 202 inline assembly syntax, with the restriction that the sandboxing model |
| 199 for the target architecture has to be respected. | 203 for the target architecture has to be respected. |
| 200 | 204 |
| 201 .. _portable_simd_vectors: | 205 .. _portable_simd_vectors: |
| 202 | 206 |
| 203 Portable SIMD Vectors | 207 Portable SIMD Vectors |
| 204 ===================== | 208 ===================== |
| 205 | 209 |
| 206 SIMD vectors aren't part of the C/C++ standards and are traditionally | 210 SIMD vectors aren't part of the C/C++ standards and are traditionally |
| 207 very hardware-specific. Portable Native Client offers a portable version | 211 very hardware-specific. Portable Native Client offers a portable version |
| 208 of SIMD vector datatypes and operations which map well to modern | 212 of SIMD vector datatypes and operations which map well to modern |
| 209 architectures and offer performance which matches or approaches | 213 architectures and offer performance which matches or approaches |
| 210 hardware-specific uses. | 214 hardware-specific uses. |
| 211 | 215 |
| 212 SIMD vector support was added to Portable Native Client for version 36 | 216 SIMD vector support was added to Portable Native Client for version 37 |
| 213 of Chrome, and more features are expected to be added in subsequent | 217 of Chrome and more features, including performance enhancements, are |
| 214 releases. | 218 expected to be added in subsequent releases. |
| 215 | 219 |
| 216 Hand-Coding Vector Extensions | 220 Hand-Coding Vector Extensions |
| 217 ----------------------------- | 221 ----------------------------- |
| 218 | 222 |
| 219 The initial vector support in Portable Native Client adds `LLVM vectors | 223 The initial vector support in Portable Native Client adds `LLVM vectors |
| 220 <http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors
>`_ | 224 <http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors
>`_ |
| 221 and `GCC vectors | 225 and `GCC vectors |
| 222 <http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>`_ since these | 226 <http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>`_ since these |
| 223 are well supported by different hardware platforms and don't require any | 227 are well supported by different hardware platforms and don't require any |
| 224 new compiler intrinsics. | 228 new compiler intrinsics. |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 A similar feature is **thread suspension**: The ability to | 442 A similar feature is **thread suspension**: The ability to |
| 439 asynchronously suspend and resume a thread and inspect or modify its | 443 asynchronously suspend and resume a thread and inspect or modify its |
| 440 execution state (such as register state). | 444 execution state (such as register state). |
| 441 | 445 |
| 442 Neither PNaCl nor NaCl currently support asynchronous interruption | 446 Neither PNaCl nor NaCl currently support asynchronous interruption |
| 443 or suspension of threads. | 447 or suspension of threads. |
| 444 | 448 |
| 445 If PNaCl were to support either of these, the interaction of | 449 If PNaCl were to support either of these, the interaction of |
| 446 ``volatile`` and atomics with same-thread signal handling would need | 450 ``volatile`` and atomics with same-thread signal handling would need |
| 447 to be carefully detailed. | 451 to be carefully detailed. |
| OLD | NEW |