Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Unified Diff: native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst

Issue 250433002: PNaCl documentation: add SIMD vectors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address dschuff's comments. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
diff --git a/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst b/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
index cd62a2b252a258cca5a217aa35b546b35ae1ef5d..1e0feaa080cf2744a729cc738e544f7612d8d598 100644
--- a/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
+++ b/native_client_sdk/src/doc/reference/pnacl-c-cpp-language-support.rst
@@ -198,6 +198,111 @@ NaCl supports a fairly wide subset of inline assembly through GCC's
inline assembly syntax, with the restriction that the sandboxing model
for the target architecture has to be respected.
+.. _portable_simd_vectors:
+
+Portable SIMD Vectors
+=====================
+
+SIMD vectors aren't part of the C/C++ standards and are traditionally
+very hardware-specific. Portable Native Client offers a portable version
+of SIMD vector datatypes and operations which map well to modern
+architectures and offer performance which matches or approaches
+hardware-specific uses.
+
+SIMD vector support was added to Portable Native Client for version 36
+of Chrome, and more features are expected to be added in subsequent
+releases.
+
+Hand-Coding Vector Extensions
+-----------------------------
+
+The initial vector support in Portable Native Client adds `LLVM vectors
+<http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors>`_
+and `GCC vectors
+<http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html>`_ since these
+are well supported by different hardware platforms and don't require any
+new compiler intrinsics.
+
+Vector types can be used through the ``vector_size`` attribute:
+
+.. naclcode::
+
+ typedef int v4si __attribute__((vector_size(16)));
+ v4si a = {1,2,3,4};
+ v4si b = {5,6,7,8};
+ v4si c, d, e;
+ c = b + 1; /* c = b + {1,1,1,1}; */
+ d = 2 * b; /* d = {2,2,2,2} * b; */
+ e = c + d;
+
+Vector comparisons are represented as a bitmask as wide as the compared
+elements of all ``0`` or all ``1``:
+
+.. naclcode::
+
+ typedef int v4si __attribute__((vector_size(16)));
+ v4si snip(v2si in) {
+ v4si limit = {32,64,128,256};
+ vs4i mask = in > limit;
+ vs4i ret = in & mask;
+ return ret;
+ }
+
+Vector datatypes are currently expected to be 128-bit wide with one of
+the following element types:
+
+============ ============ ================
+Type Num Elements Vector Bit Width
+============ ============ ================
+``uint8_t`` 16 128
+``int8_t`` 16 128
+``uint16_t`` 8 128
+``int16_t`` 8 128
+``uint32_t`` 4 128
+``int32_t`` 4 128
+``float`` 4 128
+============ ============ ================
+
+64-bit integers and double-precision floating point will be supported in
+a future release, as will 256-bit and 512-bit vectors.
+
+The following operators are supported on vectors:
+
++----------------------------------------------+
+| unary ``+``, ``-`` |
++----------------------------------------------+
+| ``++``, ``--`` |
++----------------------------------------------+
+| ``+``, ``-``, ``*``, ``/``, ``%`` |
++----------------------------------------------+
+| ``&``, ``|``, ``^``, ``~`` |
++----------------------------------------------+
+| ``>>``, ``<<`` |
++----------------------------------------------+
+| ``!``, ``&&``, ``||`` |
++----------------------------------------------+
+| ``==``, ``!=``, ``>``, ``<``, ``>=``, ``<=`` |
++----------------------------------------------+
+| ``=`` |
++----------------------------------------------+
+
+Furthermore, C-style casts can be used for:
+
+* Truncation.
+* Zero- and sign-extension.
+* Conversion to/from floating-point and signed/unsigned integer.
+
+It is also possible to use array-style indexing into vectors to extract
+individual elements using ``[]``.
+
+Vector shuffles are currently unsupported but will be added soon.
+
+Auto-Vectorization
+------------------
+
+Auto-vectorization is currently not enabled for Portable Native Client,
+but will be in a future release.
+
Undefined Behavior
==================
@@ -250,14 +355,6 @@ NaCl supports computed ``goto`` without any transformation.
Future Directions
=================
-SIMD
-----
-
-PNaCl currently doesn't support SIMD. We plan to add SIMD support in the
-very near future.
-
-NaCl supports SIMD.
-
Inter-Process Communication
---------------------------

Powered by Google App Engine
This is Rietveld 408576698