| OLD | NEW |
| 1 ======================== | 1 ======================== |
| 2 PNaCl Undefined Behavior | 2 PNaCl Undefined Behavior |
| 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 .. _undefined_behavior: | 10 .. _undefined_behavior: |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 could mandate flush-to-zero, and may give an API to enable denormals | 170 could mandate flush-to-zero, and may give an API to enable denormals |
| 171 in a future release. The latter is problematic for SIMD and | 171 in a future release. The latter is problematic for SIMD and |
| 172 vectorization support, where some platforms do not support denormal | 172 vectorization support, where some platforms do not support denormal |
| 173 SIMD operations. | 173 SIMD operations. |
| 174 * ``NaN`` values are currently not guaranteed to be canonical; see `bug | 174 * ``NaN`` values are currently not guaranteed to be canonical; see `bug |
| 175 3536 <https://code.google.com/p/nativeclient/issues/detail?id=3536>`_. | 175 3536 <https://code.google.com/p/nativeclient/issues/detail?id=3536>`_. |
| 176 * Passing ``NaN`` to STL functions (the math is defined, but the | 176 * Passing ``NaN`` to STL functions (the math is defined, but the |
| 177 function implementation isn't, e.g. ``std::min`` and ``std::max``), is | 177 function implementation isn't, e.g. ``std::min`` and ``std::max``), is |
| 178 well-defined in the *pexe*. | 178 well-defined in the *pexe*. |
| 179 | 179 |
| 180 SIMD Vectors |
| 181 ^^^^^^^^^^^^ |
| 182 |
| 183 SIMD vector instructions aren't part of the C/C++ standards and as such |
| 184 their behavior isn't specified at all in C/C++; it is usually left up to |
| 185 the target architecture to specify behavior. Portable Native Client |
| 186 instead exposed :ref:`Portable SIMD Vectors <portable_simd_vectors>` and |
| 187 offers the same guarantees on these vectors as the guarantees offered by |
| 188 the contained elements. Of notable interest amongst these guarantees are |
| 189 those of alignment for load/store instructions on vectors: they have the |
| 190 same alignment restriction as the contained elements. |
| 191 |
| 180 Hard to Fix | 192 Hard to Fix |
| 181 ^^^^^^^^^^^ | 193 ^^^^^^^^^^^ |
| 182 | 194 |
| 183 * Null pointer/reference has behavior determined by the NaCl sandbox: | 195 * Null pointer/reference has behavior determined by the NaCl sandbox: |
| 184 | 196 |
| 185 * Raises a segmentation fault in the bottom ``64KiB`` bytes on all | 197 * Raises a segmentation fault in the bottom ``64KiB`` bytes on all |
| 186 platforms, and on some sandboxes there are further non-writable | 198 platforms, and on some sandboxes there are further non-writable |
| 187 pages after the initial ``64KiB``. | 199 pages after the initial ``64KiB``. |
| 188 * Negative offsets aren't handled consistently on all platforms: | 200 * Negative offsets aren't handled consistently on all platforms: |
| 189 x86-64 and ARM will wrap around to the stack (because they mask the | 201 x86-64 and ARM will wrap around to the stack (because they mask the |
| (...skipping 22 matching lines...) Expand all Loading... |
| 212 * PNaCl could offer "portable" JIT capabilities where the code hands | 224 * PNaCl could offer "portable" JIT capabilities where the code hands |
| 213 PNaCl some form of LLVM IR, which PNaCl then JIT-compiles. | 225 PNaCl some form of LLVM IR, which PNaCl then JIT-compiles. |
| 214 | 226 |
| 215 * Out-of-scope variable usage: will produce unknown data, mostly | 227 * Out-of-scope variable usage: will produce unknown data, mostly |
| 216 dependent on stack and memory allocation. | 228 dependent on stack and memory allocation. |
| 217 * Data races: any two operations that conflict (target overlapping | 229 * Data races: any two operations that conflict (target overlapping |
| 218 memory), at least one of which is a store or atomic read-modify-write, | 230 memory), at least one of which is a store or atomic read-modify-write, |
| 219 and at least one of which is not atomic: this will be very dependent | 231 and at least one of which is not atomic: this will be very dependent |
| 220 on processor and execution sequence, see :ref:`Memory Model and | 232 on processor and execution sequence, see :ref:`Memory Model and |
| 221 Atomics <memory_model_and_atomics>`. | 233 Atomics <memory_model_and_atomics>`. |
| OLD | NEW |