Update OpenCL 2.2 specs for 2.2-10 maintenance release (#60)

* Update OpenCL 2.2 specs with 2.2-10 maintenance release output.  Remove 2.2 specs from specs/, because server redirects into 2.2/ mask them.

* Update spec release dates on index page
diff --git a/index.php b/index.php
index 1873edf..1349bdb 100644
--- a/index.php
+++ b/index.php
@@ -35,27 +35,27 @@
 <li> OpenCL 2.2 API Specification
      (<a href="specs/2.2/html/OpenCL_API.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_API.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> OpenCL 2.2 Extension Specification
      (<a href="specs/2.2/html/OpenCL_Ext.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_Ext.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> OpenCL SPIR-V Environment Specification
      (<a href="specs/2.2/html/OpenCL_Env.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_Env.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> OpenCL C Language Specification
      (<a href="specs/2.2/html/OpenCL_C.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_C.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> OpenCL C++ Language Specification
      (<a href="specs/2.2/html/OpenCL_Cxx.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_Cxx.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> OpenCL ICD Installation Guide Specification
      (<a href="specs/2.2/html/OpenCL_ICD_Installation.html">HTML</a>)
      (<a href="specs/2.2/pdf/OpenCL_ICD_Installation.pdf">PDF</a>)
-     (October 8, 2018). </li>
+     (February 5, 2019). </li>
 <li> The <a href="https://www.khronos.org/registry/spir-v/"> OpenCL Extended
      Instruction Set for SPIR-V</a> is included as part of the SPIR-V
      registry.
diff --git a/specs/2.2/html/OpenCL_API.html b/specs/2.2/html/OpenCL_API.html
index dacbc0f..17a77c5 100644
--- a/specs/2.2/html/OpenCL_API.html
+++ b/specs/2.2/html/OpenCL_API.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.5">
-<meta name="author" content="Khronos OpenCL Working Group">
+<meta name="generator" content="Asciidoctor 1.5.7">
+<meta name="author" content="Khronos&#174; OpenCL Working Group">
 <title>The OpenCL&#8482; Specification</title>
 <style>
 /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
@@ -724,7 +724,7 @@
 .literalblock pre, .listingblock pre { background: #eeeeee; }
 
 </style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
 <style>
 /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
 /*pre.CodeRay {background-color:#f7f7f8;}*/
@@ -840,10 +840,10 @@
 <div id="header">
 <h1>The OpenCL<sup>&#8482;</sup> Specification</h1>
 <div class="details">
-<span id="author" class="author">Khronos OpenCL Working Group</span><br>
-<span id="revnumber">version 2.2-8,</span>
-<span id="revdate">Mon, 08 Oct 2018 16:49:19 +0000</span>
-<br><span id="revremark">from git branch: master commit: b3cab22fcff5d8c17869907c983e259ddd7ce788</span>
+<span id="author" class="author">Khronos<sup>&#174;</sup> OpenCL Working Group</span><br>
+<span id="revnumber">version v2.2-10,</span>
+<span id="revdate">Tue, 05 Feb 2019 21:16:07 +0000</span>
+<br><span id="revremark">from git branch:  commit: 00422daf5dc013f21ab633479577c7cc225150e2</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -936,7 +936,7 @@
 <div class="sectionbody">
 <div style="page-break-after: always;"></div>
 <div class="paragraph">
-<p>Copyright 2008-2018 The Khronos Group.</p>
+<p>Copyright 2008-2019 The Khronos Group.</p>
 </div>
 <div class="paragraph">
 <p>This specification is protected by copyright laws and contains material proprietary
@@ -967,7 +967,7 @@
 otherwise, arising from or in connection with these materials.</p>
 </div>
 <div class="paragraph">
-<p>Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL,
+<p>Vulkan and Khronos are registered trademarks, and OpenXR, SPIR, SPIR-V, SYCL, WebGL,
 WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput,
 OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are
 trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC,
@@ -1997,7 +1997,7 @@
 synchronize-with an atomic load to <strong>M</strong> by <strong>B</strong> that used acquire
 semantics, then <strong>A</strong>'s atomic store will occur <em>after</em> any prior
 operations by <strong>A</strong>.
-Note that the memory orders <em>acquire</em>, <em>sequentialy consistent</em>, and
+Note that the memory orders <em>acquire</em>, <em>sequentially consistent</em>, and
 <em>acquire_release</em> all include <em>acquire semantics</em> and effectively pair
 with a store using release semantics.</p>
 </dd>
@@ -2038,7 +2038,7 @@
 <dd>
 <p>The action of incrementing (retain) and decrementing (release) the
 reference count using an OpenCL <em>object</em>.
-This is a book keeping functionality to make sure the system doesnt
+This is a book keeping functionality to make sure the system doesn&#8217;t
 remove an <em>object</em> before all instances that use this <em>object</em> have
 finished.
 Refer to <em>Reference Count</em>.</p>
@@ -2136,12 +2136,13 @@
 <dt class="hdlist1">Specialization constants </dt>
 <dd>
 <p>Specialization is intended for constant objects that will not have known
-constant values until after initial generation of a SPIR-V module.
-Such objects are called specialization constants.
+constant values until after initial generation of a module in an intermediate
+representation format (e.g. SPIR-V). Such objects are called specialization
+constants.
 Application might provide values for the specialization constants that
-will be used when SPIR-V program is built.
+will be used when program is built from the intermediate format.
 Specialization constants that do not receive a value from an application
-shall use default value as defined in SPIR-V specification.</p>
+shall use default values as defined in OpenCL C++ or SPIR-V specification.</p>
 </dd>
 <dt class="hdlist1">SPMD </dt>
 <dd>
@@ -2585,7 +2586,7 @@
 devices.</p>
 </li>
 <li>
-<p>The third source of prerequisities can be the presence of non-trivial C
+<p>The third source of prerequisites can be the presence of non-trivial C
 initializers or C constructors for program scope global variables.
 In this case, OpenCL C/C compiler shall generate program
 initialization kernels that perform C initialization or C++
@@ -3006,7 +3007,7 @@
 work-items in a single work-group</p>
 </li>
 <li>
-<p>Sub-group synchronization: Contraints on the order of execution for
+<p>Sub-group synchronization: Constraints on the order of execution for
 work-items in a single sub-group</p>
 </li>
 <li>
@@ -3282,7 +3283,7 @@
 The global and constant memories, however, are shared between all devices
 within a given context.
 An OpenCL device may include a cache to support efficient access to these
-shared memories</p>
+shared memories.</p>
 </div>
 <div class="paragraph">
 <p>To understand memory in OpenCL, it is important to appreciate the
@@ -3459,15 +3460,15 @@
 <td class="tableblock halign-left valign-top" rowspan="2"><p class="tableblock">Kernel</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Static Allocation for program scope variables</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Static Allocation</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Static Allocation.
-</p><p class="tableblock">            Dynamic allocation for child kernel</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Static Allocation.</p>
+<p class="tableblock">            Dynamic allocation for child kernel</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Static Allocation</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read/Write access</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read-only access</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Read/Write access.
-</p><p class="tableblock">        No access to child&#8217;s local memory.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Read/Write access.</p>
+<p class="tableblock">        No access to child&#8217;s local memory.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read/Write access</p></td>
 </tr>
 </tbody>
@@ -3593,7 +3594,7 @@
 </li>
 </ul>
 </div>
-<table id="svm-summary-table" class="tableblock frame-all grid-all spread">
+<table id="svm-summary-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 2. A summary of shared virtual memory (SVM) options in OpenCL</caption>
 <colgroup>
 <col style="width: 20%;">
@@ -3627,7 +3628,7 @@
 <td class="tableblock halign-center valign-top"><p class="tableblock">yes, through Map and Unmap commands.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-center valign-top"><p class="tableblock">Fine Grained buffer SVM</p></td>
+<td class="tableblock halign-center valign-top"><p class="tableblock">Fine-Grained buffer SVM</p></td>
 <td class="tableblock halign-center valign-top"><p class="tableblock">Bytes within OpenCL Memory objects (buffer)</p></td>
 <td class="tableblock halign-center valign-top"><p class="tableblock"><strong>clSVMAlloc</strong></p></td>
 <td class="tableblock halign-center valign-top"><p class="tableblock">Synchronization points plus atomics (if supported)</p></td>
@@ -3707,7 +3708,7 @@
 <li>
 <p><strong>memory_order_relaxed</strong>: implies no order constraints.
 This memory order can be used safely to increment counters that are
-concurrently incremented, but it doesnt guarantee anything about the
+concurrently incremented, but it doesn&#8217;t guarantee anything about the
 ordering with respect to operations to other memory locations.
 It can also be used, for example, to do ticket allocation and by expert
 programmers implementing lock-free algorithms.</p>
@@ -4498,7 +4499,7 @@
 <p>Earlier, we introduced synchronization primitives called fences.
 Fences can utilize the acquire memory_order, release memory_order, or both.
 A fence with acquire semantics is called an acquire fence; a fence with
-release semantics is called a release fence.  The <a href="#atomic-fence-orders">overview of atomic and fence operations</a> section decribes the memory orders
+release semantics is called a release fence.  The <a href="#atomic-fence-orders">overview of atomic and fence operations</a> section describes the memory orders
 that result in acquire and release fences.</p>
 </div>
 <div class="paragraph">
@@ -5138,7 +5139,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="platform-queries-table" class="tableblock frame-all grid-all spread">
+<table id="platform-queries-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 3. OpenCL Platform Queries</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -5158,11 +5159,11 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]<sup>1</sup></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">OpenCL profile string.
         Returns the profile name supported by the implementation.
-        The profile name returned can be one of the following strings:
-</p><p class="tableblock">        FULL_PROFILE - if the implementation supports the OpenCL
+        The profile name returned can be one of the following strings:</p>
+<p class="tableblock">        FULL_PROFILE - if the implementation supports the OpenCL
         specification (functionality defined as part of the core
-        specification and does not require any extensions to be supported).
-</p><p class="tableblock">        EMBEDDED_PROFILE - if the implementation supports the OpenCL
+        specification and does not require any extensions to be supported).</p>
+<p class="tableblock">        EMBEDDED_PROFILE - if the implementation supports the OpenCL
         embedded profile.
         The embedded profile is defined to be a subset for each version of
         OpenCL.
@@ -5174,10 +5175,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">OpenCL version string.
         Returns the OpenCL version supported by the implementation.
-        This version string has the following format:
-</p><p class="tableblock">        <em>OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;platform-specific
-        information&gt;</em>
-</p><p class="tableblock">        The <em>major_version.minor_version</em> value returned will be 2.2.</p></td>
+        This version string has the following format:</p>
+<p class="tableblock">        <em>OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;platform-specific
+        information&gt;</em></p>
+<p class="tableblock">        The <em>major_version.minor_version</em> value returned will be 2.2.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_PLATFORM_NAME</strong></p></td>
@@ -5279,7 +5280,7 @@
 </dd>
 </dl>
 </div>
-<table id="device-categories-table" class="tableblock frame-all grid-all spread">
+<table id="device-categories-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 4. List of OpenCL Device Categories</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -5428,7 +5429,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="device-queries-table" class="tableblock frame-all grid-all spread">
+<table id="device-queries-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 5. OpenCL Device Queries</caption>
 <colgroup>
 <col style="width: 30%;">
@@ -5447,8 +5448,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_TYPE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_type</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The OpenCL device type.
-        Currently supported values are:
-</p><p class="tableblock">        CL_DEVICE_TYPE_CPU, CL_DEVICE_TYPE_GPU, CL_DEVICE_TYPE_ACCELERATOR,
+        Currently supported values are:</p>
+<p class="tableblock">        CL_DEVICE_TYPE_CPU, CL_DEVICE_TYPE_GPU, CL_DEVICE_TYPE_ACCELERATOR,
         CL_DEVICE_TYPE_DEFAULT, a combination of the above types or
         CL_DEVICE_TYPE_CUSTOM.</p></td>
 </tr>
@@ -5478,10 +5479,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_WORK_ITEM_SIZES</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t []</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of work-items that can be specified in each dimension
-        of the work-group to <strong>clEnqueueNDRangeKernel</strong>.
-</p><p class="tableblock">        Returns <em>n</em> size_t entries, where <em>n</em> is the value returned by the
-        query for CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS.
-</p><p class="tableblock">        The minimum value is (1, 1, 1) for devices that are not of type
+        of the work-group to <strong>clEnqueueNDRangeKernel</strong>.</p>
+<p class="tableblock">        Returns <em>n</em> size_t entries, where <em>n</em> is the value returned by the
+        query for CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS.</p>
+<p class="tableblock">        The minimum value is (1, 1, 1) for devices that are not of type
         CL_DEVICE_TYPE_CUSTOM.</p></td>
 </tr>
 <tr>
@@ -5509,10 +5510,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Preferred native vector width size for built-in scalar types that
         can be put into vectors.
         The vector width is defined as the number of scalar elements that
-        can be stored in the vector.
-</p><p class="tableblock">        If double precision is not supported,
-        CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE must return 0.
-</p><p class="tableblock">        If the <strong>cl_khr_fp16</strong> extension is not supported,
+        can be stored in the vector.</p>
+<p class="tableblock">        If double precision is not supported,
+        CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE must return 0.</p>
+<p class="tableblock">        If the <strong>cl_khr_fp16</strong> extension is not supported,
         CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF must return 0.</p></td>
 </tr>
 <tr>
@@ -5526,10 +5527,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the native ISA vector width.
         The vector width is defined as the number of scalar elements that
-        can be stored in the vector.
-</p><p class="tableblock">        If double precision is not supported,
-        CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE must return 0.
-</p><p class="tableblock">        If the <strong>cl_khr_fp16</strong> extension is not supported,
+        can be stored in the vector.</p>
+<p class="tableblock">        If double precision is not supported,
+        CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE must return 0.</p>
+<p class="tableblock">        If the <strong>cl_khr_fp16</strong> extension is not supported,
         CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF must return 0.</p></td>
 </tr>
 <tr>
@@ -5597,68 +5598,68 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE2D_MAX_WIDTH</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Max width of 2D image or 1D image not created from a buffer object
-        in pixels.
-</p><p class="tableblock">        The minimum value is 16384 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+        in pixels.</p>
+<p class="tableblock">        The minimum value is 16384 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE2D_MAX_HEIGHT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max height of 2D image in pixels.
-</p><p class="tableblock">        The minimum value is 16384 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max height of 2D image in pixels.</p>
+<p class="tableblock">        The minimum value is 16384 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE3D_MAX_WIDTH</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max width of 3D image in pixels.
-</p><p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max width of 3D image in pixels.</p>
+<p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE3D_MAX_HEIGHT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max height of 3D image in pixels.
-</p><p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max height of 3D image in pixels.</p>
+<p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE3D_MAX_DEPTH</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max depth of 3D image in pixels.
-</p><p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max depth of 3D image in pixels.</p>
+<p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of pixels for a 1D image created from a buffer object.
-</p><p class="tableblock">        The minimum value is 65536 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of pixels for a 1D image created from a buffer object.</p>
+<p class="tableblock">        The minimum value is 65536 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of images in a 1D or 2D image array.
-</p><p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of images in a 1D or 2D image array.</p>
+<p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_SAMPLERS</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of samplers that can be used in a kernel.
-</p><p class="tableblock">        The minimum value is 16 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of samplers that can be used in a kernel.</p>
+<p class="tableblock">        The minimum value is 16 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE_PITCH_ALIGNMENT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The row pitch alignment size in pixels for 2D images created from a
         buffer.
-        The value returned must be a power of 2.
-</p><p class="tableblock">        If the device does not support images, this value must be 0.</p></td>
+        The value returned must be a power of 2.</p>
+<p class="tableblock">        If the device does not support images, this value must be 0.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This query should be used when a 2D image is created from a buffer
         which was created using CL_MEM_USE_HOST_PTR.
-        The value returned must be a power of 2.
-</p><p class="tableblock">        This query specifies the minimum alignment in pixels of the host_ptr
-        specified to <strong>clCreateBuffer</strong>.
-</p><p class="tableblock">        If the device does not support images, this value must be 0.</p></td>
+        The value returned must be a power of 2.</p>
+<p class="tableblock">        This query specifies the minimum alignment in pixels of the host_ptr
+        specified to <strong>clCreateBuffer</strong>.</p>
+<p class="tableblock">        If the device does not support images, this value must be 0.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_PIPE_ARGS</p></td>
@@ -5685,8 +5686,8 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_PARAMETER_SIZE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max size in bytes of all arguments that can be passed to a kernel.
-</p><p class="tableblock">        The minimum value is 1024 for devices that are not of type
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max size in bytes of all arguments that can be passed to a kernel.</p>
+<p class="tableblock">        The minimum value is 1024 for devices that are not of type
         CL_DEVICE_TYPE_CUSTOM.
         For this minimum value, only a maximum of 128 arguments can be
         passed to a kernel</p></td>
@@ -5705,23 +5706,23 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_fp_config</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes single precision floating-point capability of the device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_FP_DENORM - denorms are supported
-</p><p class="tableblock">        CL_FP_INF_NAN - INF and quiet NaNs are supported.
-</p><p class="tableblock">        CL_FP_ROUND_TO_NEAREST-- round to nearest even rounding mode
-        supported
-</p><p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported
-</p><p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
-        rounding modes supported
-</p><p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.
-</p><p class="tableblock">        CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT - divide and sqrt are correctly
-        rounded as defined by the IEEE754 specification.
-</p><p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
-        addition, subtraction, multiplication) are implemented in software.
-</p><p class="tableblock">        For the full profile, the mandated minimum floating-point capability
+        values:</p>
+<p class="tableblock">        CL_FP_DENORM - denorms are supported</p>
+<p class="tableblock">        CL_FP_INF_NAN - INF and quiet NaNs are supported.</p>
+<p class="tableblock">        CL_FP_ROUND_TO_NEAREST-- round to nearest even rounding mode
+        supported</p>
+<p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported</p>
+<p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
+        rounding modes supported</p>
+<p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.</p>
+<p class="tableblock">        CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT - divide and sqrt are correctly
+        rounded as defined by the IEEE754 specification.</p>
+<p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
+        addition, subtraction, multiplication) are implemented in software.</p>
+<p class="tableblock">        For the full profile, the mandated minimum floating-point capability
         for devices that are not of type CL_DEVICE_TYPE_CUSTOM is:
-        CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN.
-</p><p class="tableblock">        For the embedded profile, see section 10.</p></td>
+        CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN.</p>
+<p class="tableblock">        For the embedded profile, see section 10.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_DOUBLE_FP_CONFIG<sup>7</sup></p></td>
@@ -5729,20 +5730,20 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes double precision floating-point capability of the OpenCL
         device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_FP_DENORM - denorms are supported
-</p><p class="tableblock">        CL_FP_INF_NAN - INF and NaNs are supported.
-</p><p class="tableblock">        CL_FP_ROUND_TO_NEAREST - round to nearest even rounding mode
-        supported.
-</p><p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported.
-</p><p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
-        rounding modes supported.
-</p><p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.
-</p><p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
-        addition, subtraction, multiplication) are implemented in software.
-</p><p class="tableblock">        Double precision is an optional feature so the mandated minimum
-        double precision floating-point capability is 0.
-</p><p class="tableblock">        If double precision is supported by the device, then the minimum
+        values:</p>
+<p class="tableblock">        CL_FP_DENORM - denorms are supported</p>
+<p class="tableblock">        CL_FP_INF_NAN - INF and NaNs are supported.</p>
+<p class="tableblock">        CL_FP_ROUND_TO_NEAREST - round to nearest even rounding mode
+        supported.</p>
+<p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported.</p>
+<p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
+        rounding modes supported.</p>
+<p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.</p>
+<p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
+        addition, subtraction, multiplication) are implemented in software.</p>
+<p class="tableblock">        Double precision is an optional feature so the mandated minimum
+        double precision floating-point capability is 0.</p>
+<p class="tableblock">        If double precision is supported by the device, then the minimum
         double precision floating-point capability must be:<br>
         CL_FP_FMA |<br>
         CL_FP_ROUND_TO_NEAREST |<br>
@@ -5791,8 +5792,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The maximum number of bytes of storage that may be allocated for any
         single variable in program scope or inside a function in an OpenCL
-        kernel language declared in the global address space.
-</p><p class="tableblock">        The minimum value is 64 KB.</p></td>
+        kernel language declared in the global address space.</p>
+<p class="tableblock">        The minimum value is 64 KB.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE</p></td>
@@ -5810,8 +5811,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_local_mem_type</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Type of local memory supported.
         This can be set to CL_LOCAL implying dedicated local memory storage
-        such as SRAM , or CL_GLOBAL.
-</p><p class="tableblock">        For custom devices, CL_NONE can also be returned indicating no local
+        such as SRAM , or CL_GLOBAL.</p>
+<p class="tableblock">        For custom devices, CL_NONE can also be returned indicating no local
         memory support.</p></td>
 </tr>
 <tr>
@@ -5852,28 +5853,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_COMPILER_AVAILABLE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bool</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Is CL_FALSE if the implementation does not have a compiler available
-        to compile the program source.
-</p><p class="tableblock">        Is CL_TRUE if the compiler is available.
+        to compile the program source.</p>
+<p class="tableblock">        Is CL_TRUE if the compiler is available.
         This can be CL_FALSE for the embedded platform profile only.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_LINKER_AVAILABLE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bool</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Is CL_FALSE if the implementation does not have a linker available.
-        Is CL_TRUE if the linker is available.
-</p><p class="tableblock">        This can be CL_FALSE for the embedded platform profile only.
-</p><p class="tableblock">        This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE.</p></td>
+        Is CL_TRUE if the linker is available.</p>
+<p class="tableblock">        This can be CL_FALSE for the embedded platform profile only.</p>
+<p class="tableblock">        This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_EXECUTION_CAPABILITIES</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_exec_ capabilities</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes the execution capabilities of the device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_EXEC_KERNEL - The OpenCL device can execute OpenCL kernels.
-</p><p class="tableblock">        CL_EXEC_NATIVE_KERNEL - The OpenCL device can execute native
-        kernels.
-</p><p class="tableblock">        The mandated minimum capability is: CL_EXEC_KERNEL.</p></td>
+        values:</p>
+<p class="tableblock">        CL_EXEC_KERNEL - The OpenCL device can execute OpenCL kernels.</p>
+<p class="tableblock">        CL_EXEC_NATIVE_KERNEL - The OpenCL device can execute native
+        kernels.</p>
+<p class="tableblock">        The mandated minimum capability is: CL_EXEC_KERNEL.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_QUEUE_ON_HOST_PROPERTIES<sup>8</sup></p></td>
@@ -5881,11 +5882,11 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes the on host command-queue properties supported by the
         device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<br>
-        CL_QUEUE_PROFILING_ENABLE
-</p><p class="tableblock">        These properties are described in the <a href="#queue-properties-table">Queue Properties</a> table.
-</p><p class="tableblock">        The mandated minimum capability is: CL_QUEUE_PROFILING_ENABLE.</p></td>
+        values:</p>
+<p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<br>
+        CL_QUEUE_PROFILING_ENABLE</p>
+<p class="tableblock">        These properties are described in the <a href="#queue-properties-table">Queue Properties</a> table.</p>
+<p class="tableblock">        The mandated minimum capability is: CL_QUEUE_PROFILING_ENABLE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES</p></td>
@@ -5893,11 +5894,11 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes the on device command-queue properties supported by the
         device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<br>
-        CL_QUEUE_PROFILING_ENABLE
-</p><p class="tableblock">        These properties are described in the <a href="#queue-properties-table">Queue Properties</a> table.
-</p><p class="tableblock">        The mandated minimum capability is:
+        values:</p>
+<p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<br>
+        CL_QUEUE_PROFILING_ENABLE</p>
+<p class="tableblock">        These properties are described in the <a href="#queue-properties-table">Queue Properties</a> table.</p>
+<p class="tableblock">        The mandated minimum capability is:
         CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE | CL_QUEUE_PROFILING_ENABLE.</p></td>
 </tr>
 <tr>
@@ -5906,8 +5907,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">The size of the device queue in bytes preferred by the
         implementation.
         Applications should use this size for the device queue to ensure
-        good performance.
-</p><p class="tableblock">        The minimum value is 16 KB</p></td>
+        good performance.</p>
+<p class="tableblock">        The minimum value is 16 KB</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE</p></td>
@@ -5920,8 +5921,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_ON_DEVICE_QUEUES</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The maximum number of device queues that can be created for this
-        device in a single context.
-</p><p class="tableblock">        The minimum value is 1.</p></td>
+        device in a single context.</p>
+<p class="tableblock">        The minimum value is 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_MAX_ON_DEVICE_EVENTS</p></td>
@@ -5929,8 +5930,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">The maximum number of events in use by a device queue.
         These refer to events returned by the <code>enqueue_</code> built-in functions
         to a device queue or user events returned by the <code>create_user_event</code>
-        built-in function that have not been released.
-</p><p class="tableblock">        The minimum value is 1024.</p></td>
+        built-in function that have not been released.</p>
+<p class="tableblock">        The minimum value is 1024.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_BUILT_IN_KERNELS</p></td>
@@ -5966,11 +5967,11 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">OpenCL profile string.
         Returns the profile name supported by the device.
-        The profile name returned can be one of the following strings:
-</p><p class="tableblock">        FULL_PROFILE - if the device supports the OpenCL specification
+        The profile name returned can be one of the following strings:</p>
+<p class="tableblock">        FULL_PROFILE - if the device supports the OpenCL specification
         (functionality defined as part of the core specification and does
-        not require any extensions to be supported).
-</p><p class="tableblock">        EMBEDDED_PROFILE - if the device supports the OpenCL embedded
+        not require any extensions to be supported).</p>
+<p class="tableblock">        EMBEDDED_PROFILE - if the device supports the OpenCL embedded
         profile.</p></td>
 </tr>
 <tr>
@@ -5978,10 +5979,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">OpenCL version string.
         Returns the OpenCL version supported by the device. This version
-        string has the following format:
-</p><p class="tableblock">        <em>OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
-        information&gt;</em>
-</p><p class="tableblock">        The major_version.minor_version value returned will be 2.2.</p></td>
+        string has the following format:</p>
+<p class="tableblock">        <em>OpenCL&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
+        information&gt;</em></p>
+<p class="tableblock">        The major_version.minor_version value returned will be 2.2.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_OPENCL_C_VERSION</p></td>
@@ -5989,16 +5990,16 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">OpenCL C version string.
         Returns the highest OpenCL C version supported by the compiler for
         this device that is not of type CL_DEVICE_TYPE_CUSTOM.
-        This version string has the following format:
-</p><p class="tableblock">        <em>OpenCL&lt;space&gt;C&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
-        information&gt;</em>
-</p><p class="tableblock">        The major_version.minor_version value returned must be 2.0 if
-        CL_DEVICE_VERSION is OpenCL 2.0.
-</p><p class="tableblock">        The major_version.minor_version value returned must be 1.2 if
-        CL_DEVICE_VERSION is OpenCL 1.2.
-</p><p class="tableblock">        The major_version.minor_version value returned must be 1.1 if
-        CL_DEVICE_VERSION is OpenCL 1.1.
-</p><p class="tableblock">        The major_version.minor_version value returned can be 1.0 or 1.1 if
+        This version string has the following format:</p>
+<p class="tableblock">        <em>OpenCL&lt;space&gt;C&lt;space&gt;&lt;major_version.minor_version&gt;&lt;space&gt;&lt;vendor-specific
+        information&gt;</em></p>
+<p class="tableblock">        The major_version.minor_version value returned must be 2.0 if
+        CL_DEVICE_VERSION is OpenCL 2.0.</p>
+<p class="tableblock">        The major_version.minor_version value returned must be 1.2 if
+        CL_DEVICE_VERSION is OpenCL 1.2.</p>
+<p class="tableblock">        The major_version.minor_version value returned must be 1.1 if
+        CL_DEVICE_VERSION is OpenCL 1.1.</p>
+<p class="tableblock">        The major_version.minor_version value returned can be 1.0 or 1.1 if
         CL_DEVICE_VERSION is OpenCL 1.0.</p></td>
 </tr>
 <tr>
@@ -6008,8 +6009,8 @@
         names themselves do not contain any spaces) supported by the device.
         The list of extension names returned can be vendor supported
         extension names and one or more of the following Khronos approved
-        extension names:
-</p><p class="tableblock">        <strong>cl_khr_int64_base_atomics</strong><br>
+        extension names:</p>
+<p class="tableblock">        <strong>cl_khr_int64_base_atomics</strong><br>
         <strong>cl_khr_int64_extended_atomics</strong><br>
         <strong>cl_khr_fp16</strong><br>
         <strong>cl_khr_gl_sharing</strong><br>
@@ -6022,16 +6023,16 @@
         <strong>cl_khr_initialize_memory</strong><br>
         <strong>cl_khr_terminate_context</strong><br>
         <strong>cl_khr_spir</strong><br>
-        <strong>cl_khr_srgb_image_writes</strong>
-</p><p class="tableblock">        The following approved Khronos extension names must be returned by
-        all devices that support OpenCL C 2.0:
-</p><p class="tableblock">        <strong>cl_khr_byte_addressable_store</strong><br>
+        <strong>cl_khr_srgb_image_writes</strong></p>
+<p class="tableblock">        The following approved Khronos extension names must be returned by
+        all devices that support OpenCL C 2.0:</p>
+<p class="tableblock">        <strong>cl_khr_byte_addressable_store</strong><br>
         <strong>cl_khr_fp64</strong> (for backward compatibility if double precision is
         supported)<br>
         <strong>cl_khr_3d_image_writes</strong><br>
         <strong>cl_khr_image2d_from_buffer</strong><br>
-        <strong>cl_khr_depth_images</strong>
-</p><p class="tableblock">        Please refer to the OpenCL 2.0 Extension Specification for a
+        <strong>cl_khr_depth_images</strong></p>
+<p class="tableblock">        Please refer to the OpenCL 2.0 Extension Specification for a
         detailed description of these extensions.</p></td>
 </tr>
 <tr>
@@ -6062,19 +6063,19 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_PARTITION_MAX_SUB_DEVICES</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the maximum number of sub-devices that can be created when a
-        device is partitioned.
-</p><p class="tableblock">        The value returned cannot exceed CL_DEVICE_MAX_COMPUTE_UNITS.</p></td>
+        device is partitioned.</p>
+<p class="tableblock">        The value returned cannot exceed CL_DEVICE_MAX_COMPUTE_UNITS.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_DEVICE_PARTITION_PROPERTIES</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_partition_ property[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the list of partition types supported by <em>device</em>.
         This is an array of cl_device_partition_property values drawn from
-        the following list:
-</p><p class="tableblock">        CL_DEVICE_PARTITION_EQUALLY<br>
+        the following list:</p>
+<p class="tableblock">        CL_DEVICE_PARTITION_EQUALLY<br>
         CL_DEVICE_PARTITION_BY_COUNTS<br>
-        CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN
-</p><p class="tableblock">        If the device cannot be partitioned (i.e. there is no partitioning
+        CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN</p>
+<p class="tableblock">        If the device cannot be partitioned (i.e. there is no partitioning
         scheme supported by the device that will return at least two
         subdevices), a value of 0 will be returned.</p></td>
 </tr>
@@ -6084,14 +6085,14 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the list of supported affinity domains for partitioning the
         device using CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA<br>
+        values:</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA<br>
         CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE<br>
         CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE<br>
         CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE<br>
         CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE<br>
-        CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE
-</p><p class="tableblock">        If the device does not support any affinity domains, a value of 0
+        CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE</p>
+<p class="tableblock">        If the device does not support any affinity domains, a value of 0
         will be returned.</p></td>
 </tr>
 <tr>
@@ -6103,13 +6104,13 @@
         CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN,
         CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE, the affinity domain
         used to perform the partition will be returned.
-        This can be one of the following values:
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA<br>
+        This can be one of the following values:</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA<br>
         CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE<br>
         CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE<br>
         CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE<br>
-        CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE
-</p><p class="tableblock">        Otherwise the implementation may either return a
+        CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE</p>
+<p class="tableblock">        Otherwise the implementation may either return a
         <em>param_value_size_ret</em> of 0 i.e. there is no partition type
         associated with device or can return a property value of 0 (where 0
         is used to terminate the partition property list) in the memory that
@@ -6130,23 +6131,23 @@
         Coarse-grain SVM allocations are required to be supported by all
         OpenCL 2.0 devices.
         This is a bit-field that describes a combination of the following
-        values:
-</p><p class="tableblock">        CL_DEVICE_SVM_COARSE_GRAIN_BUFFER - Support for coarse-grain buffer
+        values:</p>
+<p class="tableblock">        CL_DEVICE_SVM_COARSE_GRAIN_BUFFER - Support for coarse-grain buffer
         sharing using <strong>clSVMAlloc</strong>.
         Memory consistency is guaranteed at synchronization points and the
         host must use calls to <strong>clEnqueueMapBuffer</strong> and
-        <strong>clEnqueueUnmapMemObject</strong>.
-</p><p class="tableblock">        CL_DEVICE_SVM_FINE_GRAIN_BUFFER - Support for fine-grain buffer
+        <strong>clEnqueueUnmapMemObject</strong>.</p>
+<p class="tableblock">        CL_DEVICE_SVM_FINE_GRAIN_BUFFER - Support for fine-grain buffer
         sharing using <strong>clSVMAlloc</strong>.
         Memory consistency is guaranteed at synchronization points without
-        need for <strong>clEnqueueMapBuffer</strong> and <strong>clEnqueueUnmapMemObject</strong>.
-</p><p class="tableblock">        CL_DEVICE_SVM_FINE_GRAIN_SYSTEM - Support for sharing the host&#8217;s
+        need for <strong>clEnqueueMapBuffer</strong> and <strong>clEnqueueUnmapMemObject</strong>.</p>
+<p class="tableblock">        CL_DEVICE_SVM_FINE_GRAIN_SYSTEM - Support for sharing the host&#8217;s
         entire virtual memory including memory allocated using <strong>malloc</strong>.
-        Memory consistency is guaranteed at synchronization points.
-</p><p class="tableblock">        CL_DEVICE_SVM_ATOMICS - Support for the OpenCL 2.0 atomic
+        Memory consistency is guaranteed at synchronization points.</p>
+<p class="tableblock">        CL_DEVICE_SVM_ATOMICS - Support for the OpenCL 2.0 atomic
         operations that provide memory consistency across the host and all
-        OpenCL devices supporting fine-grain SVM allocations.
-</p><p class="tableblock">        The mandated minimum capability is
+        OpenCL devices supporting fine-grain SVM allocations.</p>
+<p class="tableblock">        The mandated minimum capability is
         CL_DEVICE_SVM_COARSE_GRAIN_BUFFER.</p></td>
 </tr>
 <tr>
@@ -6453,7 +6454,7 @@
 Only one of the listed partitioning schemes can be specified in
 <em>properties</em>.</p>
 </div>
-<table id="subdevice-partition-table" class="tableblock frame-all grid-all spread">
+<table id="subdevice-partition-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 6. <em>List of supported partition schemes by</em> <strong>clCreateSubDevices</strong></caption>
 <colgroup>
 <col style="width: 30%;">
@@ -6486,10 +6487,10 @@
         unit counts.
         For each non-zero count <em>m</em> in the list, a sub-device is created
         with <em>m</em> compute units in it.
-        CL_DEVICE_PARTITION_BY_COUNTS_LIST_END is defined to be 0.
-</p><p class="tableblock">        The number of non-zero count entries in the list may not exceed
-        CL_DEVICE_PARTITION_MAX_SUB_DEVICES.
-</p><p class="tableblock">        The total number of compute units specified may not exceed
+        CL_DEVICE_PARTITION_BY_COUNTS_LIST_END is defined to be 0.</p>
+<p class="tableblock">        The number of non-zero count entries in the list may not exceed
+        CL_DEVICE_PARTITION_MAX_SUB_DEVICES.</p>
+<p class="tableblock">        The total number of compute units specified may not exceed
         CL_DEVICE_PARTITION_MAX_COMPUTE_UNITS.</p></td>
 </tr>
 <tr>
@@ -6498,28 +6499,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Split the device into smaller aggregate devices containing one or
         more compute units that all share part of a cache hierarchy.
         The value accompanying this property may be drawn from the following
-        list:
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA - Split the device into sub-devices
-        comprised of compute units that share a NUMA node.
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE - Split the device into
+        list:</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NUMA - Split the device into sub-devices
+        comprised of compute units that share a NUMA node.</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE - Split the device into
         sub-devices comprised of compute units that share a level 4 data
-        cache.
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE - Split the device into
+        cache.</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE - Split the device into
         sub-devices comprised of compute units that share a level 3 data
-        cache.
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE - Split the device into
+        cache.</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE - Split the device into
         sub-devices comprised of compute units that share a level 2 data
-        cache.
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE - Split the device into
+        cache.</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE - Split the device into
         sub-devices comprised of compute units that share a level 1 data
-        cache.
-</p><p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE - Split the device
+        cache.</p>
+<p class="tableblock">        CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE - Split the device
         along the next partitionable affinity domain.
         The implementation shall find the first level along which the device
         or sub-device may be further subdivided in the order NUMA, L4, L3,
         L2, L1, and partition the device into sub-devices comprised of
-        compute units that share memory subsystems at this level.
-</p><p class="tableblock">        The user may determine what happened by calling
+        compute units that share memory subsystems at this level.</p>
+<p class="tableblock">        The user may determine what happened by calling
         <strong>clGetDeviceInfo</strong>(CL_DEVICE_PARTITION_TYPE) on the sub-devices.</p></td>
 </tr>
 </tbody>
@@ -6731,7 +6732,7 @@
 <em>properties</em> can be <code>NULL</code> in which case the platform that is selected is
 implementation-defined.</p>
 </div>
-<table id="context-properties-table" class="tableblock frame-all grid-all spread">
+<table id="context-properties-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 7. <em>List of supported properties by</em> <strong>clCreateContext</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -6758,8 +6759,8 @@
         between OpenCL and other APIs.
         Please refer to the specific sections in the OpenCL 2.0 extension
         specification that describe sharing with other APIs for restrictions
-        on using this flag.
-</p><p class="tableblock">        If CL_CONTEXT_INTEROP_USER_SYNC is not specified, a default of
+        on using this flag.</p>
+<p class="tableblock">        If CL_CONTEXT_INTEROP_USER_SYNC is not specified, a default of
         CL_FALSE is assumed.</p></td>
 </tr>
 </tbody>
@@ -7095,7 +7096,7 @@
 <em>param_value</em> by <strong>clGetContextInfo</strong> is described in the
 <a href="#context-info-table">Context Attributes</a> table.</p>
 </div>
-<table id="context-info-table" class="tableblock frame-all grid-all spread">
+<table id="context-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 8. List of supported param_names by <strong>clGetContextInfo</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -7129,12 +7130,12 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_CONTEXT_PROPERTIES</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_context_properties[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the properties argument specified in <strong>clCreateContext</strong> or
-        <strong>clCreateContextFromType</strong>.
-</p><p class="tableblock">        If the <em>properties</em> argument specified in <strong>clCreateContext</strong> or
+        <strong>clCreateContextFromType</strong>.</p>
+<p class="tableblock">        If the <em>properties</em> argument specified in <strong>clCreateContext</strong> or
         <strong>clCreateContextFromType</strong> used to create <em>context</em> is not <code>NULL</code>, the
         implementation must return the values specified in the properties
-        argument.
-</p><p class="tableblock">        If the <em>properties</em> argument specified in <strong>clCreateContext</strong> or
+        argument.</p>
+<p class="tableblock">        If the <em>properties</em> argument specified in <strong>clCreateContext</strong> or
         <strong>clCreateContextFromType</strong> used to create <em>context</em> is <code>NULL</code>, the
         implementation may return either a <em>param_value_size_ret</em> of 0
         i.e. there is no context property value to be returned or can return
@@ -7245,7 +7246,7 @@
 <em>properties</em> can be <code>NULL</code> in which case the default values for supported
 command-queue properties will be used.</p>
 </div>
-<table id="queue-properties-table" class="tableblock frame-all grid-all spread">
+<table id="queue-properties-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 9. List of supported cl_queue_properties values and description</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -7264,35 +7265,35 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_QUEUE_PROPERTIES</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bitfield</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This is a bitfield and can be set to a combination of the following
-        values:
-</p><p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE - Determines whether the
+        values:</p>
+<p class="tableblock">        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE - Determines whether the
         commands queued in the command-queue are executed in-order or
         out-of-order.
         If set, the commands in the command-queue are executed out-of-order.
-        Otherwise, commands are executed in-order.
-</p><p class="tableblock">        CL_QUEUE_PROFILING_ENABLE - Enable or disable profiling of commands
+        Otherwise, commands are executed in-order.</p>
+<p class="tableblock">        CL_QUEUE_PROFILING_ENABLE - Enable or disable profiling of commands
         in the command-queue.
         If set, the profiling of commands is enabled.
-        Otherwise profiling of commands is disabled.
-</p><p class="tableblock">        CL_QUEUE_ON_DEVICE - Indicates that this is a device queue.
+        Otherwise profiling of commands is disabled.</p>
+<p class="tableblock">        CL_QUEUE_ON_DEVICE - Indicates that this is a device queue.
         If CL_QUEUE_ON_DEVICE is set,
-        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<sup>1</sup> must also be set.
-</p><p class="tableblock">        CL_QUEUE_ON_DEVICE_DEFAULT<sup>2</sup> --indicates that this is the default
+        CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<sup>1</sup> must also be set.</p>
+<p class="tableblock">        CL_QUEUE_ON_DEVICE_DEFAULT<sup>2</sup> --indicates that this is the default
         device queue.
-        This can only be used with CL_QUEUE_ON_DEVICE.
-</p><p class="tableblock">        If CL_QUEUE_PROPERTIES is not specified an in-order host command
+        This can only be used with CL_QUEUE_ON_DEVICE.</p>
+<p class="tableblock">        If CL_QUEUE_PROPERTIES is not specified an in-order host command
         queue is created for the specified device</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_QUEUE_SIZE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the size of the device queue in bytes.
-</p><p class="tableblock">        This can only be specified if CL_QUEUE_ON_DEVICE is set in
+<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the size of the device queue in bytes.</p>
+<p class="tableblock">        This can only be specified if CL_QUEUE_ON_DEVICE is set in
         CL_QUEUE_PROPERTIES.
-        This must be a value ≤ CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE.
-</p><p class="tableblock">        For best performance, this should be ≤
-        CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE.
-</p><p class="tableblock">        If CL_QUEUE_SIZE is not specified, the device queue is created with
+        This must be a value ≤ CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE.</p>
+<p class="tableblock">        For best performance, this should be ≤
+        CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE.</p>
+<p class="tableblock">        If CL_QUEUE_SIZE is not specified, the device queue is created with
         CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE as the size of the queue.</p></td>
 </tr>
 </tbody>
@@ -7523,7 +7524,7 @@
 <em>param_value</em> by <strong>clGetCommandQueueInfo</strong> is described in the
 <a href="#command-queue-param-table">Command Queue Parameter</a> table.</p>
 </div>
-<table id="command-queue-param-table" class="tableblock frame-all grid-all spread">
+<table id="command-queue-param-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 10. List of supported param_names by <strong>clGetCommandQueueInfo</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -7667,7 +7668,7 @@
 If value specified for <em>flags</em> is 0, the default is used which is
 CL_MEM_READ_WRITE.</p>
 </div>
-<table id="memory-flags-table" class="tableblock frame-all grid-all spread">
+<table id="memory-flags-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 11. List of supported cl_mem_flags values</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7689,18 +7690,18 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_WRITE_ONLY</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the memory object will be
-    written but not read by a kernel.
-</p><p class="tableblock">    Reading from a buffer or image object created with CL_MEM_WRITE_ONLY
-    inside a kernel is undefined.
-</p><p class="tableblock">    CL_MEM_READ_WRITE and CL_MEM_WRITE_ONLY are mutually exclusive.</p></td>
+    written but not read by a kernel.</p>
+<p class="tableblock">    Reading from a buffer or image object created with CL_MEM_WRITE_ONLY
+    inside a kernel is undefined.</p>
+<p class="tableblock">    CL_MEM_READ_WRITE and CL_MEM_WRITE_ONLY are mutually exclusive.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_READ_ONLY</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the memory object is a
-    readonly memory object when used inside a kernel.
-</p><p class="tableblock">    Writing to a buffer or image object created with CL_MEM_READ_ONLY inside
-    a kernel is undefined.
-</p><p class="tableblock">    CL_MEM_READ_WRITE or CL_MEM_WRITE_ONLY and CL_MEM_READ_ONLY are mutually
+    readonly memory object when used inside a kernel.</p>
+<p class="tableblock">    Writing to a buffer or image object created with CL_MEM_READ_ONLY inside
+    a kernel is undefined.</p>
+<p class="tableblock">    CL_MEM_READ_WRITE or CL_MEM_WRITE_ONLY and CL_MEM_READ_ONLY are mutually
     exclusive.</p></td>
 </tr>
 <tr>
@@ -7708,21 +7709,21 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag is valid only if host_ptr is not <code>NULL</code>.
     If specified, it indicates that the application wants the OpenCL
     implementation to use memory referenced by host_ptr as the storage bits
-    for the memory object.
-</p><p class="tableblock">    The contents of the memory pointed to by host_ptr at the time of the
-    clCreateBuffer call define the initial contents of the buffer object.
-</p><p class="tableblock">    OpenCL implementations are allowed to cache the buffer contents pointed
+    for the memory object.</p>
+<p class="tableblock">    The contents of the memory pointed to by host_ptr at the time of the
+    clCreateBuffer call define the initial contents of the buffer object.</p>
+<p class="tableblock">    OpenCL implementations are allowed to cache the buffer contents pointed
     to by host_ptr in device memory.
-    This cached copy can be used when kernels are executed on a device.
-</p><p class="tableblock">    The result of OpenCL commands that operate on multiple buffer objects
+    This cached copy can be used when kernels are executed on a device.</p>
+<p class="tableblock">    The result of OpenCL commands that operate on multiple buffer objects
     created with the same host_ptr or from overlapping host or SVM regions
     is considered to be undefined.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_ALLOC_HOST_PTR</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the application wants the OpenCL implementation
-    to allocate memory from host accessible memory.
-</p><p class="tableblock">    CL_MEM_ALLOC_HOST_PTR and CL_MEM_USE_HOST_PTR are mutually exclusive.</p></td>
+    to allocate memory from host accessible memory.</p>
+<p class="tableblock">    CL_MEM_ALLOC_HOST_PTR and CL_MEM_USE_HOST_PTR are mutually exclusive.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_COPY_HOST_PTR</strong></p></td>
@@ -7732,11 +7733,11 @@
     data from memory referenced by host_ptr.
     The implementation will copy the memory immediately and host_ptr is
     available for reuse by the application when the <strong>clCreateBuffer</strong> or
-    <strong>clCreateImage</strong> operation returns.
-</p><p class="tableblock">    CL_MEM_COPY_HOST_PTR and CL_MEM_USE_HOST_PTR are mutually exclusive.
-</p><p class="tableblock">    CL_MEM_COPY_HOST_PTR can be used with CL_MEM_ALLOC_HOST_PTR to
+    <strong>clCreateImage</strong> operation returns.</p>
+<p class="tableblock">    CL_MEM_COPY_HOST_PTR and CL_MEM_USE_HOST_PTR are mutually exclusive.</p>
+<p class="tableblock">    CL_MEM_COPY_HOST_PTR can be used with CL_MEM_ALLOC_HOST_PTR to
     initialize the contents of the cl_mem object allocated using
-    hostaccessible (e.g. PCIe) memory.</p></td>
+    host-accessible (e.g. PCIe) memory.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_HOST_WRITE_ONLY</strong></p></td>
@@ -7750,14 +7751,14 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_HOST_READ_ONLY</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the host will only read
     the memory object (using OpenCL APIs that enqueue a read or a map for
-    read).
-</p><p class="tableblock">    CL_MEM_HOST_WRITE_ONLY and CL_MEM_HOST_READ_ONLY are mutually exclusive.</p></td>
+    read).</p>
+<p class="tableblock">    CL_MEM_HOST_WRITE_ONLY and CL_MEM_HOST_READ_ONLY are mutually exclusive.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_HOST_NO_ACCESS</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the host will not read or
-    write the memory object.
-</p><p class="tableblock">    CL_MEM_HOST_WRITE_ONLY or CL_MEM_HOST_READ_ONLY and
+    write the memory object.</p>
+<p class="tableblock">    CL_MEM_HOST_WRITE_ONLY or CL_MEM_HOST_READ_ONLY and
     CL_MEM_HOST_NO_ACCESS are mutually exclusive.</p></td>
 </tr>
 </tbody>
@@ -7873,7 +7874,7 @@
 described in the <a href="#memory-flags-table">Memory Flags</a> table.
 If the CL_MEM_READ_WRITE, CL_MEM_READ_ONLY or CL_MEM_WRITE_ONLY values are
 not specified in <em>flags</em>, they are inherited from the corresponding memory
-access qualifers associated with <em>buffer</em>.
+access qualifiers associated with <em>buffer</em>.
 The CL_MEM_USE_HOST_PTR, CL_MEM_ALLOC_HOST_PTR and CL_MEM_COPY_HOST_PTR
 values cannot be specified in <em>flags</em> but are inherited from the
 corresponding memory access qualifiers associated with <em>buffer</em>.
@@ -7892,7 +7893,7 @@
 descriptor that <em>buffer_create_info</em> points to is described in the
 <a href="#subbuffer-create-info-table">SubBuffer Attributes</a> table.</p>
 </div>
-<table id="subbuffer-create-info-table" class="tableblock frame-all grid-all spread">
+<table id="subbuffer-create-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 12. List of supported names and values in <strong>clCreateSubBuffer</strong></caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7907,7 +7908,7 @@
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_BUFFER_CREATE_TYPE_REGION</strong></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>Create a buffer object that represents a
     specific region in buffer.</p>
 </div>
@@ -9045,7 +9046,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span> clEnqueueMapBuffer(cl_command_queue command_queue,
+<pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span>* clEnqueueMapBuffer(cl_command_queue command_queue,
                         cl_mem buffer,
                         cl_bool blocking_map,
                         cl_map_flags map_flags,
@@ -9228,7 +9229,7 @@
 This is described in <a href="#unmapping-mapped-memory">Unmapping Mapped Memory
 Objects</a>.</p>
 </div>
-<table id="memory-map-flags-table" class="tableblock frame-all grid-all spread">
+<table id="memory-map-flags-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 13. List of supported cl_map_flags values</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9244,31 +9245,31 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MAP_READ</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the region being mapped in the memory object is
-    being mapped for reading.
-</p><p class="tableblock">    The pointer returned by <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) is
+    being mapped for reading.</p>
+<p class="tableblock">    The pointer returned by <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) is
     guaranteed to contain the latest bits in the region being mapped when
     the <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) command has completed.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MAP_WRITE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the region being mapped in the memory object is
-    being mapped for writing.
-</p><p class="tableblock">    The pointer returned by <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) is
+    being mapped for writing.</p>
+<p class="tableblock">    The pointer returned by <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) is
     guaranteed to contain the latest bits in the region being mapped when
     the <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) command has completed</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MAP_WRITE_INVALIDATE_REGION</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the region being mapped in the memory object is
-    being mapped for writing.
-</p><p class="tableblock">    The contents of the region being mapped are to be discarded.
+    being mapped for writing.</p>
+<p class="tableblock">    The contents of the region being mapped are to be discarded.
     This is typically the case when the region being mapped is overwritten
     by the host.
     This flag allows the implementation to no longer guarantee that the
     pointer returned by <strong>clEnqueueMapBuffer</strong> (<strong>clEnqueueMapImage</strong>) contains
     the latest bits in the region being mapped which can be a significant
-    performance enhancement.
-</p><p class="tableblock">    CL_MAP_READ or CL_MAP_WRITE and CL_MAP_WRITE_INVALIDATE_REGION are
+    performance enhancement.</p>
+<p class="tableblock">    CL_MAP_READ or CL_MAP_WRITE and CL_MAP_WRITE_INVALIDATE_REGION are
     mutually exclusive.</p></td>
 </tr>
 </tbody>
@@ -9317,7 +9318,7 @@
 <p>For CL_MEM_OBJECT_IMAGE1D_BUFFER image type, or an image created from
 another memory object (image or buffer), if the CL_MEM_READ_WRITE,
 CL_MEM_READ_ONLY or CL_MEM_WRITE_ONLY values are not specified in <em>flags</em>,
-they are inherited from the corresponding memory access qualifers associated
+they are inherited from the corresponding memory access qualifiers associated
 with <em>mem_object</em>.
 The CL_MEM_USE_HOST_PTR, CL_MEM_ALLOC_HOST_PTR and CL_MEM_COPY_HOST_PTR
 values cannot be specified in <em>flags</em> but are inherited from the
@@ -9354,7 +9355,7 @@
 Refer to table below for a description of how large the buffer that
 <em>host_ptr</em> points to must be.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -9531,7 +9532,7 @@
 The number of bits per element determined by the <code>image_channel_data_type</code>
 and <code>image_channel_order</code> must be a power of two.</p>
 </div>
-<table id="image-channel-order-table" class="tableblock frame-all grid-all spread">
+<table id="image-channel-order-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 14. List of supported Image Channel Order Values</caption>
 <colgroup>
 <col style="width: 100%;">
@@ -9571,7 +9572,7 @@
 </tr>
 </tbody>
 </table>
-<table id="image-channel-data-types-table" class="tableblock frame-all grid-all spread">
+<table id="image-channel-data-types-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 15. List of supported Image Channel Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9945,7 +9946,7 @@
 The channel order values<sup>8</sup> supported are:</p>
 <div class="openblock">
 <div class="content">
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -10164,7 +10165,7 @@
 is described in the <a href="#min-supported-cross-kernel-table">Supported Formats -
 Kernel Read Or Write</a> table.</p>
 </div>
-<table id="min-supported-cross-kernel-table" class="tableblock frame-all grid-all spread">
+<table id="min-supported-cross-kernel-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 16. Min. list of supported image formats kernel read or write</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -10268,7 +10269,7 @@
 <a href="#min-supported-same-kernel-table">Supported Formats - Kernel Read And
 Write</a> table.</p>
 </div>
-<table id="min-supported-same-kernel-table" class="tableblock frame-all grid-all spread">
+<table id="min-supported-same-kernel-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 17. Min. list of supported image formats kernel read and write</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -10327,7 +10328,7 @@
 image and a <code>write_only</code> image parameter, or to a <code>read_write</code> image
 parameter and any other image parameter.</p>
 </div>
-<table id="image-format-mapping-table" class="tableblock frame-all grid-all spread">
+<table id="image-format-mapping-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 18. Mapping from format flags passed to <strong>clGetSupportedImageFormats</strong> to OpenCL kernel language image access qualifiers</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11345,7 +11346,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span> clEnqueueMapImage(cl_command_queue command_queue,
+<pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span>* clEnqueueMapImage(cl_command_queue command_queue,
                        cl_mem image,
                        cl_bool blocking_map,
                        cl_map_flags map_flags,
@@ -11658,7 +11659,7 @@
 </li>
 </ul>
 </div>
-<table id="image-info-table" class="tableblock frame-all grid-all spread">
+<table id="image-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 19. List of supported param_names by <strong>clGetImageInfo</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -11928,7 +11929,7 @@
 </li>
 </ul>
 </div>
-<table id="pipe-info-table" class="tableblock frame-all grid-all spread">
+<table id="pipe-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 20. List of supported param_names by <strong>clGetPipeInfo</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -12435,7 +12436,7 @@
 The <a href="#migration-flags-table">Memory Migration Flags</a> describes the possible
 values for flags.</p>
 </div>
-<table id="migration-flags-table" class="tableblock frame-all grid-all spread">
+<table id="migration-flags-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 21. Supported values for cl_mem_migration_flags</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12605,7 +12606,7 @@
 </li>
 </ul>
 </div>
-<table id="mem-info-table" class="tableblock frame-all grid-all spread">
+<table id="mem-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 22. List of supported param_names by <strong>clGetMemObjectInfo</strong></caption>
 <colgroup>
 <col style="width: 34%;">
@@ -12623,12 +12624,12 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_TYPE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_mem_object_type</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns one of the following values:
-</p><p class="tableblock">        CL_MEM_OBJECT_BUFFER if <em>memobj</em> is created with <strong>clCreateBuffer</strong> or
-        <strong>clCreateSubBuffer</strong>.
-</p><p class="tableblock">        cl_image_desc.image_type argument value if <em>memobj</em> is created with
-        <strong>clCreateImage</strong>.
-</p><p class="tableblock">        CL_MEM_OBJECT_PIPE if <em>memobj</em> is created with <strong>clCreatePipe</strong>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns one of the following values:</p>
+<p class="tableblock">        CL_MEM_OBJECT_BUFFER if <em>memobj</em> is created with <strong>clCreateBuffer</strong> or
+        <strong>clCreateSubBuffer</strong>.</p>
+<p class="tableblock">        cl_image_desc.image_type argument value if <em>memobj</em> is created with
+        <strong>clCreateImage</strong>.</p>
+<p class="tableblock">        CL_MEM_OBJECT_PIPE if <em>memobj</em> is created with <strong>clCreatePipe</strong>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_FLAGS</strong></p></td>
@@ -12637,8 +12638,8 @@
         with <strong>clCreateBuffer</strong>,<br>
         <strong>clCreateSubBuffer</strong>,<br>
         <strong>clCreateImage</strong> or<br>
-        <strong>clCreatePipe</strong>.
-</p><p class="tableblock">        If <em>memobj</em> is a sub-buffer the memory access qualifiers inherited
+        <strong>clCreatePipe</strong>.</p>
+<p class="tableblock">        If <em>memobj</em> is a sub-buffer the memory access qualifiers inherited
         from parent buffer is also returned.</p></td>
 </tr>
 <tr>
@@ -12653,8 +12654,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">If <em>memobj</em> is created with <strong>clCreateBuffer</strong> or <strong>clCreateImage</strong> and
         CL_MEM_USE_HOST_PTR is specified in mem_flags, return the host_ptr
         argument value specified when <em>memobj</em> is created.
-        Otherwise a <code>NULL</code> value is returned.
-</p><p class="tableblock">        If <em>memobj</em> is created with <strong>clCreateSubBuffer</strong>, return the host_ptr
+        Otherwise a <code>NULL</code> value is returned.</p>
+<p class="tableblock">        If <em>memobj</em> is created with <strong>clCreateSubBuffer</strong>, return the host_ptr
         +  origin value specified when <em>memobj</em> is created.
         host_ptr is the argument value specified to <strong>clCreateBuffer</strong> and
         CL_MEM_USE_HOST_PTR is specified in mem_flags for memory object from
@@ -12685,17 +12686,17 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return memory object from which <em>memobj</em> is created.
         This returns the memory object specified as buffer argument to
         <strong>clCreateSubBuffer</strong> if <em>memobj</em> is a subbuffer object created using
-        <strong>clCreateSubBuffer</strong>.
-</p><p class="tableblock">        This returns the mem_object specified in cl_image_desc if <em>memobj</em>
-        is an image object.
-</p><p class="tableblock">        Otherwise a <code>NULL</code> value is returned.</p></td>
+        <strong>clCreateSubBuffer</strong>.</p>
+<p class="tableblock">        This returns the mem_object specified in cl_image_desc if <em>memobj</em>
+        is an image object.</p>
+<p class="tableblock">        Otherwise a <code>NULL</code> value is returned.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_OFFSET</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return offset if <em>memobj</em> is a sub-buffer object created using
-        <strong>clCreateSubBuffer</strong>.
-</p><p class="tableblock">        This return 0 if <em>memobj</em> is not a subbuffer object.</p></td>
+        <strong>clCreateSubBuffer</strong>.</p>
+<p class="tableblock">        This return 0 if <em>memobj</em> is not a subbuffer object.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_USES_SVM_POINTER</strong></p></td>
@@ -12876,7 +12877,7 @@
 The <a href="#svm-flags-table">SVM Memory Flags</a> table describes the possible values
 for <em>flags</em>.</p>
 </div>
-<table id="svm-flags-table" class="tableblock frame-all grid-all spread">
+<table id="svm-flags-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 23. List of supported cl_svm_mem_flags_ values</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12898,18 +12899,18 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_WRITE_ONLY</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the SVM buffer will be written but not read by
-    a kernel.
-</p><p class="tableblock">    Reading from a SVM buffer created with CL_MEM_WRITE_ONLY inside a kernel
-    is undefined.
-</p><p class="tableblock">    CL_MEM_READ_WRITE and CL_MEM_WRITE_ONLY are mutually exclusive.</p></td>
+    a kernel.</p>
+<p class="tableblock">    Reading from a SVM buffer created with CL_MEM_WRITE_ONLY inside a kernel
+    is undefined.</p>
+<p class="tableblock">    CL_MEM_READ_WRITE and CL_MEM_WRITE_ONLY are mutually exclusive.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_MEM_READ_ONLY</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This flag specifies that the SVM buffer object is a read-only memory
-    object when used inside a kernel.
-</p><p class="tableblock">    Writing to a SVM buffer created with CL_MEM_READ_ONLY inside a kernel is
-    undefined.
-</p><p class="tableblock">    CL_MEM_READ_WRITE or CL_MEM_WRITE_ONLY and CL_MEM_READ_ONLY are mutually
+    object when used inside a kernel.</p>
+<p class="tableblock">    Writing to a SVM buffer created with CL_MEM_READ_ONLY inside a kernel is
+    undefined.</p>
+<p class="tableblock">    CL_MEM_READ_WRITE or CL_MEM_WRITE_ONLY and CL_MEM_READ_ONLY are mutually
     exclusive.</p></td>
 </tr>
 <tr>
@@ -12990,7 +12991,7 @@
 <div class="paragraph">
 <p>Calling <strong>clSVMAlloc</strong> does not itself provide consistency for the shared
 memory region.
-When the host cant use the SVM atomic operations, it must rely on OpenCLs
+When the host cannot use the SVM atomic operations, it must rely on OpenCLs
 guaranteed memory consistency at synchronization points.</p>
 </div>
 <div class="paragraph">
@@ -13037,7 +13038,7 @@
 This can be done by enqueuing a blocking operation such as <strong>clFinish</strong>,
 <strong>clWaitForEvents</strong>, <strong>clEnqueueReadBuffer</strong> or by registering a callback with
 the events associated with enqueued commands and when the last enqueued
-comamnd has finished freeing <em>svm_pointer</em>.</p>
+command has finished freeing <em>svm_pointer</em>.</p>
 </div>
 <div class="paragraph">
 <p>The behavior of using <em>svm_pointer</em> after it has been freed is undefined.
@@ -13865,7 +13866,7 @@
 <em>sampler_properties</em> can be <code>NULL</code> in which case the default values for
 supported sampler properties will be used.</p>
 </div>
-<table id="sampler-properties-table" class="tableblock frame-all grid-all spread">
+<table id="sampler-properties-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 24. List of supported cl_sampler_properties values and description</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -13884,32 +13885,32 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_SAMPLER_NORMALIZED_COORDS</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bool</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A boolean value that specifies whether the image coordinates
-        specified are normalized or not.
-</p><p class="tableblock">        The default value (i.e. the value used if this property is not
+        specified are normalized or not.</p>
+<p class="tableblock">        The default value (i.e. the value used if this property is not
         specified in sampler_properties) is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_SAMPLER_ADDRESSING_MODE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_addressing_mode</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Specifies how out-of-range image coordinates are handled when
-        reading from an image.
-</p><p class="tableblock">        Valid values are:
-</p><p class="tableblock">        CL_ADDRESS_MIRRORED_REPEAT<br>
+        reading from an image.</p>
+<p class="tableblock">        Valid values are:</p>
+<p class="tableblock">        CL_ADDRESS_MIRRORED_REPEAT<br>
         CL_ADDRESS_REPEAT<br>
         CL_ADDRESS_CLAMP_TO_EDGE<br>
         CL_ADDRESS_CLAMP<br>
-        CL_ADDRESS_NONE
-</p><p class="tableblock">        The default is CL_ADDRESS_CLAMP.</p></td>
+        CL_ADDRESS_NONE</p>
+<p class="tableblock">        The default is CL_ADDRESS_CLAMP.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_SAMPLER_FILTER_MODE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_filter_mode</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the type of filter that must be applied when reading an
         image.
-        Valid values are:
-</p><p class="tableblock">        CL_FILTER_NEAREST<br>
-        CL_FILTER_LINEAR
-</p><p class="tableblock">        The default value is CL_FILTER_NEAREST.</p></td>
+        Valid values are:</p>
+<p class="tableblock">        CL_FILTER_NEAREST<br>
+        CL_FILTER_LINEAR</p>
+<p class="tableblock">        The default value is CL_FILTER_NEAREST.</p></td>
 </tr>
 </tbody>
 </table>
@@ -14059,7 +14060,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="sampler-info-table" class="tableblock frame-all grid-all spread">
+<table id="sampler-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 25. <strong>clGetSamplerInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -14665,13 +14666,14 @@
 </div>
 </div>
 <div class="paragraph">
-<p>sets the values of a SPIR-V specialization constants.</p>
+<p>sets the value of a specialization constant.</p>
 </div>
 <div class="paragraph">
-<p><em>program</em> must be a valid OpenCL program created from a SPIR-V module.</p>
+<p><em>program</em> must be a valid OpenCL program created from an intermediate format
+module (e.g. SPIR-V).</p>
 </div>
 <div class="paragraph">
-<p><em>spec</em> id_ identifies the SPIR-V specialization constant whose value will be
+<p><em>spec</em> id_ identifies the specialization constant whose value will be
 set.</p>
 </div>
 <div class="paragraph">
@@ -14679,7 +14681,7 @@
 <em>spec_value</em>.
 This should be 1 for boolean constants.
 For all other constant types this should match the size of the
-specialization constant in the SPIR-V module.</p>
+specialization constant in the module.</p>
 </div>
 <div class="paragraph">
 <p><em>spec_value</em> is a pointer to the memory location that contains the value of
@@ -14702,8 +14704,8 @@
 </div>
 <div class="paragraph">
 <p>Application is not required to provide values for every specialization
-constant contained in SPIR-V module.
-SPIR-V provides default values for all specialization constants.</p>
+constant contained in the module. If the value is not set by this API
+call, default values will be used during the build.</p>
 </div>
 <div class="paragraph">
 <p><strong>clSetProgramSpecializationConstant</strong> returns CL_SUCCESS if the function is
@@ -14716,7 +14718,7 @@
 <ul>
 <li>
 <p>CL_INVALID_PROGRAM if <em>program</em> is not a valid program object created
-from a SPIR-V module.</p>
+from a module in an intermediate format (e.g. SPIR-V).</p>
 </li>
 <li>
 <p>CL_INVALID_SPEC_ID if <em>spec_id</em> is not a valid specialization constant
@@ -14724,7 +14726,7 @@
 </li>
 <li>
 <p>CL_INVALID_VALUE if <em>spec_size</em> does not match the size of the
-specialization constant in the SPIR-V module, or if <em>spec_value</em> is
+specialization constant in the module, or if <em>spec_value</em> is
 <code>NULL</code>.</p>
 </li>
 <li>
@@ -14901,7 +14903,7 @@
 <p>Separate compilation and link stages.
 Program sources can be compiled to generate a compiled binary object and
 linked in a separate stage with other compiled program objects to the
-program exectuable.</p>
+program executable.</p>
 </li>
 <li>
 <p>Embedded headers.
@@ -15795,7 +15797,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="program-info-table" class="tableblock frame-all grid-all spread">
+<table id="program-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 26. <strong>clGetProgramInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -15831,7 +15833,7 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the list of devices associated with the program object.
         This can be the devices associated with context on which the program
         object has been created or can be a subset of devices that are
-        specified when a progam object is created using
+        specified when a program object is created using
         <strong>clCreateProgramWithBinary</strong>.</p></td>
 </tr>
 <tr>
@@ -15841,13 +15843,13 @@
         <strong>clCreateProgramWithSource</strong>.
         The source string returned is a concatenation of all source strings
         specified to <strong>clCreateProgramWithSource</strong> with a null terminator.
-        The concatenation strips any nulls in the original source strings.
-</p><p class="tableblock">        If <em>program</em> is created using <strong>clCreateProgramWithBinary</strong>,
+        The concatenation strips any nulls in the original source strings.</p>
+<p class="tableblock">        If <em>program</em> is created using <strong>clCreateProgramWithBinary</strong>,
         <strong>clCreateProgramWithIL</strong> or <strong>clCreateProgramWithBuiltinKernels</strong>, a
         null string or the appropriate program source code is returned
         depending on whether or not the program source code is stored in the
-        binary.
-</p><p class="tableblock">        The actual number of characters that represents the program source
+        binary.</p>
+<p class="tableblock">        The actual number of characters that represents the program source
         code including the null terminator is returned in
         <em>param_value_size_ret</em>.</p></td>
 </tr>
@@ -15855,8 +15857,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_PROGRAM_IL</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the program IL for programs created with
-        <strong>clCreateProgramWithIL</strong>.
-</p><p class="tableblock">        If <em>program</em> is created with <strong>clCreateProgramWithSource</strong>,
+        <strong>clCreateProgramWithIL</strong>.</p>
+<p class="tableblock">        If <em>program</em> is created with <strong>clCreateProgramWithSource</strong>,
         <strong>clCreateProgramWithBinary</strong> or <strong>clCreateProgramWithBuiltinKernels</strong>
         the memory pointed to by param_value will be unchanged and
         param_value_size_retwill be set to 0.</p></td>
@@ -15870,8 +15872,8 @@
         The size of the array is the number of devices associated with
         program.
         If a binary is not available for a device(s), a size of zero is
-        returned.
-</p><p class="tableblock">        If <em>program</em> is created using <strong>clCreateProgramWithBuiltinKernels</strong>,
+        returned.</p>
+<p class="tableblock">        If <em>program</em> is created using <strong>clCreateProgramWithBuiltinKernels</strong>,
         the implementation may return zero in any entries of the returned
         array.</p></td>
 </tr>
@@ -15891,13 +15893,13 @@
         representation (a.k.a. IR) or device specific executable bits or
         both.
         The decision on which information is returned in the binary is up to
-        the OpenCL implementation.
-</p><p class="tableblock">        param_value points to an array of <code>n</code> pointers allocated by the
+        the OpenCL implementation.</p>
+<p class="tableblock">        param_value points to an array of <code>n</code> pointers allocated by the
         caller, where <code>n</code> is the number of devices associated with program.
         The buffer sizes needed to allocate the memory that these <code>n</code>
         pointers refer to can be queried using the CL_PROGRAM_BINARY_SIZES
-        query as described in this table.
-</p><p class="tableblock">        Each entry in this array is used by the implementation as the
+        query as described in this table.</p>
+<p class="tableblock">        Each entry in this array is used by the implementation as the
         location in memory where to copy the program binary for a specific
         device, if there is a binary available.
         To find out which device the program binary in the array refers to,
@@ -16027,7 +16029,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="program-build-info-table" class="tableblock frame-all grid-all spread">
+<table id="program-build-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 27. <strong>clGetProgramBuildInfo</strong> parameter queries.</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -16046,18 +16048,18 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_PROGRAM_BUILD_STATUS</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_build_status</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the build, compile or link status, whichever was performed
-        last on program for device.
-</p><p class="tableblock">        This can be one of the following:
-</p><p class="tableblock">        CL_BUILD_NONE - The build status returned if no <strong>clBuildProgram</strong>,
+        last on program for device.</p>
+<p class="tableblock">        This can be one of the following:</p>
+<p class="tableblock">        CL_BUILD_NONE - The build status returned if no <strong>clBuildProgram</strong>,
         <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong> has been performed on the
-        specified program object for device.
-</p><p class="tableblock">        CL_BUILD_ERROR - The build status returned if <strong>clBuildProgram</strong>,
+        specified program object for device.</p>
+<p class="tableblock">        CL_BUILD_ERROR - The build status returned if <strong>clBuildProgram</strong>,
         <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong> whichever was performed last
-        on the specified program object for device generated an error.
-</p><p class="tableblock">        CL_BUILD_SUCCESS - The build status returned if <strong>clBuildProgram</strong>,
+        on the specified program object for device generated an error.</p>
+<p class="tableblock">        CL_BUILD_SUCCESS - The build status returned if <strong>clBuildProgram</strong>,
         <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong> whichever was performed last
-        on the specified program object for device was successful.
-</p><p class="tableblock">        CL_BUILD_IN_PROGRESS - The build status returned if
+        on the specified program object for device was successful.</p>
+<p class="tableblock">        CL_BUILD_IN_PROGRESS - The build status returned if
         <strong>clBuildProgram</strong>, <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong> whichever
         was performed last on the specified program object for device has
         not finished.</p></td>
@@ -16067,8 +16069,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the build, compile or link options specified by the options
         argument in <strong>clBuildProgram</strong>, <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong>,
-        whichever was performed last on program for device.
-</p><p class="tableblock">        If build status of program for device is CL_BUILD_NONE, an empty
+        whichever was performed last on program for device.</p>
+<p class="tableblock">        If build status of program for device is CL_BUILD_NONE, an empty
         string is returned.</p></td>
 </tr>
 <tr>
@@ -16076,28 +16078,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the build, compile or link log for <strong>clBuildProgram</strong>,
         <strong>clCompileProgram</strong> or <strong>clLinkProgram</strong>, whichever was performed last
-        on program for device.
-</p><p class="tableblock">        If build status of program for device is CL_BUILD_NONE, an empty
+        on program for device.</p>
+<p class="tableblock">        If build status of program for device is CL_BUILD_NONE, an empty
         string is returned.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">CL_PROGRAM_BINARY_TYPE</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_program_binary_type</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the program binary type for device.
-        This can be one of the following values:
-</p><p class="tableblock">        CL_PROGRAM_BINARY_TYPE_NONE - There is no binary associated with
-        device.
-</p><p class="tableblock">        CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT - A compiled binary is
+        This can be one of the following values:</p>
+<p class="tableblock">        CL_PROGRAM_BINARY_TYPE_NONE - There is no binary associated with
+        device.</p>
+<p class="tableblock">        CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT - A compiled binary is
         associated with device.
         This is the case if program was created using
         <strong>clCreateProgramWithSource</strong> and compiled using <strong>clCompileProgram</strong> or
-        a compiled binary is loaded using <strong>clCreateProgramWithBinary</strong>.
-</p><p class="tableblock">        CL_PROGRAM_BINARY_TYPE_LIBRARY - A library binary is associated with
+        a compiled binary is loaded using <strong>clCreateProgramWithBinary</strong>.</p>
+<p class="tableblock">        CL_PROGRAM_BINARY_TYPE_LIBRARY - A library binary is associated with
         device.
         This is the case if program was created by <strong>clLinkProgram</strong> which is
         called with the <code>-create-library</code> link option or if a library binary
-        is loaded using <strong>clCreateProgramWithBinary</strong>.
-</p><p class="tableblock">        CL_PROGRAM_BINARY_TYPE_EXECUTABLE - An executable binary is
+        is loaded using <strong>clCreateProgramWithBinary</strong>.</p>
+<p class="tableblock">        CL_PROGRAM_BINARY_TYPE_EXECUTABLE - An executable binary is
         associated with device.
         This is the case if program was created by <strong>clLinkProgram</strong> without
         the <code>-create-library link</code> option or program was created by
@@ -16435,9 +16437,22 @@
 <code>filter_weights</code>, 3 for <code>src_image</code> and 4 for <code>dst_image</code>.</p>
 </div>
 <div class="paragraph">
+<p><em>arg_size</em> specifies the size of the argument value.
+If the argument is a memory object, the size is the size of the memory
+object.
+For arguments declared with the <code>local</code> qualifier, the size specified will
+be the size in bytes of the buffer that must be allocated for the <code>local</code>
+argument.
+If the argument is of type <em>sampler_t</em>, the <em>arg_size</em> value must be equal
+to <code>sizeof(cl_sampler)</code>.
+If the argument is of type <em>queue_t</em>, the <em>arg_size</em> value must be equal to
+<code>sizeof(cl_command_queue)</code>.
+For all other arguments, the size will be the size of argument type.</p>
+</div>
+<div class="paragraph">
 <p><em>arg_value</em> is a pointer to data that should be used as the argument value
 for argument specified by <em>arg_index</em>.
-The argument data pointed to by_arg_value_ is copied and the <em>arg_value</em>
+The argument data pointed to by <em>arg_value</em> is copied and the <em>arg_value</em>
 pointer can therefore be reused by the application after <strong>clSetKernelArg</strong>
 returns.
 The argument value specified is the value used by all API calls that enqueue
@@ -16499,19 +16514,6 @@
 <p>For all other kernel arguments, the <em>arg_value</em> entry must be a pointer to
 the actual data to be used as argument value.</p>
 </div>
-<div class="paragraph">
-<p><em>arg_size</em> specifies the size of the argument value.
-If the argument is a memory object, the size is the size of the memory
-object.
-For arguments declared with the <code>local</code> qualifier, the size specified will
-be the size in bytes of the buffer that must be allocated for the <code>local</code>
-argument.
-If the argument is of type <em>sampler_t</em>, the <em>arg_size</em> value must be equal
-to <code>sizeof(cl_sampler)</code>.
-If the argument is of type <em>queue_t</em>, the <em>arg_size</em> value must be equal to
-<code>sizeof(cl_command_queue)</code>.
-For all other arguments, the size will be the size of argument type.</p>
-</div>
 <div class="admonitionblock note">
 <table>
 <tr>
@@ -16580,7 +16582,7 @@
 the maximum size restriction that was set with the optional language
 attribute.
 The optional attribute can be <code>cl::max_size</code> defined in OpenCL 2.2 C++
-Kernel Languange specification or <code>SpvDecorationMaxByteOffset</code> defined
+Kernel Language specification or <code>SpvDecorationMaxByteOffset</code> defined
 in SPIR-V 1.2 Specification.</p>
 </li>
 <li>
@@ -16632,10 +16634,10 @@
 The SVM pointer can only be used for arguments that are declared to be a
 pointer to <code>global</code> or <code>constant</code> memory.
 The SVM pointer value must be aligned according to the arguments type.
-For example, if the argument is declared to be <code>global float4 <strong>p</code>, the SVM
+For example, if the argument is declared to be <code>global float4 *p</code>, the SVM
 pointer value passed for <code>p</code> must be at a minimum aligned to a <code>float4</code>.
 The SVM pointer value specified as the argument value can be the pointer
-returned by *clSVMAlloc</strong> or can be a pointer offset into the SVM region.</p>
+returned by <strong>clSVMAlloc</strong> or can be a pointer offset into the SVM region.</p>
 </div>
 <div class="paragraph">
 <p><strong>clSetKernelArgSVMPointer</strong> returns CL_SUCCESS if the function was executed
@@ -16695,7 +16697,7 @@
 <p><em>param_value</em> is a pointer to memory where the appropriate values determined
 by <em>param_name</em> are specified.</p>
 </div>
-<table id="kernel-exec-info-table" class="tableblock frame-all grid-all spread">
+<table id="kernel-exec-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 28. <strong>clSetKernelExecInfo_</strong> parameter values</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -16715,8 +16717,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">void *[]</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">SVM pointers must reference locations contained entirely within
         buffers that are passed to kernel as arguments, or that are passed
-        through the execution information.
-</p><p class="tableblock">        Non-argument SVM buffers must be specified by passing pointers to
+        through the execution information.</p>
+<p class="tableblock">        Non-argument SVM buffers must be specified by passing pointers to
         those buffers via <strong>clSetKernelExecInfo</strong> for coarse-grain and
         fine-grain buffer SVM allocations but not for finegrain system SVM
         allocations.</p></td>
@@ -16955,7 +16957,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="kernel-info-table" class="tableblock frame-all grid-all spread">
+<table id="kernel-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 29. <strong>clGetKernelInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -17003,13 +17005,13 @@
         with the kernel function declaration in the program source.
         These attributes include attributes described in the earlier OpenCL
         C kernel language specifications and other attributes supported by
-        an implementation.
-</p><p class="tableblock">        Attributes are returned as they were declared inside
+        an implementation.</p>
+<p class="tableblock">        Attributes are returned as they were declared inside
         <code>__attribute__((...))</code>, with any surrounding whitespace and
         embedded newlines removed.
         When multiple attributes are present, they are returned as a single,
-        space delimited string.
-</p><p class="tableblock">        For kernels not created from OpenCL C source and the
+        space delimited string.</p>
+<p class="tableblock">        For kernels not created from OpenCL C source and the
         <strong>clCreateProgramWithSource</strong> API call the string returned from this
         query will be empty.</p></td>
 </tr>
@@ -17101,7 +17103,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="kernel-workgroup-info-table" class="tableblock frame-all grid-all spread">
+<table id="kernel-workgroup-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 30. <strong>clGetKernelWorkGroupInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -17123,8 +17125,8 @@
         global size that can be used to execute a kernel (i.e.
         <em>global_work_size</em> argument to <strong>clEnqueueNDRangeKernel</strong>) on a custom
         device given by device or a built-in kernel on an OpenCL device
-        given by device.
-</p><p class="tableblock">        If device is not a custom device and kernel is not a built-in
+        given by device.</p>
+<p class="tableblock">        If device is not a custom device and kernel is not a built-in
         kernel, <strong>clGetKernelWorkGroupInfo</strong> returns the error
         CL_INVALID_VALUE.</p></td>
 </tr>
@@ -17136,17 +17138,17 @@
         device given by device.
         The OpenCL implementation uses the resource requirements of the
         kernel (register usage etc.) to determine what this work-group size
-        should be.
-</p><p class="tableblock">        As a result and unlike CL_DEVICE_MAX_WORK_GROUP_SIZE this value may
-        vary from one kernel to another as well as one device to another.
-</p><p class="tableblock">        CL_KERNEL_WORK_GROUP_SIZE will be less than or equal to
+        should be.</p>
+<p class="tableblock">        As a result and unlike CL_DEVICE_MAX_WORK_GROUP_SIZE this value may
+        vary from one kernel to another as well as one device to another.</p>
+<p class="tableblock">        CL_KERNEL_WORK_GROUP_SIZE will be less than or equal to
         CL_DEVICE_MAX_WORK_GROUP_SIZE for a given kernel object.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_KERNEL_COMPILE_WORK_GROUP_SIZE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t[3]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-group size specified in the kernel source or IL.
-</p><p class="tableblock">        If the work-group size is not specified in the kernel source or IL,
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-group size specified in the kernel source or IL.</p>
+<p class="tableblock">        If the work-group size is not specified in the kernel source or IL,
         (0, 0, 0) is returned.</p></td>
 </tr>
 <tr>
@@ -17157,8 +17159,8 @@
         to execute the kernel, variables declared inside the kernel with the
         <code>__local</code> address qualifier and local memory to be allocated for
         arguments to the kernel declared as pointers with the <code>__local</code>
-        address qualifier and whose size is specified with <strong>clSetKernelArg</strong>.
-</p><p class="tableblock">        If the local memory size, for any pointer argument to the kernel
+        address qualifier and whose size is specified with <strong>clSetKernelArg</strong>.</p>
+<p class="tableblock">        If the local memory size, for any pointer argument to the kernel
         declared with the <code>__local</code> address qualifier, is not specified,
         its size is assumed to be 0.</p></td>
 </tr>
@@ -17281,7 +17283,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="kernel-subgroup-info-table" class="tableblock frame-all grid-all spread">
+<table id="kernel-subgroup-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 31. <strong>clGetKernelSubGroupInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 25%;">
@@ -17305,8 +17307,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the maximum sub-group size for this kernel.
             All sub-groups must be the same size, while the last subgroup in
             any work-group (i.e. the subgroup with the maximum index) could
-            be the same or smaller size.
-</p><p class="tableblock">            The <em>input_value</em> must be an array of size_t values
+            be the same or smaller size.</p>
+<p class="tableblock">            The <em>input_value</em> must be an array of size_t values
             corresponding to the local work size parameter of the intended
             dispatch.
             The number of dimensions in the ND-range will be inferred from
@@ -17320,8 +17322,8 @@
             work-group for a given local work size.
             All workgroups, apart from the last work-group in each dimension
             in the presence of non-uniform work-group sizes, will have the
-            same number of sub-groups.
-</p><p class="tableblock">            The <em>input_value</em> must be an array of size_t values
+            same number of sub-groups.</p>
+<p class="tableblock">            The <em>input_value</em> must be an array of size_t values
             corresponding to the local work size parameter of the intended
             dispatch.
             The number of dimensions in the ND-range will be inferred from
@@ -17458,7 +17460,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="kernel-argument-info-table" class="tableblock frame-all grid-all spread">
+<table id="kernel-argument-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 32. <strong>clGetKernelArgInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -17478,12 +17480,12 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_kernel_arg_address_qualifier</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the address qualifier specified for the argument given by
         <em>arg_indx</em>.
-        This can be one of the following values:
-</p><p class="tableblock">        CL_KERNEL_ARG_ADDRESS_GLOBAL<br>
+        This can be one of the following values:</p>
+<p class="tableblock">        CL_KERNEL_ARG_ADDRESS_GLOBAL<br>
         CL_KERNEL_ARG_ADDRESS_LOCAL<br>
         CL_KERNEL_ARG_ADDRESS_CONSTANT<br>
-        CL_KERNEL_ARG_ADDRESS_PRIVATE
-</p><p class="tableblock">        If no address qualifier is specified, the default address qualifier
+        CL_KERNEL_ARG_ADDRESS_PRIVATE</p>
+<p class="tableblock">        If no address qualifier is specified, the default address qualifier
         which is CL_KERNEL_ARG_ADDRESS_PRIVATE is returned.</p></td>
 </tr>
 <tr>
@@ -17491,12 +17493,12 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_kernel_arg_access_qualifier</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the access qualifier specified for the argument given by
         <em>arg_indx</em>.
-        This can be one of the following values:
-</p><p class="tableblock">        CL_KERNEL_ARG_ACCESS_READ_ONLY<br>
+        This can be one of the following values:</p>
+<p class="tableblock">        CL_KERNEL_ARG_ACCESS_READ_ONLY<br>
         CL_KERNEL_ARG_ACCESS_WRITE_ONLY<br>
         CL_KERNEL_ARG_ACCESS_READ_WRITE<br>
-        CL_KERNEL_ARG_ACCESS_NONE
-</p><p class="tableblock">        If argument is not an image type and is not declared with the pipe
+        CL_KERNEL_ARG_ACCESS_NONE</p>
+<p class="tableblock">        If argument is not an image type and is not declared with the pipe
         qualifier, CL_KERNEL_ARG_ACCESS_NONE is returned.
         If argument is an image type, the access qualifier specified or the
         default access qualifier is returned.</p></td>
@@ -17522,8 +17524,8 @@
         The returned value can be: CL_KERNEL_ARG_TYPE_CONST<sup>17</sup>,
         CL_KERNEL_ARG_TYPE_RESTRICT, CL_KERNEL_ARG_TYPE_VOLATILE<sup>18</sup>, a
         combination of the above enums, CL_KERNEL_ARG_TYPE_PIPE or
-        CL_KERNEL_ARG_TYPE_NONE.
-</p><p class="tableblock">        CL_KERNEL_ARG_TYPE_NONE is returned for all parameters passed by
+        CL_KERNEL_ARG_TYPE_NONE.</p>
+<p class="tableblock">        CL_KERNEL_ARG_TYPE_NONE is returned for all parameters passed by
         value.</p></td>
 </tr>
 <tr>
@@ -18362,7 +18364,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="event-info-table" class="tableblock frame-all grid-all spread">
+<table id="event-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 33. <strong>clGetEventInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 30%;">
@@ -18392,8 +18394,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_EVENT_COMMAND_TYPE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_command_type</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the command associated with event.
-        Can be one of the following values:
-</p><p class="tableblock">        CL_COMMAND_NDRANGE_KERNEL<br>
+        Can be one of the following values:</p>
+<p class="tableblock">        CL_COMMAND_NDRANGE_KERNEL<br>
         CL_COMMAND_NATIVE_KERNEL<br>
         CL_COMMAND_READ_BUFFER<br>
         CL_COMMAND_WRITE_BUFFER<br>
@@ -18427,13 +18429,13 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_EVENT_COMMAND_EXECUTION_STATUS</strong><sup>19</sup></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_int</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return the execution status of the command identified by event.
-        Valid values are:
-</p><p class="tableblock">        CL_QUEUED (command has been enqueued n the command-queue),
-</p><p class="tableblock">        CL_SUBMITTED (enqueued command has been submitted by the host to the
-        device associated with the command-queue),
-</p><p class="tableblock">        CL_RUNNING (device is currently executing this command),
-</p><p class="tableblock">        CL_COMPLETE (the command has completed), or
-</p><p class="tableblock">        Error code given by a negative integer value. (command was
+        Valid values are:</p>
+<p class="tableblock">        CL_QUEUED (command has been enqueued n the command-queue),</p>
+<p class="tableblock">        CL_SUBMITTED (enqueued command has been submitted by the host to the
+        device associated with the command-queue),</p>
+<p class="tableblock">        CL_RUNNING (device is currently executing this command),</p>
+<p class="tableblock">        CL_COMPLETE (the command has completed), or</p>
+<p class="tableblock">        Error code given by a negative integer value. (command was
         abnormally terminated - this may be caused by a bad memory access
         etc.).
         These error codes come from the same set of error codes that are
@@ -19048,7 +19050,7 @@
 queried by <em>param_name</em>.
 If <em>param_value_size_ret</em> is <code>NULL</code>, it is ignored.</p>
 </div>
-<table id="event-profiling-info-table" class="tableblock frame-all grid-all spread">
+<table id="event-profiling-info-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 34. <strong>clGetEventProfilingInfo</strong> parameter queries</caption>
 <colgroup>
 <col style="width: 34%;">
@@ -19572,7 +19574,7 @@
 profile are listed in the <a href="#embedded-device-queries-table">OpenCL Embedded
 Device Queries</a> table.</p>
 </div>
-<table id="embedded-device-queries-table" class="tableblock frame-all grid-all spread">
+<table id="embedded-device-queries-table" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 35. OpenCL Embedded Device Queries</caption>
 <colgroup>
 <col style="width: 33.3333%;">
@@ -19641,20 +19643,20 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_IMAGE_MAX_BUFFER_SIZE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of pixels for a 1D image created from a buffer object.
-</p><p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of pixels for a 1D image created from a buffer object.</p>
+<p class="tableblock">        The minimum value is 2048 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_IMAGE_MAX_ARRAY_SIZE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of images in a 1D or 2D image array.
-</p><p class="tableblock">        The minimum value is 256 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Max number of images in a 1D or 2D image array.</p>
+<p class="tableblock">        The minimum value is 256 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_MAX_SAMPLERS</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_uint</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of samplers that can be used in a kernel.
-</p><p class="tableblock">        The minimum value is 8 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of samplers that can be used in a kernel.</p>
+<p class="tableblock">        The minimum value is 8 if CL_DEVICE_IMAGE_SUPPORT is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_MAX_PARAMETER_SIZE</strong></p></td>
@@ -19666,22 +19668,22 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_SINGLE_FP_CONFIG</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_fp_config</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Describes single precision floatingpoint capability of the device.
+<td class="tableblock halign-left valign-top"><p class="tableblock">Describes single precision floating-point capability of the device.
         This is a bit-field that describes one or more of the following
-        values:
-</p><p class="tableblock">        CL_FP_DENORM - denorms are supported
-</p><p class="tableblock">        CL_FP_INF_NAN - INF and quiet NaNs are supported.
-</p><p class="tableblock">        CL_FP_ROUND_TO_NEAREST - round to nearest even rounding mode
-        supported
-</p><p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported
-</p><p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
-        rounding modes supported
-</p><p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.
-</p><p class="tableblock">        CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT - divide and sqrt are correctly
-        rounded as defined by the IEEE754 specification.
-</p><p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
-        addition, subtraction, multiplication) are implemented in software.
-</p><p class="tableblock">        The mandated minimum floating-point capability is:
+        values:</p>
+<p class="tableblock">        CL_FP_DENORM - denorms are supported</p>
+<p class="tableblock">        CL_FP_INF_NAN - INF and quiet NaNs are supported.</p>
+<p class="tableblock">        CL_FP_ROUND_TO_NEAREST - round to nearest even rounding mode
+        supported</p>
+<p class="tableblock">        CL_FP_ROUND_TO_ZERO - round to zero rounding mode supported</p>
+<p class="tableblock">        CL_FP_ROUND_TO_INF - round to positive and negative infinity
+        rounding modes supported</p>
+<p class="tableblock">        CL_FP_FMA - IEEE754-2008 fused multiply-add is supported.</p>
+<p class="tableblock">        CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT - divide and sqrt are correctly
+        rounded as defined by the IEEE754 specification.</p>
+<p class="tableblock">        CL_FP_SOFT_FLOAT - Basic floating-point operations (such as
+        addition, subtraction, multiplication) are implemented in software.</p>
+<p class="tableblock">        The mandated minimum floating-point capability is:
         CL_FP_ROUND_TO_ZERO or CL_FP_ROUND_TO_NEAREST for devices that are
         not of type CL_DEVICE_TYPE_CUSTOM.</p></td>
 </tr>
@@ -19711,17 +19713,17 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_COMPILER_AVAILABLE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bool</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Is CL_FALSE if the implementation does not have a compiler available
-        to compile the program source.
-</p><p class="tableblock">        Is CL_TRUE if the compiler is available.
+        to compile the program source.</p>
+<p class="tableblock">        Is CL_TRUE if the compiler is available.
         This can be CL_FALSE for the embedded platform profile only.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_LINKER_AVAILABLE</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_bool</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Is CL_FALSE if the implementation does not have a linker available.
-        Is CL_TRUE if the linker is available.
-</p><p class="tableblock">        This can be CL_FALSE for the embedded platform profile only.
-</p><p class="tableblock">        This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE.</p></td>
+        Is CL_TRUE if the linker is available.</p>
+<p class="tableblock">        This can be CL_FALSE for the embedded platform profile only.</p>
+<p class="tableblock">        This must be CL_TRUE if CL_DEVICE_COMPILER_AVAILABLE is CL_TRUE.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE</strong></p></td>
@@ -19940,7 +19942,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -19962,7 +19964,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -19984,7 +19986,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -20028,7 +20030,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -20050,7 +20052,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -20075,7 +20077,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -20097,7 +20099,7 @@
 <div class="paragraph">
 <p>uint4 a =</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -20511,7 +20513,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="_high_low_vector_component_notation">High/Low vector component notation</h4>
+<h4 id="_highlow_vector_component_notation">High/Low vector component notation</h4>
 <div class="paragraph">
 <p>Vector data type components may be accessed using the <code>.hi</code> and <code>.lo</code>
 notation similar to that supported within the language types.
@@ -20603,9 +20605,9 @@
 <h3 id="_application_constant_definitions">Application constant definitions</h3>
 <div class="paragraph">
 <p>In addition to the above application type definitions, the following literal
-defintions are also available.</p>
+definitions are also available.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -20775,7 +20777,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_INFINITY</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Macro expanding to a value represnting infinity</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Macro expanding to a value representing infinity</p></td>
 </tr>
 </tbody>
 </table>
@@ -21102,7 +21104,7 @@
 program have been added to <strong>clGetProgramInfo</strong>.</p>
 </li>
 <li>
-<p>Additiional queries to get the compile and link status and options have
+<p>Additional queries to get the compile and link status and options have
 been added to <strong>clGetProgramBuildInfo</strong>.</p>
 </li>
 <li>
@@ -21428,11 +21430,11 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 2.2-8<br>
-Last updated 2018-09-24 21:35:08 PDT
+Version v2.2-10<br>
+Last updated 2019-02-05 16:03:11 EST
 </div>
 </div>
 
-
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/specs/2.2/html/OpenCL_C.html b/specs/2.2/html/OpenCL_C.html
index 953dac7..55ef0f3 100644
--- a/specs/2.2/html/OpenCL_C.html
+++ b/specs/2.2/html/OpenCL_C.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.5">
-<meta name="author" content="Document Revision: 40">
+<meta name="generator" content="Asciidoctor 1.5.7">
+<meta name="author" content="Khronos&#174; OpenCL Working Group">
 <title>The OpenCL&#8482; C 2.0 Specification</title>
 <style>
 /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
@@ -724,7 +724,7 @@
 .literalblock pre, .listingblock pre { background: #eeeeee; }
 
 </style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
 <style>
 /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
 /*pre.CodeRay {background-color:#f7f7f8;}*/
@@ -840,10 +840,10 @@
 <div id="header">
 <h1>The OpenCL<sup>&#8482;</sup> C 2.0 Specification</h1>
 <div class="details">
-<span id="author" class="author">Document Revision: 40</span><br>
-<span id="revnumber">version 2.2-8,</span>
-<span id="revdate">Mon, 08 Oct 2018 16:51:37 +0000</span>
-<br><span id="revremark">from git branch: master commit: b3cab22fcff5d8c17869907c983e259ddd7ce788</span>
+<span id="author" class="author">Khronos<sup>&#174;</sup> OpenCL Working Group</span><br>
+<span id="revnumber">version v2.2-10,</span>
+<span id="revdate">Tue, 05 Feb 2019 21:19:55 +0000</span>
+<br><span id="revremark">from git branch:  commit: 00422daf5dc013f21ab633479577c7cc225150e2</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -995,7 +995,7 @@
 <div class="sectionbody">
 <div style="page-break-after: always;"></div>
 <div class="paragraph">
-<p>Copyright 2008-2018 The Khronos Group.</p>
+<p>Copyright 2008-2019 The Khronos Group.</p>
 </div>
 <div class="paragraph">
 <p>This specification is protected by copyright laws and contains material proprietary
@@ -1026,7 +1026,7 @@
 otherwise, arising from or in connection with these materials.</p>
 </div>
 <div class="paragraph">
-<p>Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL,
+<p>Vulkan and Khronos are registered trademarks, and OpenXR, SPIR, SPIR-V, SYCL, WebGL,
 WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput,
 OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are
 trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC,
@@ -1263,7 +1263,7 @@
 <div class="paragraph">
 <p>The following table describes the list of built-in scalar data types.</p>
 </div>
-<table id="table-builtin-scalar-types" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-scalar-types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 1. Built-in Scalar Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1379,7 +1379,7 @@
 programming language and the corresponding data type available to the
 application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1547,7 +1547,7 @@
 <div class="paragraph">
 <p>The following table describes the list of built-in vector data types.</p>
 </div>
-<table id="table-builtin-vector-types" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-vector-types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 2. Built-in Vector Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1612,7 +1612,7 @@
 programming language and the corresponding data type available to the
 application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1671,7 +1671,7 @@
 <p>The following table describes the list of additional data types supported by
 OpenCL.</p>
 </div>
-<table id="table-other-builtin-types" class="tableblock frame-all grid-all spread">
+<table id="table-other-builtin-types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 3. Other Built-in Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1748,11 +1748,11 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>cl_mem_fence_flags</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This is a bitfield and can be 0 or a combination of the following
-      values ORed together:
-</p><p class="tableblock">      <code>CLK_GLOBAL_MEM_FENCE</code><br>
+      values ORed together:</p>
+<p class="tableblock">      <code>CLK_GLOBAL_MEM_FENCE</code><br>
       <code>CLK_LOCAL_MEM_FENCE</code><br>
-      <code>CLK_IMAGE_MEM_FENCE</code>
-</p><p class="tableblock">      These flags are described in detail in the
+      <code>CLK_IMAGE_MEM_FENCE</code></p>
+<p class="tableblock">      These flags are described in detail in the
       <a href="#synchronization-functions">synchronization functions</a> section.</p></td>
 </tr>
 </tbody>
@@ -1790,7 +1790,7 @@
 described in <a href="#table-other-builtin-types">Other Built-in Data Types</a> and the corresponding data type
 available to the application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1819,7 +1819,7 @@
 The vector data type names defined in <a href="#table-builtin-vector-types">Built-in Vector Data Types</a>, but
 where <em>n</em> is any value other than 2, 3, 4, 8 and 16, are also reserved.</p>
 </div>
-<table id="table-reserved-types" class="tableblock frame-all grid-all spread">
+<table id="table-reserved-types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 4. Reserved Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -2087,7 +2087,7 @@
 refer to the appropriate element in the vector.
 The numeric indices that can be used are given in the table below:</p>
 </div>
-<table id="table-vector-indices" class="tableblock frame-all grid-all spread">
+<table id="table-vector-indices" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 5. Numeric indices for built-in vector data types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -2510,7 +2510,7 @@
 Conversions may have an optional rounding mode modifier described in the
 following table.</p>
 </div>
-<table id="table-rounding-mode" class="tableblock frame-all grid-all spread">
+<table id="table-rounding-mode" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 6. Rounding Modes</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -3529,8 +3529,8 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code data-lang="c"><span class="comment">// declares a pointer p in the private address space that</span>
-<span class="comment">// points to an object in address space global</span>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="comment">// declares a pointer p in the global address space that</span>
+<span class="comment">// points to an object in the global address space</span>
 global <span class="predefined-type">int</span> *p;
 
 <span class="directive">void</span> foo (...)
@@ -4635,7 +4635,7 @@
 <code>__local</code> and <code>__constant</code> address space qualifiers.
 <span class="line-through">The <code>image3d_t</code> type cannot be used with the <code>__write_only</code>
 access qualifier unless the <strong>cl_khr_3d_image_writes</strong> extension is enabled.
-An image type cannot be used with the <code>__read_write</code> access qualifer which
+An image type cannot be used with the <code>__read_write</code> access qualifier which
 is reserved for future use.</span></p>
 </div>
 <div class="paragraph">
@@ -5922,7 +5922,7 @@
 size specified to <strong>clEnqueueNDRangeKernel</strong>, and the global and local
 identifier of each work-item when this kernel is being executed on a device.</p>
 </div>
-<table id="table-work-item-functions" class="tableblock frame-all grid-all spread">
+<table id="table-work-item-functions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 7. Work-Item Functions Table</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -5944,8 +5944,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the number of global work-items specified for dimension
       identified by <em>dimindx</em>.
       This value is given by the <em>global_work_size</em> argument to
-      <strong>clEnqueueNDRangeKernel</strong>.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      <strong>clEnqueueNDRangeKernel</strong>.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_global_size</strong>() returns 1.</p></td>
 </tr>
 <tr>
@@ -5953,8 +5953,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the unique global work-item ID value for dimension identified
       by <em>dimindx</em>.
       The global work-item ID specifies the work-item ID based on the number
-      of global work-items specified to execute the kernel.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      of global work-items specified to execute the kernel.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_global_id</strong>() returns 0.</p></td>
 </tr>
 <tr>
@@ -5967,16 +5967,16 @@
       <em>local_work_size</em> value which is returned by this function.
       If the kernel is executed with a non-uniform work-group size<sup>28</sup>, calls
       to this built-in from some work-groups may return different values
-      than calls to this built-in from other work-groups.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      than calls to this built-in from other work-groups.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_local_size</strong>() returns 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_enqueued_local_size</strong>(
       uint <em>dimindx</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the same value as that returned by <strong>get_local_size</strong>(<em>dimindx</em>)
-      if the kernel is executed with a uniform work-group size.
-</p><p class="tableblock">      If the kernel is executed with a non-uniform work-group size, returns
+      if the kernel is executed with a uniform work-group size.</p>
+<p class="tableblock">      If the kernel is executed with a non-uniform work-group size, returns
       the number of local work-items in each of the work-groups that make up
       the uniform region of the global range in the dimension identified by
       <em>dimindx</em>.
@@ -5985,66 +5985,66 @@
       <em>local_work_size</em>[<em>dimindx</em>].
       If <em>local_work_size</em> is <code>NULL</code>, this value will match the local size
       that the implementation determined would be most efficient at
-      implementing the uniform region of the global range.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      implementing the uniform region of the global range.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_enqueued_local_size</strong>() returns 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_local_id</strong>(uint <em>dimindx</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the unique local work-item ID, i.e. a work-item within a
-      specific work-group for dimension identified by <em>dimindx</em>.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      specific work-group for dimension identified by <em>dimindx</em>.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_local_id</strong>() returns 0.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_num_groups</strong>(uint <em>dimindx</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the number of work-groups that will execute a kernel for
-      dimension identified by <em>dimindx</em>.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      dimension identified by <em>dimindx</em>.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values of <em>dimindx</em>, <strong>get_num_groups</strong>() returns 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_group_id</strong>(uint <em>dimindx</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>get_group_id</strong> returns the work-group ID which is a number from 0 ..
-      <strong>get_num_groups</strong>(<em>dimindx</em>) - 1.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      <strong>get_num_groups</strong>(<em>dimindx</em>) - 1.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values, <strong>get_group_id</strong>() returns 0.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_global_offset</strong>(uint <em>dimindx</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>get_global_offset</strong> returns the offset values specified in
-      <em>global_work_offset</em> argument to <strong>clEnqueueNDRangeKernel</strong>.
-</p><p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
+      <em>global_work_offset</em> argument to <strong>clEnqueueNDRangeKernel</strong>.</p>
+<p class="tableblock">      Valid values of <em>dimindx</em> are 0 to <strong>get_work_dim</strong>() - 1.
       For other values, <strong>get_global_offset</strong>() returns 0.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_global_linear_id</strong>()</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-items 1-dimensional global ID.
-</p><p class="tableblock">      For 1D work-groups, it is computed as <strong>get_global_id</strong>(0) -
-      <strong>get_global_offset</strong>(0).
-</p><p class="tableblock">      For 2D work-groups, it is computed as (<strong>get_global_id</strong>(1) -
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-items 1-dimensional global ID.</p>
+<p class="tableblock">      For 1D work-groups, it is computed as <strong>get_global_id</strong>(0) -
+      <strong>get_global_offset</strong>(0).</p>
+<p class="tableblock">      For 2D work-groups, it is computed as (<strong>get_global_id</strong>(1) -
       <strong>get_global_offset</strong>(1)) * <strong>get_global_size</strong>(0) + (<strong>get_global_id</strong>(0) -
-      <strong>get_global_offset</strong>(0)).
-</p><p class="tableblock">      For 3D work-groups, it is computed as <strong>get_global_id</strong>(2) -       <strong>get_global_offset</strong>(2 * <strong>get_global_size</strong>(1) * <strong>get_global_size</strong>(0))
+      <strong>get_global_offset</strong>(0)).</p>
+<p class="tableblock">      For 3D work-groups, it is computed as <strong>get_global_id</strong>(2) -       <strong>get_global_offset</strong>(2 * <strong>get_global_size</strong>(1) * <strong>get_global_size</strong>(0))
       + <strong>get_global_id</strong>(1) - <strong>get_global_offset</strong>(1 * <strong>get_global_size</strong>
       (0)) + (<strong>get_global_id</strong>(0) - <strong>get_global_offset</strong>(0)).</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">size_t <strong>get_local_linear_id</strong>()</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-items 1-dimensional local ID.
-</p><p class="tableblock">      For 1D work-groups, it is the same value as
-</p><p class="tableblock">      <strong>get_local_id</strong>(0).
-</p><p class="tableblock">      For 2D work-groups, it is computed as
-</p><p class="tableblock">      <strong>get_local_id</strong>(1) * <strong>get_local_size</strong>(0) + <strong>get_local_id</strong>(0).
-</p><p class="tableblock">      For 3D work-groups, it is computed as
-</p><p class="tableblock">      <strong>(get_local_id</strong>(2) * <strong>get_local_size</strong>(1) * <strong>get_local_size</strong>(0)) + 
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the work-items 1-dimensional local ID.</p>
+<p class="tableblock">      For 1D work-groups, it is the same value as</p>
+<p class="tableblock">      <strong>get_local_id</strong>(0).</p>
+<p class="tableblock">      For 2D work-groups, it is computed as</p>
+<p class="tableblock">      <strong>get_local_id</strong>(1) * <strong>get_local_size</strong>(0) + <strong>get_local_id</strong>(0).</p>
+<p class="tableblock">      For 3D work-groups, it is computed as</p>
+<p class="tableblock">      <strong>(get_local_id</strong>(2) * <strong>get_local_size</strong>(1) * <strong>get_local_size</strong>(0)) + 
       (<strong>get_local_id</strong>(1) * <strong>get_local_size</strong>(0)) + <strong>get_local_id</strong>(0).</p></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
 <p>[28] I.e. the <em>global_work_size</em> values specified to <strong>clEnqueueNDRangeKernel</strong>
-are not evenly divisable by the <em>local_work_size</em> values for each dimension.</p>
+are not evenly divisible by the <em>local_work_size</em> values for each dimension.</p>
 </div>
 </div>
 <div class="sect3">
@@ -6088,7 +6088,7 @@
 For any specific use of a function, the actual type has to be the same for
 all arguments and the return type, unless otherwise specified.</p>
 </div>
-<table id="table-builtin-math" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-math" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 8. Scalar and Vector Argument Built-in Math Function Table</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6162,7 +6162,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cosh</strong>(gentype <em>x</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic consine, where <em>x</em> is an angle in radians.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic cosine, where <em>x</em> is an angle in radians.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cospi</strong>(gentype <em>x</em>)</p></td>
@@ -6512,7 +6512,7 @@
 following table can take <code>float</code>, <code>float2</code>, <code>float3</code>, <code>float4</code>, <code>float8</code> or
 <code>float16</code> as the type for the arguments.</p>
 </div>
-<table id="table-builtin-half-native-math" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-half-native-math" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 9. Scalar and Vector Argument Built-in <em>half</em> and <em>native</em> Math Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6681,7 +6681,7 @@
 Their values are of type <code>float</code> and are accurate within the precision of a
 single precision floating-point number.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -6716,7 +6716,7 @@
 <p>If double precision is supported by the device, the following symbolic
 constants will also be available:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -6792,7 +6792,7 @@
 OpenCL C programming language and the corresponding macro names available to
 the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -6855,7 +6855,7 @@
 They are of type <code>float</code> and are accurate within the precision of the
 <code>float</code> type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -6953,7 +6953,7 @@
 OpenCL C programming language and the corresponding macro names available to
 the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -7006,7 +7006,7 @@
 They are of type <code>double</code> and are accurate within the precision of the
 double type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -7104,7 +7104,7 @@
 <p>For any specific use of a function, the actual type has to be the same for
 all arguments and the return type unless otherwise specified.</p>
 </div>
-<table id="table-builtin-functions" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-functions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 10. Scalar and Vector Integer Argument Built-in Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7235,7 +7235,7 @@
 take <code>int</code>, <code>int2</code>, <code>int3</code>, <code>int4</code>, <code>int8</code>, <code>int16</code>, <code>uint</code>, <code>uint2</code>,
 <code>uint3</code>, <code>uint4</code>, <code>uint8</code> or <code>uint16</code> as the type for the arguments.</p>
 </div>
-<table id="table-builtin-fast-integer" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-fast-integer" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 11. Fast Integer Built-in Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7295,7 +7295,7 @@
 OpenCL C programming language and the corresponding macro names available to
 the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -7393,7 +7393,7 @@
 <p>The built-in common functions are implemented using the round to nearest
 even rounding mode.</p>
 </div>
-<table id="table-builtin-common" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-common" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 12. Scalar and Vector Argument Built-in Common Function Table</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7433,9 +7433,9 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>mix</strong>(gentype <em>x</em>, gentype <em>y</em>, gentype <em>a</em>)<br>
   gentypef <strong>mix</strong>(gentypef <em>x</em>, gentypef <em>y</em>, float <em>a</em>)<br>
   gentyped <strong>mix</strong>(gentyped <em>x</em>, gentyped <em>y</em>, double <em>a</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the linear blend of <em>x</em> &amp; <em>y</em> implemented as:
-</p><p class="tableblock">      <em>x</em> + (<em>y</em> - <em>x</em>) * <em>a</em>
-</p><p class="tableblock">      <em>a</em> must be a value in the range [0.0, 1.0].
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the linear blend of <em>x</em> &amp; <em>y</em> implemented as:</p>
+<p class="tableblock">      <em>x</em> + (<em>y</em> - <em>x</em>) * <em>a</em></p>
+<p class="tableblock">      <em>a</em> must be a value in the range [0.0, 1.0].
       If <em>a</em> is not in the range [0.0, 1.0], the return values are
       undefined.</p></td>
 </tr>
@@ -7453,7 +7453,7 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>smoothstep</strong>(gentype <em>edge0</em>, gentype <em>edge1</em>, gentype <em>x</em>)<br>
   gentypef <strong>smoothstep</strong>(float <em>edge0</em>, float <em>edge1</em>, gentypef <em>x</em>)<br>
   gentyped <strong>smoothstep</strong>(double <em>edge0</em>, double <em>edge1</em>, gentyped <em>x</em>)</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>Returns 0.0 if <em>x</em> &lt;= <em>edge0</em> and 1.0 if <em>x</em> &gt;= <em>edge1</em> and performs
       smooth Hermite interpolation between 0 and 1 when <em>edge0</em> &lt; <em>x</em> &lt;
       <em>edge1</em>.
@@ -7503,7 +7503,7 @@
 The built-in geometric functions are implemented using the round to nearest
 even rounding mode.</p>
 </div>
-<table id="table-builtin-geometric" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-geometric" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 13. Scalar and Vector Argument Built-in Geometric Function Table</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7554,12 +7554,12 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float <strong>fast_length</strong>(float<em>n</em> <em>p</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the length of vector <em>p</em> computed as:
-</p><p class="tableblock">      <strong>half_sqrt</strong>(<em>p.x</em><sup>2</sup> + <em>p.y</em><sup>2</sup> + &#8230;&#8203;)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the length of vector <em>p</em> computed as:</p>
+<p class="tableblock">      <strong>half_sqrt</strong>(<em>p.x</em><sup>2</sup> + <em>p.y</em><sup>2</sup> + &#8230;&#8203;)</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float<em>n</em> <strong>fast_normalize</strong>(float<em>n</em> <em>p</em>)</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>Returns a vector in the same direction as <em>p</em> but with a length of 1.
       <strong>fast_normalize</strong> is computed as:</p>
 </div>
@@ -7654,7 +7654,7 @@
 the argument type is a scalar and returns -1 if one or both arguments are
 not a number (NaN) and the argument type is a vector.</p>
 </div>
-<table id="table-builtin-relational" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-relational" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 14. Scalar and Vector Relational Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7803,10 +7803,10 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>select</strong>(gentype <em>a</em>, gentype <em>b</em>, igentype <em>c</em>)
   gentype <strong>select</strong>(gentype <em>a</em>, gentype <em>b</em>, ugentype <em>c</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">For each component of a vector type,
-</p><p class="tableblock">      <em>result[i]</em> = if MSB of <em>c[i]</em> is set ? <em>b[i]</em> : <em>a[i]</em>.
-</p><p class="tableblock">      For a scalar type, <em>result</em> = <em>c</em> ? <em>b</em> : <em>a</em>.
-</p><p class="tableblock">      <code>igentype</code> and <code>ugentype</code> must have the same number of elements and
+<td class="tableblock halign-left valign-top"><p class="tableblock">For each component of a vector type,</p>
+<p class="tableblock">      <em>result[i]</em> = if MSB of <em>c[i]</em> is set ? <em>b[i]</em> : <em>a[i]</em>.</p>
+<p class="tableblock">      For a scalar type, <em>result</em> = <em>c</em> ? <em>b</em> : <em>a</em>.</p>
+<p class="tableblock">      <code>igentype</code> and <code>ugentype</code> must have the same number of elements and
       bits as <code>gentype</code><sup>36</sup>.</p></td>
 </tr>
 </tbody>
@@ -7837,7 +7837,7 @@
 described in <a href="#opencl-extension-spec">section 9.4 of the OpenCL 2.0 Extension
 Specification</a>.</p>
 </div>
-<table id="table-vector-loadstore" class="tableblock frame-all grid-all spread">
+<table id="table-vector-loadstore" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 15. Vector Data Load and Store Functions<sup>38</sup></caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7850,7 +7850,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const gentype *<em>p</em>)<br>
-  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const constant gentype *<em>p</em>)</p></td>
+  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __constant gentype *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return <code>sizeof(gentype<em>n</em>)</code> bytes of data, where the first <code>(<em>n</em> *
       sizeof(gentype))</code> bytes are read from the address
       computed as <code>(<em>p</em> +  (<em>offset</em> * <em>n</em>))</code>.
@@ -7869,12 +7869,8 @@
       if <code>gentype</code> is <code>long</code> or <code>ulong</code>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"></td>
-<td class="tableblock halign-left valign-top"></td>
-</tr>
-<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float <strong>vload_half</strong>(size_t <em>offset</em>, const half *<em>p</em>)<br>
-  float <strong>vload_half</strong>(size_t <em>offset</em>, const constant half *<em>p</em>)</p></td>
+  float <strong>vload_half</strong>(size_t <em>offset</em>, const __constant half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read <code>sizeof(half)</code> bytes of data from the address computed as <code>(<em>p</em>
       +  <em>offset</em>)</code>.
       The data read is interpreted as a <code>half</code> value.
@@ -7884,7 +7880,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float<em>n</em> <strong>vload_half<em>n</em></strong>(size_t <em>offset</em>, const half *<em>p</em>)<br>
-  float<em>n</em> <strong>vload_half<em>n</em></strong>(size_t <em>offset</em>, const constant half *<em>p</em>)</p></td>
+  float<em>n</em> <strong>vload_half<em>n</em></strong>(size_t <em>offset</em>, const __constant half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read <code>(<em>n</em> * sizeof(half))</code> bytes of data from the address computed as
       <code>(<em>p</em> +  (<em>offset * n</em>))</code>.
       The data read is interpreted as a <code>half<em>n</em></code> value.
@@ -7894,59 +7890,59 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half</strong>(float <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rte</em></strong>(float _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtz</em></strong>(float _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtp</em></strong>(float _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtn</em></strong>(float _data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstore_half_rte</strong>(float <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtz</strong>(float <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtp</strong>(float <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtn</strong>(float <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>float</code> value given by <em>data</em> is first converted to a <code>half</code> value
       using the appropriate rounding mode.
       The <code>half</code> value is then written to the address computed as <code>(<em>p</em>
       +  <em>offset</em>)</code>.
-      The computed address must be 16-bit aligned.
-</p><p class="tableblock">      <strong>vstore_half</strong> uses the default rounding mode.
+      The computed address must be 16-bit aligned.</p>
+<p class="tableblock">      <strong>vstore_half</strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half<em>n</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rte</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtz</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtp</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtn</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstore_half<em>n</em>_rte</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtz</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtp</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtn</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>float<em>n</em></code> value given by <em>data</em> is converted to a <code>half<em>n</em></code>
       value using the appropriate rounding mode.
       <code><em>n</em> * sizeof(half)</code> bytes from the <code>half<em>n</em></code> value are then written to
       the address computed as <code>(<em>p</em>
       +  (<em>offset</em> * <em>n</em>))</code>.
-      The computed address must be 16-bit aligned.
-</p><p class="tableblock">      <strong>vstore_half<em>n</em></strong> uses the default rounding mode.
+      The computed address must be 16-bit aligned.</p>
+<p class="tableblock">      <strong>vstore_half<em>n</em></strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half</strong>(double <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rte</em></strong>(double _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtz</em></strong>(double _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtp</em></strong>(double _data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em><em>rtn</em></strong>(double _data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstore_half_rte</strong>(double <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtz</strong>(double <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtp</strong>(double <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half_rtn</strong>(double <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>double</code> value given by <em>data</em> is first converted to a <code>half</code>
       value using the appropriate rounding mode.
       The <code>half</code> value is then written to the address computed as <code>(<em>p</em>
       +  <em>offset</em>)</code>.
-      The computed address must be 16-bit aligned.
-</p><p class="tableblock">      <strong>vstore_half</strong> uses the default rounding mode.
+      The computed address must be 16-bit aligned.</p>
+<p class="tableblock">      <strong>vstore_half</strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rte</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtz</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtp</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstore_half<em>n_rtn</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstore_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>double<em>n</em></code> value given by <em>data</em> is converted to a <code>half<em>n</em></code>
       value using the appropriate rounding mode.
       <code><em>n</em> * sizeof(half)</code> bytes from the <code>half<em>n</em></code> value are then written to
       the address computed as <code>(<em>p</em> +  (<em>offset</em> * <em>n</em>))</code>.
-      The computed address must be 16-bit aligned.
-</p><p class="tableblock">      <strong>vstore_half<em>n</em></strong> uses the default rounding mode.
+      The computed address must be 16-bit aligned.</p>
+<p class="tableblock">      <strong>vstore_half<em>n</em></strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 <tr>
@@ -7955,49 +7951,49 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float<em>n</em> <strong>vloada_half<em>n</em></strong>(size_t <em>offset</em>, const half *<em>p</em>)<br>
-  float<em>n</em> <strong>vloada_half<em>n</em></strong>(size_t <em>offset</em>, const constant half *<em>p</em>)</p></td>
+  float<em>n</em> <strong>vloada_half<em>n</em></strong>(size_t <em>offset</em>, const __constant half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">For n = 2, 4, 8 and 16, read <code>sizeof(half<em>n</em>)</code> bytes of data from
       the address computed as (<em>p</em> + (<em>offset</em> * <em>n</em>)).
       The data read is interpreted as a <code>half<em>n</em></code> value.
       The <code>half<em>n</em></code> value read is converted to a <code>float<em>n</em></code> value and
       the <code>float<em>n</em></code> value is returned.
-      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.
-</p><p class="tableblock">      For n = 3, <strong>vloada_half3</strong> reads a <code>half3</code> from the address computed as
+      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.</p>
+<p class="tableblock">      For n = 3, <strong>vloada_half3</strong> reads a <code>half3</code> from the address computed as
       <code>(<em>p</em> +  (<em>offset * 4</em>))</code> and returns a <code>float3</code>.
       The computed address must be aligned to <code>sizeof(half)</code> * 4 bytes.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstorea_half<em>n</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rte</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtz</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtp</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtn</em></strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstorea_half<em>n</em>_rte</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtz</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtp</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtn</strong>(float<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>float<em>n</em></code> value given by <em>data</em> is converted to a <code>half<em>n</em></code>
-      value using the appropriate rounding mode.
-</p><p class="tableblock">      For n = 2, 4, 8 and 16, the <code>half<em>n</em></code> value is written to the
+      value using the appropriate rounding mode.</p>
+<p class="tableblock">      For n = 2, 4, 8 and 16, the <code>half<em>n</em></code> value is written to the
       address computed as <code>(<em>p</em> +  (<em>offset</em> * <em>n</em>))</code>.
-      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.
-</p><p class="tableblock">      For n = 3, the <code>half3</code> value is written
+      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.</p>
+<p class="tableblock">      For n = 3, the <code>half3</code> value is written
       to the address computed as <code>(<em>p</em> +  (<em>offset</em> * 4))</code>.
-      The computed address must be aligned to <code>sizeof(half) * 4</code> bytes.
-</p><p class="tableblock">      <strong>vstorea_half<em>n</em></strong> uses the default rounding mode.
+      The computed address must be aligned to <code>sizeof(half) * 4</code> bytes.</p>
+<p class="tableblock">      <strong>vstorea_half<em>n</em></strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstorea_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rte</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtz</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtp</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
-  void <strong>vstorea_half<em>n_rtn</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
+  void <strong>vstorea_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, half *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>double<em>n</em></code> value is converted to a <code>half<em>n</em></code> value using the
-      appropriate rounding mode.
-</p><p class="tableblock">      For n = 2, 4, 8 or 16, the <code>half<em>n</em></code> value is written to the address
+      appropriate rounding mode.</p>
+<p class="tableblock">      For n = 2, 4, 8 or 16, the <code>half<em>n</em></code> value is written to the address
       computed as <code>(<em>p</em> +  (<em>offset</em> * <em>n</em>))</code>.
-      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.
-</p><p class="tableblock">      For n = 3, the <code>half3</code> value is written
+      The computed address must be aligned to <code>sizeof(half<em>n</em>)</code> bytes.</p>
+<p class="tableblock">      For n = 3, the <code>half3</code> value is written
       to the address computed as <code>(<em>p</em> +  (<em>offset</em> * 4))</code>.
-      The computed address must be aligned to <code>sizeof(half) * 4</code> bytes.
-</p><p class="tableblock">      <strong>vstorea_half<em>n</em></strong> uses the default rounding mode.
+      The computed address must be aligned to <code>sizeof(half) * 4</code> bytes.</p>
+<p class="tableblock">      <strong>vstorea_half<em>n</em></strong> uses the default rounding mode.
       The default rounding mode is round to nearest even.</p></td>
 </tr>
 </tbody>
@@ -8047,11 +8043,11 @@
 <p>The OpenCL C programming language implements the following synchronization
 functions.</p>
 </div>
-<table id="table-builtin-synchronization" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-synchronization" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 16. Built-in Synchronization Functions</caption>
 <colgroup>
-<col style="width: 50%;">
-<col style="width: 50%;">
+<col style="width: 30%;">
+<col style="width: 70%;">
 </colgroup>
 <thead>
 <tr>
@@ -8061,8 +8057,11 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>work_group_barrier</strong><sup>39</sup>(cl_mem_fence_flags <em>flags</em>)<br>
-  void <strong>work_group_barrier</strong>(cl_mem_fence_flags <em>flags</em>,
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>work_group_barrier</strong><sup>39</sup>(<br>
+  cl_mem_fence_flags <em>flags</em>)<br>
+  
+  void <strong>work_group_barrier</strong>(<br>
+  cl_mem_fence_flags <em>flags</em>,<br>
   memory_scope <em>scope</em><sup>40</sup>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">All work-items in a work-group executing the kernel on a processor
       must execute this function before any are allowed to continue
@@ -8070,22 +8069,22 @@
       This function must be encountered by all work-items in a work-group
       executing the kernel.
       These rules apply to ND-ranges implemented with uniform and
-      non-uniform work-groups.
-</p><p class="tableblock">      If <strong>work_group_barrier</strong> is inside a conditional statement, then all
+      non-uniform work-groups.</p>
+<p class="tableblock">      If <strong>work_group_barrier</strong> is inside a conditional statement, then all
       work-items must enter the conditional if any work-item enters the
-      conditional statement and executes the <strong>work_group_barrier</strong>.
-</p><p class="tableblock">      If <strong>work_group_barrier</strong> is inside a loop, all work-items must execute
+      conditional statement and executes the <strong>work_group_barrier</strong>.</p>
+<p class="tableblock">      If <strong>work_group_barrier</strong> is inside a loop, all work-items must execute
       the <strong>work_group_barrier</strong> for each iteration of the loop before any are
-      allowed to continue execution beyond the <strong>work_group_barrier</strong>.
-</p><p class="tableblock">      The <strong>work_group_barrier</strong> function also supports a variant that
+      allowed to continue execution beyond the <strong>work_group_barrier</strong>.</p>
+<p class="tableblock">      The <strong>work_group_barrier</strong> function also supports a variant that
       specifies the memory scope.
       For the <strong>work_group_barrier</strong> variant that does not take a memory
-      scope, the <em>scope</em> is <code>memory_scope_work_group</code>.
-</p><p class="tableblock">      The <em>scope</em> argument specifies whether the memory accesses of
+      scope, the <em>scope</em> is <code>memory_scope_work_group</code>.</p>
+<p class="tableblock">      The <em>scope</em> argument specifies whether the memory accesses of
       work-items in the work-group to memory address space(s) identified by
       <em>flags</em> become visible to all work-items in the work-group, the device
-      or all SVM devices.
-</p><p class="tableblock">      The <strong>work_group_barrier</strong> function can also be used to specify which
+      or all SVM devices.</p>
+<p class="tableblock">      The <strong>work_group_barrier</strong> function can also be used to specify which
       memory operations, i.e. to <code>global</code> memory, <code>local</code> memory or images
       become visible to the appropriate memory scope identified by <em>scope</em>.
       The <em>flags</em> argument specifies the memory address spaces.
@@ -8094,20 +8093,20 @@
       When these flags are OR&#8217;ed together the <strong>work_group_barrier</strong> acts as a
       combined barrier for all address spaces specified by the flags
       ordering memory accesses both within and across the specified address
-      spaces.
-</p><p class="tableblock">      <code>CLK_LOCAL_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function will ensure
+      spaces.</p>
+<p class="tableblock">      <code>CLK_LOCAL_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function will ensure
       that all local memory accesses become visible to all work-items in the
       work-group.
       Note that the value of <em>scope</em> is ignored as the memory scope is
-      always <code>memory_scope_work_group</code>.
-</p><p class="tableblock">      <code>CLK_GLOBAL_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function ensure that
+      always <code>memory_scope_work_group</code>.</p>
+<p class="tableblock">      <code>CLK_GLOBAL_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function ensure that
       all <code>global</code> memory accesses become visible to the appropriate scope
-      as given by <em>scope</em>.
-</p><p class="tableblock">      <code>CLK_IMAGE_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function will ensure
+      as given by <em>scope</em>.</p>
+<p class="tableblock">      <code>CLK_IMAGE_MEM_FENCE</code> - The <strong>work_group_barrier</strong> function will ensure
       that all image memory accesses become visible to the appropriate scope
       as given by <em>scope</em>.
-      The value of <em>scope</em> must be <code>memory_scope_work_group</code>.
-</p><p class="tableblock">      The values of <em>flags</em> and <em>scope</em> must be the same for all work-items
+      The value of <em>scope</em> must be <code>memory_scope_work_group</code>.</p>
+<p class="tableblock">      The values of <em>flags</em> and <em>scope</em> must be the same for all work-items
       in the work-group.</p></td>
 </tr>
 </tbody>
@@ -8128,7 +8127,7 @@
 We use the generic type name <code>gentype</code> to indicate any of the built-in data
 types supported by OpenCL C or a user defined type.</p>
 </div>
-<table id="table-builtin-address-qualifier" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-address-qualifier" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 17. Built-in Address Space Qualifier Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8188,7 +8187,7 @@
 3-component vector types behave as <strong>async_work_group_copy</strong> and
 <strong>async_work_group_strided_copy</strong> respectively for 4-component vector types.</p>
 </div>
-<table id="table-builtin-async-copy" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-async-copy" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 18. Built-in Async Copy and Prefetch Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8211,17 +8210,17 @@
       work-group executing the kernel with the same argument values;
       otherwise the results are undefined.
       This rule applies to ND-ranges implemented with uniform and
-      non-uniform work-groups.
-</p><p class="tableblock">      Returns an event object that can be used by <strong>wait_group_events</strong> to
+      non-uniform work-groups.</p>
+<p class="tableblock">      Returns an event object that can be used by <strong>wait_group_events</strong> to
       wait for the async copy to finish.
       The <em>event</em> argument can also be used to associate the
       <strong>async_work_group_copy</strong> with a previous async copy allowing an event
       to be shared by multiple async copies; otherwise <em>event</em> should be
-      zero.
-</p><p class="tableblock">      0 can be implicitly and explicitly cast to <code>event_t</code> type.
-</p><p class="tableblock">      If <em>event</em> argument is non-zero, the event object supplied in <em>event</em>
-      argument will be returned.
-</p><p class="tableblock">      This function does not perform any implicit synchronization of source
+      zero.</p>
+<p class="tableblock">      0 can be implicitly and explicitly cast to <code>event_t</code> type.</p>
+<p class="tableblock">      If <em>event</em> argument is non-zero, the event object supplied in <em>event</em>
+      argument will be returned.</p>
+<p class="tableblock">      This function does not perform any implicit synchronization of source
       data such as using a <strong>barrier</strong> before performing the copy.</p></td>
 </tr>
 <tr>
@@ -8246,19 +8245,19 @@
       in a work-group executing the kernel with the same argument values;
       otherwise the results are undefined.
       This rule applies to ND-ranges implemented with uniform and
-      non-uniform work-groups
-</p><p class="tableblock">      Returns an event object that can be used by <strong>wait_group_events</strong> to
+      non-uniform work-groups</p>
+<p class="tableblock">      Returns an event object that can be used by <strong>wait_group_events</strong> to
       wait for the async copy to finish.
       The <em>event</em> argument can also be used to associate the
       <strong>async_work_group_strided_copy</strong> with a previous async copy allowing an
       event to be shared by multiple async copies; otherwise <em>event</em> should
-      be zero.
-</p><p class="tableblock">      0 can be implicitly and explicitly cast to event_t type.
-</p><p class="tableblock">      If <em>event</em> argument is non-zero, the event object supplied in <em>event</em>
-      argument will be returned.
-</p><p class="tableblock">      This function does not perform any implicit synchronization of source
-      data such as using a <strong>barrier</strong> before performing the copy.
-</p><p class="tableblock">      The behavior of <strong>async_work_group_strided_copy</strong> is undefined if
+      be zero.</p>
+<p class="tableblock">      0 can be implicitly and explicitly cast to event_t type.</p>
+<p class="tableblock">      If <em>event</em> argument is non-zero, the event object supplied in <em>event</em>
+      argument will be returned.</p>
+<p class="tableblock">      This function does not perform any implicit synchronization of source
+      data such as using a <strong>barrier</strong> before performing the copy.</p>
+<p class="tableblock">      The behavior of <strong>async_work_group_strided_copy</strong> is undefined if
       <em>src_stride</em> or <em>dst_stride</em> is 0, or if the <em>src_stride</em> or
       <em>dst_stride</em> values cause the <em>src</em> or <em>dst</em> pointers to exceed the
       upper bounds of the address space during the copy.</p></td>
@@ -8272,8 +8271,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Wait for events that identify the <strong>async_work_group_copy</strong> operations
       to complete.
       The event objects specified in <em>event_list</em> will be released after the
-      wait is performed.
-</p><p class="tableblock">      This function must be encountered by all work-items in a work-group
+      wait is performed.</p>
+<p class="tableblock">      This function must be encountered by all work-items in a work-group
       executing the kernel with the same <em>num_events</em> and event objects
       specified in <em>event_list</em>; otherwise the results are undefined.
       This rule applies to ND-ranges implemented with uniform and
@@ -8700,7 +8699,7 @@
 This section specifies each general kind.</p>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_store_functions_strong"><strong>The atomic_store functions</strong></h6>
+<h6 id="_the_atomic_store_functions"><strong>The atomic_store functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span> atomic_store(<span class="directive">volatile</span> A *object, C desired)
@@ -8724,7 +8723,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_load_functions_strong"><strong>The atomic_load functions</strong></h6>
+<h6 id="_the_atomic_load_functions"><strong>The atomic_load functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c">C atomic_load(<span class="directive">volatile</span> A *object)
@@ -8745,7 +8744,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_exchange_functions_strong"><strong>The atomic_exchange functions</strong></h6>
+<h6 id="_the_atomic_exchange_functions"><strong>The atomic_exchange functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c">C atomic_exchange(<span class="directive">volatile</span> A *object, C desired)
@@ -8770,7 +8769,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_compare_exchange_functions_strong"><strong>The atomic_compare_exchange functions</strong></h6>
+<h6 id="_the_atomic_compare_exchange_functions"><strong>The atomic_compare_exchange functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c"><span class="predefined-type">bool</span> atomic_compare_exchange_strong(
@@ -8864,14 +8863,14 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_code_atomic_fetch_code_and_modify_functions_strong"><strong>The <code>atomic_fetch</code> and modify functions</strong></h6>
+<h6 id="_the_atomic_fetch_and_modify_functions"><strong>The <code>atomic_fetch</code> and modify functions</strong></h6>
 <div class="paragraph">
 <p>The following operations perform arithmetic and bitwise computations.
 All of these operations are applicable to an object of any atomic integer
 type.
 The key, operator, and computation correspondence is given in table below:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -8969,7 +8968,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_atomic_flag_type_and_operations_strong"><strong>Atomic flag type and operations</strong></h6>
+<h6 id="_atomic_flag_type_and_operations"><strong>Atomic flag type and operations</strong></h6>
 <div class="paragraph">
 <p>The atomic_flag type provides the classic test-and-set functionality.
 It has two states, <em>set</em> (value is non-zero) and <em>clear</em> (value is 0).
@@ -8995,7 +8994,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_flag_test_and_set_functions_strong"><strong>The atomic_flag_test_and_set functions</strong></h6>
+<h6 id="_the_atomic_flag_test_and_set_functions"><strong>The atomic_flag_test_and_set functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c"><span class="predefined-type">bool</span> atomic_flag_test_and_set(
@@ -9020,7 +9019,7 @@
 </div>
 </div>
 <div class="sect5">
-<h6 id="__strong_the_atomic_flag_clear_functions_strong"><strong>The atomic_flag_clear functions</strong></h6>
+<h6 id="_the_atomic_flag_clear_functions"><strong>The atomic_flag_clear functions</strong></h6>
 <div class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span> atomic_flag_clear(<span class="directive">volatile</span> atomic_flag *object)
@@ -9095,7 +9094,7 @@
 <div class="paragraph">
 <p>[50] Only if double precision is supported.</p>
 </div>
-<table id="table-misc-vector" class="tableblock frame-all grid-all spread">
+<table id="table-misc-vector" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 19. Built-in Miscellaneous Vector Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9122,11 +9121,11 @@
   int <strong>vec_step</strong>(<em>type</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <strong>vec_step</strong> built-in function takes a built-in scalar or vector
       data type argument and returns an integer value representing the
-      number of elements in the scalar or vector.
-</p><p class="tableblock">      For all scalar types, <strong>vec_step</strong> returns 1.
-</p><p class="tableblock">      The <strong>vec_step</strong> built-in functions that take a 3-component vector
-      return 4.
-</p><p class="tableblock">      <strong>vec_step</strong> may also take a pure type as an argument, e.g.
+      number of elements in the scalar or vector.</p>
+<p class="tableblock">      For all scalar types, <strong>vec_step</strong> returns 1.</p>
+<p class="tableblock">      The <strong>vec_step</strong> built-in functions that take a 3-component vector
+      return 4.</p>
+<p class="tableblock">      <strong>vec_step</strong> may also take a pure type as an argument, e.g.
       <strong>vec_step</strong>(float2)</p></td>
 </tr>
 <tr>
@@ -9135,7 +9134,7 @@
   gentype<em>n</em> <strong>shuffle2</strong>(gentype<em>m</em> <em>x</em>,
                            gentype<em>m</em> <em>y</em>,
                            ugentype<em>n</em> <em>mask</em>)</p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>The <strong>shuffle</strong> and <strong>shuffle2</strong> built-in functions construct a
       permutation of elements from one or two input vectors respectively
       that are of the same type, returning a vector with the same element
@@ -9201,7 +9200,7 @@
 <div class="paragraph">
 <p>The OpenCL C programming language implements the <strong>printf</strong> function.</p>
 </div>
-<table id="table-printf" class="tableblock frame-all grid-all spread">
+<table id="table-printf" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 20. Built-in printf Function</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9223,8 +9222,8 @@
       If the format is exhausted while arguments remain, the excess
       arguments are evaluated (as always) but are otherwise ignored.
       The <strong>printf</strong> function returns when the end of the format string is
-      encountered.
-</p><p class="tableblock">      <strong>printf</strong> returns 0 if it was executed successfully and -1 otherwise.</p></td>
+      encountered.</p>
+<p class="tableblock">      <strong>printf</strong> returns 0 if it was executed successfully and -1 otherwise.</p></td>
 </tr>
 </tbody>
 </table>
@@ -9779,7 +9778,7 @@
 <p>Sampler variables in a program are declared to be of type <code>sampler_t</code>.
 A variable of <code>sampler_t</code> type declared in the program source must be
 initialized with a 32-bit unsigned integer constant, which is interpreted as
-a bit-field specifiying the following properties:</p>
+a bit-field specifying the following properties:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -9832,7 +9831,7 @@
 <div class="paragraph">
 <p>The sampler fields are described in the following table.</p>
 </div>
-<table id="table-sampler-descriptor" class="tableblock frame-all grid-all spread">
+<table id="table-sampler-descriptor" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 21. Sampler Descriptor</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9848,9 +9847,9 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Specifies whether the <em>x</em>, <em>y</em> and <em>z</em> coordinates are passed in as
       normalized or unnormalized values.
       This must be a literal value and can be one of the following
-      predefined enums:
-</p><p class="tableblock">      <code>CLK_NORMALIZED_COORDS_TRUE</code> or <code>CLK_NORMALIZED_COORDS_FALSE</code>.
-</p><p class="tableblock">      The samplers used with an image in multiple calls to
+      predefined enums:</p>
+<p class="tableblock">      <code>CLK_NORMALIZED_COORDS_TRUE</code> or <code>CLK_NORMALIZED_COORDS_FALSE</code>.</p>
+<p class="tableblock">      The samplers used with an image in multiple calls to
       <strong>read_image{f|i|ui}</strong> declared in a kernel must use the same value
       for &lt;normalized coords&gt;.</p></td>
 </tr>
@@ -9859,26 +9858,26 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the image addressing mode, i.e. how out-of-range image
       coordinates are handled.
       This must be a literal value and can be one of the following
-      predefined enums:
-</p><p class="tableblock">      <code>CLK_ADDRESS_MIRRORED_REPEAT</code> - Flip the image coordinate at every
+      predefined enums:</p>
+<p class="tableblock">      <code>CLK_ADDRESS_MIRRORED_REPEAT</code> - Flip the image coordinate at every
       integer junction.
       This addressing mode can only be used with normalized coordinates.
       If normalized coordinates are not used, this addressing mode may
-      generate image coordinates that are undefined.
-</p><p class="tableblock">      <code>CLK_ADDRESS_REPEAT</code> - out-of-range image coordinates are wrapped to
+      generate image coordinates that are undefined.</p>
+<p class="tableblock">      <code>CLK_ADDRESS_REPEAT</code> - out-of-range image coordinates are wrapped to
       the valid range.
       This addressing mode can only be used with normalized coordinates.
       If normalized coordinates are not used, this addressing mode may
-      generate image coordinates that are undefined.
-</p><p class="tableblock">      <code>CLK_ADDRESS_CLAMP_TO_EDGE</code> - out-of-range image coordinates are
-      clamped to the extent.
-</p><p class="tableblock">      <code>CLK_ADDRESS_CLAMP</code><sup>57</sup> - out-of-range image coordinates will return a
-      border color.
-</p><p class="tableblock">      <code>CLK_ADDRESS_NONE</code> - for this addressing mode the programmer
+      generate image coordinates that are undefined.</p>
+<p class="tableblock">      <code>CLK_ADDRESS_CLAMP_TO_EDGE</code> - out-of-range image coordinates are
+      clamped to the extent.</p>
+<p class="tableblock">      <code>CLK_ADDRESS_CLAMP</code><sup>57</sup> - out-of-range image coordinates will return a
+      border color.</p>
+<p class="tableblock">      <code>CLK_ADDRESS_NONE</code> - for this addressing mode the programmer
       guarantees that the image coordinates used to sample elements of the
       image refer to a location inside the image; otherwise the results are
-      undefined.
-</p><p class="tableblock">      For 1D and 2D image arrays, the addressing mode applies only to the
+      undefined.</p>
+<p class="tableblock">      For 1D and 2D image arrays, the addressing mode applies only to the
       <em>x</em> and (<em>x, y</em>) coordinates.
       The addressing mode for the coordinate which specifies the array index
       is always <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>.</p></td>
@@ -9887,8 +9886,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>&lt;filter mode&gt;</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the filter mode to use.
       This must be a literal value and can be one of the following
-      predefined enums: <code>CLK_FILTER_NEAREST</code> or <code>CLK_FILTER_LINEAR</code>.
-</p><p class="tableblock">      Refer to the <a href="#addressing-and-filter-modes">detailed description of
+      predefined enums: <code>CLK_FILTER_NEAREST</code> or <code>CLK_FILTER_LINEAR</code>.</p>
+<p class="tableblock">      Refer to the <a href="#addressing-and-filter-modes">detailed description of
       these filter modes</a>.</p></td>
 </tr>
 </tbody>
@@ -9972,7 +9971,7 @@
 <p>[58] The built-in function calls to read images with a sampler are not
 supported for <code>image1d_buffer_t</code> image types.</p>
 </div>
-<table id="table-image-read" class="tableblock frame-all grid-all spread">
+<table id="table-image-read" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 22. Built-in Image Read Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9989,22 +9988,22 @@
   float4 <strong>read_imagef</strong>(read_only image2d_t <em>image</em>, sampler_t <em>sampler</em>,
   float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      the 2D image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10022,28 +10021,28 @@
   uint4 <strong>read_imageui</strong>(read_only image2d_t <em>image</em>, sampler_t <em>sampler</em>,
   float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      the 2D image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively.
-      Each channel will be stored in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      Each channel will be stored in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imageui</strong> are undefined.
-</p><p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imageui</strong> are undefined.</p>
+<p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
       The filter_mode specified in <em>sampler</em> must be set to
-      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
+      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
       coordinates must use a sampler with normalized coordinates set to
       <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode set to
       <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
@@ -10060,22 +10059,22 @@
   float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>, <em>coord.z</em>) to do an element
       lookup in the 3D image object specified by <em>image</em>.
-      <em>coord.w</em> is ignored.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.w</em> is ignored.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description are
       undefined.</p></td>
 </tr>
@@ -10094,28 +10093,28 @@
   float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>, <em>coord.z</em>) to do an element
       lookup in the 3D image object specified by <em>image</em>.
-      <em>coord.w</em> is ignored.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.w</em> is ignored.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively.
-      Each channel will be stored in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      Each channel will be stored in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imageui</strong> are undefined.
-</p><p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imageui</strong> are undefined.</p>
+<p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
       The filter_mode specified in <em>sampler</em> must be set to
-      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
+      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
       coordinates must use a sampler with normalized coordinates set to
       <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode set to
       <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
@@ -10131,22 +10130,22 @@
   float4 <strong>read_imagef</strong>(read_only image2d_array_t <em>image</em>,
   sampler_t <em>sampler</em>, float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with image_channel_data_type set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with image_channel_data_type set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with image_channel_data_type set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with image_channel_data_type set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       image_channel_data_type values not specified in the description above
       are undefined.</p></td>
 </tr>
@@ -10160,28 +10159,28 @@
   uint4 <strong>read_imageui</strong>(read_only image2d_array_t <em>image</em>,
   sampler_t <em>sampler</em>, float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively.
-      Each channel will be stored in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      Each channel will be stored in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imageui</strong> are undefined.
-</p><p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imageui</strong> are undefined.</p>
+<p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
       The filter_mode specified in <em>sampler</em> must be set to
-      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
+      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
       coordinates must use a sampler with normalized coordinates set to
       <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode set to
       <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
@@ -10197,22 +10196,22 @@
   float4 <strong>read_imagef</strong>(read_only image1d_t <em>image</em>, sampler_t <em>sampler</em>,
   float <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image object specified
-      by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10230,28 +10229,28 @@
   uint4 <strong>read_imageui</strong>(read_only image1d_t <em>image</em>, sampler_t <em>sampler</em>,
   float <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image object specified
-      by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively.
-      Each channel will be stored in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      Each channel will be stored in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imageui</strong> are undefined.
-</p><p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imageui</strong> are undefined.</p>
+<p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
       The filter_mode specified in <em>sampler</em> must be set to
-      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
+      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
       coordinates must use a sampler with normalized coordinates set to
       <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode set to
       <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
@@ -10267,22 +10266,22 @@
   float4 <strong>read_imagef</strong>(read_only image1d_array_t <em>image</em>,
   sampler_t <em>sampler</em>, float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 1D image identified by
-      <em>coord.y</em> in the 1D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.y</em> in the 1D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with image_channel_data_type set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with image_channel_data_type set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with image_channel_data_type set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with image_channel_data_type set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       image_channel_data_type values not specified in the description above
       are undefined.</p></td>
 </tr>
@@ -10296,28 +10295,28 @@
   uint4 <strong>read_imageui</strong>(read_only image1d_array_t <em>image</em>,
   sampler_t <em>sampler</em>, float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 1D image identified by
-      <em>coord.y</em> in the 1D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.y</em> in the 1D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively. Each channel will be stored
-      in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imageui</strong> are undefined.
-</p><p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imageui</strong> are undefined.</p>
+<p class="tableblock">      The <strong>read_image{i|ui}</strong> calls support a nearest filter only.
       The filter_mode specified in <em>sampler</em> must be set to
-      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
+      <code>CLK_FILTER_NEAREST</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Furthermore, the <strong>read_image{i|ui}</strong> calls that take integer
       coordinates must use a sampler with normalized coordinates set to
       <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode set to
       <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
@@ -10333,18 +10332,18 @@
   float <strong>read_imagef</strong>(read_only image2d_depth_t <em>image</em>,
   sampler_t <em>sampler</em>, float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D depth image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
+      the 2D depth image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
       for depth image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
-      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
+      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for depth image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for depth image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10358,18 +10357,18 @@
   float <strong>read_imagef</strong>(read_only image2d_array_depth_t <em>image</em>,
   sampler_t <em>sampler</em>, float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D depth image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
+      <em>coord.z</em> in the 2D depth image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
       for depth image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
-      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.
-</p><p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
+      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
+      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      The <strong>read_imagef</strong> calls that take integer coordinates must use a
       sampler with filter mode set to <code>CLK_FILTER_NEAREST</code>, normalized
       coordinates set to <code>CLK_NORMALIZED_COORDS_FALSE</code> and addressing mode
       set to <code>CLK_ADDRESS_CLAMP_TO_EDGE</code>, <code>CLK_ADDRESS_CLAMP</code> or
-      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CLK_ADDRESS_NONE</code>; otherwise the values returned are undefined.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10399,7 +10398,7 @@
 <p><em>aQual</em> in the following table refers to one of the access qualifiers.
 For samplerless read functions this may be <code>read_only</code> or <code>read_write</code>.</p>
 </div>
-<table id="table-image-samplerless-read" class="tableblock frame-all grid-all spread">
+<table id="table-image-samplerless-read" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 23. Built-in Image Sampler-less Read Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10413,17 +10412,17 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float4 <strong>read_imagef</strong>(<em>aQual</em> image2d_t <em>image</em>, int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      the 2D image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10435,23 +10434,23 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">int4 <strong>read_imagei</strong>(<em>aQual</em> image2d_t <em>image</em>, int2 <em>coord</em>)<br>
   uint4 <strong>read_imageui</strong>(<em>aQual</em> image2d_t <em>image</em>, int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      the 2D image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively. Each channel will be stored
-      in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
       values returned by <strong>read_imageui</strong> are undefined.</p></td>
 </tr>
 <tr>
@@ -10462,17 +10461,17 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">float4 <strong>read_imagef</strong>(<em>aQual</em> image3d_t <em>image</em>, int4 <em>coord</em> )</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>, <em>coord.z</em>) to do an element
       lookup in the 3D image object specified by <em>image</em>.
-      <em>coord.w</em> is ignored.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.w</em> is ignored.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description are
       undefined.</p></td>
 </tr>
@@ -10485,23 +10484,23 @@
   uint4 <strong>read_imageui</strong>(<em>aQual</em> image3d_t <em>image</em>, int4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>, <em>coord.z</em>) to do an element
       lookup in the 3D image object specified by <em>image</em>.
-      <em>coord.w</em> is ignored.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.w</em> is ignored.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively.
-      Each channel will be stored in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      Each channel will be stored in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
       values returned by <strong>read_imageui</strong> are undefined.</p></td>
 </tr>
 <tr>
@@ -10511,17 +10510,17 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float4 <strong>read_imagef</strong>(<em>aQual</em> image2d_array_t <em>image</em>, int4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10533,23 +10532,23 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">int4 <strong>read_imagei</strong>(<em>aQual</em> image2d_array_t <em>image</em>, int4 <em>coord</em>)<br>
   uint4 <strong>read_imageui</strong>(<em>aQual</em> image2d_array_t <em>image</em>, int4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively. Each channel will be stored
-      in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
       values returned by <strong>read_imageui</strong> are undefined.</p></td>
 </tr>
 <tr>
@@ -10560,17 +10559,17 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">float4 <strong>read_imagef</strong>(<em>aQual</em> image1d_t <em>image</em>, int <em>coord</em>)<br>
   float4 <strong>read_imagef</strong>(<em>aQual</em> image1d_buffer_t <em>image</em>, int <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image or 1D image buffer
-      object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10584,23 +10583,23 @@
   int4 <strong>read_imagei</strong>(<em>aQual</em> image1d_buffer_t <em>image</em>, int <em>coord</em>)<br>
   uint4 <strong>read_imageui</strong>(<em>aQual</em> image1d_buffer_t <em>image</em>, int <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image or 1D image buffer
-      object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively. Each channel will be stored
-      in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
       values returned by <strong>read_imageui</strong> are undefined.</p></td>
 </tr>
 <tr>
@@ -10610,17 +10609,17 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float4 <strong>read_imagef</strong>(<em>aQual</em> image1d_array_t <em>image</em>, int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 1D image identified by
-      <em>coord.y</em> in the 1D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
+      <em>coord.y</em> in the 1D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [0.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to one of
       the pre-defined packed formats or <code>CL_UNORM_INT8</code>, or
-      <code>CL_UNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
+      <code>CL_UNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values in the range [-1.0, 1.0]
       for image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
-      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_SNORM_INT8</code>, or <code>CL_SNORM_INT16</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns floating-point values for image objects created
+      with <em>image_channel_data_type</em> set to <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10632,23 +10631,23 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">int4 <strong>read_imagei</strong>(<em>aQual</em> image1d_array_t <em>image</em>, int2 <em>coord</em>)<br>
   uint4 <strong>read_imageui</strong>(<em>aQual</em> image1d_array_t <em>image</em>, int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 1D image identified by
-      <em>coord.y</em> in the 1D image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
+      <em>coord.y</em> in the 1D image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagei</strong> and <strong>read_imageui</strong> return unnormalized signed integer
       and unsigned integer values respectively. Each channel will be stored
-      in a 32-bit integer.
-</p><p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      in a 32-bit integer.</p>
+<p class="tableblock">      <strong>read_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
-      values returned by <strong>read_imagei</strong> are undefined.
-</p><p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      values returned by <strong>read_imagei</strong> are undefined.</p>
+<p class="tableblock">      <strong>read_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      If the <em>image_channel_data_type</em> is not one of the above values, the
       values returned by <strong>read_imageui</strong> are undefined.</p></td>
 </tr>
 <tr>
@@ -10658,13 +10657,13 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float <strong>read_imagef</strong>(<em>aQual</em> image2d_depth_t <em>image</em>, int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate (<em>coord.x</em>, <em>coord.y</em>) to do an element lookup in
-      the 2D depth image object specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
+      the 2D depth image object specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
       for depth image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
-      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
+      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10675,13 +10674,13 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">float <strong>read_imagef</strong>(<em>aQual</em> image2d_array_depth_t <em>image</em>, int4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-      <em>coord.z</em> in the 2D depth image array specified by <em>image</em>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
+      <em>coord.z</em> in the 2D depth image array specified by <em>image</em>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value in the range [0.0, 1.0]
       for depth image objects created with <em>image_channel_data_type</em> set to
-      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.
-</p><p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
-      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.
-</p><p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
+      <code>CL_UNORM_INT16</code> or <code>CL_UNORM_INT24</code>.</p>
+<p class="tableblock">      <strong>read_imagef</strong> returns a floating-point value for depth image objects
+      created with <em>image_channel_data_type</em> set to <code>CL_FLOAT</code>.</p>
+<p class="tableblock">      Values returned by <strong>read_imagef</strong> for image objects with
       <em>image_channel_data_type</em> values not specified in the description
       above are undefined.</p></td>
 </tr>
@@ -10704,7 +10703,7 @@
 <p><em>aQual</em> in the following table refers to one of the access qualifiers.
 For write functions this may be <code>write_only</code> or <code>read_write</code>.</p>
 </div>
-<table id="table-image-write" class="tableblock frame-all grid-all spread">
+<table id="table-image-write" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 24. Built-in Image Write Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10725,25 +10724,25 @@
       done before writing the color value.
       <em>coord.x</em> and <em>coord.y</em> are considered to be unnormalized coordinates,
       and must be in the range [0, image width-1] and [0, image height-1]
-      respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to one of the pre-defined packed formats
       or set to <code>CL_SNORM_INT8</code>, <code>CL_UNORM_INT8</code>, <code>CL_SNORM_INT16</code>,
       <code>CL_UNORM_INT16</code>, <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert channel
       data from a floating-point value to actual data format in which the
-      channels are stored.
-</p><p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      channels are stored.</p>
+<p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above or with <em>x</em> and <em>y</em> coordinate
       values that are not in the range [0, image width-1] and [0, image
@@ -10767,25 +10766,25 @@
       done before writing the color value.
       <em>coord.x</em>, <em>coord.y</em> and <em>coord.z</em> are considered to be unnormalized
       coordinates, and must be in the range [0, image width-1] and [0, image
-      height-1], and [0, image number of layers-1], respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      height-1], and [0, image number of layers-1], respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to one of the pre-defined packed formats
       or set to <code>CL_SNORM_INT8</code>, <code>CL_UNORM_INT8</code>, <code>CL_SNORM_INT16</code>,
       <code>CL_UNORM_INT16</code>, <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert channel
       data from a floating-point value to actual data format in which the
-      channels are stored.
-</p><p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      channels are stored.</p>
+<p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above or with (<em>x</em>, <em>y</em>, <em>z</em>) coordinate
       values that are not in the range [0, image width-1], [0, image
@@ -10814,25 +10813,25 @@
       Appropriate data format conversion to the specified image format is
       done before writing the color value.
       <em>coord</em> is considered to be an unnormalized coordinate, and must be in
-      the range [0, image width-1].
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      the range [0, image width-1].</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to one of the pre-defined packed formats
       or set to <code>CL_SNORM_INT8</code>, <code>CL_UNORM_INT8</code>, <code>CL_SNORM_INT16</code>,
       <code>CL_UNORM_INT16</code>, <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert channel
       data from a floating-point value to actual data format in which the
-      channels are stored.
-</p><p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      channels are stored.</p>
+<p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above, or with a coordinate value that is
       not in the range [0, image width-1], is undefined.</p></td>
@@ -10854,25 +10853,25 @@
       done before writing the color value.
       <em>coord.x</em> and <em>coord.y</em> are considered to be unnormalized coordinates
       and must be in the range [0, image width-1] and [0, image number of
-      layers-1], respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      layers-1], respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to one of the pre-defined packed formats
       or set to <code>CL_SNORM_INT8</code>, <code>CL_UNORM_INT8</code>, <code>CL_SNORM_INT16</code>,
       <code>CL_UNORM_INT16</code>, <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert channel
       data from a floating-point value to actual data format in which the
-      channels are stored.
-</p><p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      channels are stored.</p>
+<p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
-      <em>image_channel_data_type</em> set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
+      <em>image_channel_data_type</em> set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above or with (<em>x</em>, <em>y</em>) coordinate
       values that are not in the range [0, image width-1] and [0, image
@@ -10891,14 +10890,14 @@
       done before writing the depth value.
       <em>coord.x</em> and <em>coord.y</em> are considered to be unnormalized coordinates,
       and must be in the range [0, image width-1], and [0, image height-1],
-      respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to <code>CL_UNORM_INT16</code>, <code>CL_UNORM_INT24</code> or
       <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert depth valye
       from a floating-point value to actual data format associated with the
-      image.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      image.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above or with (<em>x</em>, <em>y</em>) coordinate
       values that are not in the range [0, image width-1] and [0, image
@@ -10918,14 +10917,14 @@
       done before writing the depth value.
       <em>coord.x</em>, <em>coord.y</em> and <em>coord.z</em> are considered to be unnormalized
       coordinates, and must be in the range [0, image width-1], [0, image
-      height-1], and [0, image number of layers-1], respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      height-1], and [0, image number of layers-1], respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       <em>image_channel_data_type</em> set to <code>CL_UNORM_INT16</code>, <code>CL_UNORM_INT24</code> or
       <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert depth valye
       from a floating-point value to actual data format associated with the
-      image.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      image.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects created with <em>image_channel_data_type</em> values not
       specified in the description above or with (<em>x</em>, <em>y</em>, <em>z</em>) coordinate
       values that are not in the range [0, image width-1], [0, image
@@ -10948,25 +10947,25 @@
       done before writing the color value.
       <em>coord.x</em>, <em>coord.y</em> and <em>coord.z</em> are considered to be unnormalized
       coordinates, and must be in the range [0, image width-1], [0, image
-      height-1], and [0, image depth-1], respectively.
-</p><p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
+      height-1], and [0, image depth-1], respectively.</p>
+<p class="tableblock">      <strong>write_imagef</strong> can only be used with image objects created with
       image_channel_data_type set to one of the pre-defined packed formats
       or set to <code>CL_SNORM_INT8</code>, <code>CL_UNORM_INT8</code>, <code>CL_SNORM_INT16</code>,
       <code>CL_UNORM_INT16</code>, <code>CL_HALF_FLOAT</code> or <code>CL_FLOAT</code>.
       Appropriate data format conversion will be done to convert channel
       data from a floating-point value to actual data format in which the
-      channels are stored.
-</p><p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
-      image_channel_data_type set to one of the following values:
-</p><p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
+      channels are stored.</p>
+<p class="tableblock">      <strong>write_imagei</strong> can only be used with image objects created with
+      image_channel_data_type set to one of the following values:</p>
+<p class="tableblock">      <code>CL_SIGNED_INT8</code>,<br>
       <code>CL_SIGNED_INT16</code> and<br>
-      <code>CL_SIGNED_INT32</code>.
-</p><p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
-      image_channel_data_type set to one of the following values:
-</p><p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
+      <code>CL_SIGNED_INT32</code>.</p>
+<p class="tableblock">      <strong>write_imageui</strong> can only be used with image objects created with
+      image_channel_data_type set to one of the following values:</p>
+<p class="tableblock">      <code>CL_UNSIGNED_INT8</code>,<br>
       <code>CL_UNSIGNED_INT16</code> and<br>
-      <code>CL_UNSIGNED_INT32</code>.
-</p><p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
+      <code>CL_UNSIGNED_INT32</code>.</p>
+<p class="tableblock">      The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong> and <strong>write_imageui</strong> for
       image objects with <em>image_channel_data_type</em> values not specified in
       the description above or with (<em>x</em>, <em>y</em>, <em>z</em>) coordinate values that
       are not in the range [0, image width-1], [0, image height-1], and [0,
@@ -10985,7 +10984,7 @@
 <p><em>aQual</em> in the following table refers to one of the access qualifiers.
 For query functions this may be <code>read_only</code>, <code>write_only</code> or <code>read_write</code>.</p>
 </div>
-<table id="table-image-query" class="tableblock frame-all grid-all spread">
+<table id="table-image-query" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 25. Built-in Image Query Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11032,8 +11031,8 @@
   int <strong>get_image_channel_data_type</strong>(<em>aQual</em> image2d_array_t <em>image</em>)<br>
   int <strong>get_image_channel_data_type</strong>(<em>aQual</em> image2d_depth_t <em>image</em>)<br>
   int <strong>get_image_channel_data_type</strong>(<em>aQual</em> image2d_array_depth_t <em>image</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Return the channel data type. Valid values are:
-</p><p class="tableblock">      <code>CLK_SNORM_INT8</code><br>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return the channel data type. Valid values are:</p>
+<p class="tableblock">      <code>CLK_SNORM_INT8</code><br>
       <code>CLK_SNORM_INT16</code><br>
       <code>CLK_UNORM_INT8</code><br>
       <code>CLK_UNORM_INT16</code><br>
@@ -11058,8 +11057,8 @@
   int <strong>get_image_channel_order</strong>(<em>aQual</em> image2d_array_t <em>image</em>)<br>
   int <strong>get_image_channel_order</strong>(<em>aQual</em> image2d_depth_t <em>image</em>)<br>
   int <strong>get_image_channel_order</strong>(<em>aQual</em> image2d_array_depth_t <em>image</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Return the image channel order. Valid values are:
-</p><p class="tableblock">      <code>CLK_A</code><br>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return the image channel order. Valid values are:</p>
+<p class="tableblock">      <code>CLK_A</code><br>
       <code>CLK_R</code><br>
       <code>CLK_Rx</code><br>
       <code>CLK_RG</code><br>
@@ -11176,7 +11175,7 @@
 The unmapped components will be set to 0.0 for red, green and blue channels
 and will be set to 1.0 for the alpha channel.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -11268,7 +11267,7 @@
 <div class="paragraph">
 <p>[60] Only if double precision is supported.</p>
 </div>
-<table id="table-builtin-work-group" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-work-group" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 26. Built-in Work-group Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11293,13 +11292,13 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>work_group_broadcast</strong>(gentype <em>a</em>, size_t <em>local_id</em>)<br>
-  gentype <strong>work_group_broadcast</strong>(gentype <em>a</em>, size_t <em>local_id<em>x,
-  size_t _local_id_y</em>)<br>
-  gentype <strong>work_group_broadcast</strong>(gentype <em>a</em>, size_t <em>local_id</em>x,
-  size_t _local_id__y, size_t _local_id_z</em>)</p></td>
+  gentype <strong>work_group_broadcast</strong>(gentype <em>a</em>, size_t <em>local_id_x</em>,
+  size_t <em>local_id_y</em>)<br>
+  gentype <strong>work_group_broadcast</strong>(gentype <em>a</em>, size_t <em>local_id_x</em>,
+  size_t <em>local_id_y</em>, size_t <em>local_id_z</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Broadcast the value of <em>x</em> for work-item identified by <em>local_id</em> to
-      all work-items in the work-group.
-</p><p class="tableblock">      <em>local_id</em> must be the same value for all work-items in the
+      all work-items in the work-group.</p>
+<p class="tableblock">      <em>local_id</em> must be the same value for all work-items in the
       work-group.</p></td>
 </tr>
 <tr>
@@ -11311,16 +11310,16 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>work_group_scan_exclusive_&lt;op&gt;</strong>(gentype <em>x</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Do an exclusive scan operation specified by <strong>&lt;op&gt;</strong> of all values
       specified by work-items in the work-group. The scan results are
-      returned for each work-item.
-</p><p class="tableblock">      The scan order is defined by increasing 1D linear global ID within the
+      returned for each work-item.</p>
+<p class="tableblock">      The scan order is defined by increasing 1D linear global ID within the
       work-group.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>work_group_scan_inclusive_&lt;op&gt;</strong>(gentype <em>x</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Do an inclusive scan operation specified by <strong>&lt;op&gt;</strong> of all values
       specified by work-items in the work-group. The scan results are
-      returned for each work-item.
-</p><p class="tableblock">      The scan order is defined by increasing 1D linear global ID within the
+      returned for each work-item.</p>
+<p class="tableblock">      The scan order is defined by increasing 1D linear global ID within the
       work-group.</p></td>
 </tr>
 </tbody>
@@ -11478,7 +11477,7 @@
 The <code>double</code> scalar and vector types can only be used if <code>double</code> precision
 is supported.</p>
 </div>
-<table id="table-builtin-pipe" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-pipe" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 27. Built-in Pipe Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11509,19 +11508,19 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>read_pipe</strong>(read_only pipe gentype <em>p</em>, reserve_id_t <em>reserve_id</em>,
   uint <em>index</em>, gentype *<em>ptr</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Read packet from the reserved area of the pipe referred to by
-      <em>reserve_id</em> and <em>index</em> into <em>ptr</em>.
-</p><p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
-      &#8230;&#8203; <em>num_packets</em> - 1.
-</p><p class="tableblock">      Returns 0 if <strong>read_pipe</strong> is successful and a negative value otherwise.</p></td>
+      <em>reserve_id</em> and <em>index</em> into <em>ptr</em>.</p>
+<p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
+      &#8230;&#8203; <em>num_packets</em> - 1.</p>
+<p class="tableblock">      Returns 0 if <strong>read_pipe</strong> is successful and a negative value otherwise.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>write_pipe</strong>(write_only pipe gentype <em>p</em>, reserve_id_t
   <em>reserve_id</em>, uint <em>index</em>, const gentype *<em>ptr</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Write packet specified by <em>ptr</em> to the reserved area of the pipe
-      referred to by <em>reserve_id</em> and <em>index</em>.
-</p><p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
-      &#8230;&#8203; <em>num_packets</em> - 1.
-</p><p class="tableblock">      Returns 0 if <strong>write_pipe</strong> is successful and a negative value
+      referred to by <em>reserve_id</em> and <em>index</em>.</p>
+<p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
+      &#8230;&#8203; <em>num_packets</em> - 1.</p>
+<p class="tableblock">      Returns 0 if <strong>write_pipe</strong> is successful and a negative value
       otherwise.</p></td>
 </tr>
 <tr>
@@ -11571,7 +11570,7 @@
 The <code>double</code> scalar and vector types can only be used if <code>double</code> precision
 is supported.</p>
 </div>
-<table id="table-builtin-pipe-work-group" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-pipe-work-group" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 28. Built-in Pipe Work-group Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11588,8 +11587,8 @@
   reserve_id_t <strong>work_group_reserve_write_pipe</strong>(write_only pipe gentype <em>p</em>,
   uint <em>num_packets</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Reserve <em>num_packets</em> entries for reading from or writing to pipe <em>p</em>.
-      Returns a valid reservation ID if the reservation is successful.
-</p><p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
+      Returns a valid reservation ID if the reservation is successful.</p>
+<p class="tableblock">      The reserved pipe entries are referred to by indices that go from 0
       &#8230;&#8203; <em>num_packets</em> - 1.</p></td>
 </tr>
 <tr>
@@ -11667,7 +11666,7 @@
 <p><em>aQual</em> in the following table refers to one of the access qualifiers.
 For pipe query functions this may be <code>read_only</code> or <code>write_only</code>.</p>
 </div>
-<table id="table-builtin-pipe-query" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-pipe-query" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 29. Built-in Pipe Query Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11763,7 +11762,7 @@
 </div>
 <div class="sect4">
 <h5 id="built-in-functions-enqueuing-a-kernel">Built-in Functions - Enqueuing a kernel</h5>
-<table id="table-builtin-kernel-enqueue" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-kernel-enqueue" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 30. Built-in Kernel Enqueue Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -11790,8 +11789,8 @@
   const ndrange_t <em>ndrange</em>, uint <em>num_events_in_wait_list</em>,
   const clk_event_t *<em>event_wait_list</em>, clk_event_t *<em>event_ret</em>,
   void (^<em>block</em>)(local void *, &#8230;&#8203;), uint size0, &#8230;&#8203;)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Enqueue the block for execution to <em>queue</em>.
-</p><p class="tableblock">      If an event is returned, <strong>enqueue_kernel</strong> performs an implicit retain
+<td class="tableblock halign-left valign-top"><p class="tableblock">Enqueue the block for execution to <em>queue</em>.</p>
+<p class="tableblock">      If an event is returned, <strong>enqueue_kernel</strong> performs an implicit retain
       on the returned event.</p></td>
 </tr>
 </tbody>
@@ -12108,7 +12107,7 @@
 Implementations may not schedule kernel launch earlier than the point
 specified by this flag, however.</p>
 </div>
-<table id="table-kernel-enqueue-flags" class="tableblock frame-all grid-all spread">
+<table id="table-kernel-enqueue-flags" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 31. Kernel Enqueue Flags</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12193,7 +12192,7 @@
 </div>
 <div class="sect4">
 <h5 id="built-in-functions-kernel-query-functions">Built-in Functions - Kernel Query Functions</h5>
-<table id="table-builtin-kernel-query" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-kernel-query" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 32. Built-in Kernel Query Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12208,8 +12207,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>get_kernel_work_group_size</strong>(void (^block)(void))<br>
   uint <strong>get_kernel_work_group_size</strong>(void (^block)(local void *, &#8230;&#8203;))</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">This provides a mechanism to query the maximum work-group size that
-      can be used to execute a block on a specific device given by <em>device</em>.
-</p><p class="tableblock">      <em>block</em> specifies the block to be enqueued.</p></td>
+      can be used to execute a block on a specific device given by <em>device</em>.</p>
+<p class="tableblock">      <em>block</em> specifies the block to be enqueued.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">uint <strong>get_kernel_preferred_</strong> <strong>work_group_size_multiple</strong>(
@@ -12232,7 +12231,7 @@
 <p>The following table describes the list of built-in functions that can be
 used to enqueue commands such as a marker.</p>
 </div>
-<table id="table-builtin-other-enqueue" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-other-enqueue" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 33. Built-in Other Enqueue Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12246,11 +12245,11 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>enqueue_marker</strong>(queue_t <em>queue</em>, uint <em>num_events_in_wait_list</em>,
   const clk_event_t *<em>event_wait_list</em>, clk_event_t *<em>event_ret</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Enqueue a marker command to <em>queue</em>.
-</p><p class="tableblock">      The marker command waits for a list of events specified by
-      <em>event_wait_list</em> to complete before the marker completes.
-</p><p class="tableblock">      <em>event_ret</em> must not be <code>NULL</code> as otherwise this is a no-op.
-</p><p class="tableblock">      If an event is returned, <strong>enqueue_marker</strong> performs an implicit retain
+<td class="tableblock halign-left valign-top"><p class="tableblock">Enqueue a marker command to <em>queue</em>.</p>
+<p class="tableblock">      The marker command waits for a list of events specified by
+      <em>event_wait_list</em> to complete before the marker completes.</p>
+<p class="tableblock">      <em>event_ret</em> must not be <code>NULL</code> as otherwise this is a no-op.</p>
+<p class="tableblock">      If an event is returned, <strong>enqueue_marker</strong> performs an implicit retain
       on the returned event.</p></td>
 </tr>
 </tbody>
@@ -12294,7 +12293,7 @@
 <p>The following table describes the list of built-in functions that work on
 events.</p>
 </div>
-<table id="table-builtin-event" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-event" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 34. Built-in Event Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12318,8 +12317,8 @@
       The event object is deleted once the event reference count is zero,
       the specific command identified by this event has completed (or
       terminated) and there are no commands in any device command queue that
-      require a wait for this event to complete.
-</p><p class="tableblock">      <em>event</em> must be an event returned by enqueue_kernel, enqueue_marker or
+      require a wait for this event to complete.</p>
+<p class="tableblock">      <em>event</em> must be an event returned by enqueue_kernel, enqueue_marker or
       a user event.</p></td>
 </tr>
 <tr>
@@ -12357,17 +12356,17 @@
       The specific function being referred to is: enqueue_kernel.
       These enqueued commands are identified by unique event objects.
       The profiling information will be available in <em>value</em> once the
-      command identified by <em>event</em> has completed.&#8201;&#8212;&#8201;<em>event</em> must be an event returned by enqueue_kernel.
-</p><p class="tableblock"><em>name</em> identifies which profiling information is to be queried and can be:
-</p><p class="tableblock">  <code>CLK_PROFILING_COMMAND_EXEC_TIME</code>
-</p><p class="tableblock"><em>value</em> is a pointer to two 64-bit values.
-</p><p class="tableblock">The first 64-bit value describes the elapsed time <code>CL_PROFILING_COMMAND_END</code>
+      command identified by <em>event</em> has completed.&#8201;&#8212;&#8201;<em>event</em> must be an event returned by enqueue_kernel.</p>
+<p class="tableblock"><em>name</em> identifies which profiling information is to be queried and can be:</p>
+<p class="tableblock">  <code>CLK_PROFILING_COMMAND_EXEC_TIME</code></p>
+<p class="tableblock"><em>value</em> is a pointer to two 64-bit values.</p>
+<p class="tableblock">The first 64-bit value describes the elapsed time <code>CL_PROFILING_COMMAND_END</code>
 - <code>CL_PROFLING_COMMAND_START</code> for the command identified by <em>event</em> in
-nanoseconds.
-</p><p class="tableblock">The second 64-bit value describes the elapsed time
+nanoseconds.</p>
+<p class="tableblock">The second 64-bit value describes the elapsed time
 <code>CL_PROFILING_COMMAND_COMPLETE</code> - <code>CL_PROFILING_COMAMND_START</code> for the
-command identified by <em>event</em> in nanoseconds.
-</p><p class="tableblock">[NOTE]
+command identified by <em>event</em> in nanoseconds.</p>
+<p class="tableblock">[NOTE]
 ====
 The behavior of capture_event_profiling_info when called multiple times for
 the same <em>event</em> is undefined.
@@ -12487,7 +12486,7 @@
 </div>
 <div class="sect4">
 <h5 id="built-in-functions-helper-functions">Built-in Functions - Helper Functions</h5>
-<table id="table-builtin-helper" class="tableblock frame-all grid-all spread">
+<table id="table-builtin-helper" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 35. Built-in Helper Functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -12665,9 +12664,16 @@
 </div>
 <div class="paragraph">
 <p><em>Attribution: This definition was taken with consent from Jean-Michel Muller
-with slight clarification for behavior at zero.
-Refer to
-<a href="ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-5504.pdf">_ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-5504.pdf</em></a>._</p>
+with slight clarification for behavior at zero.</em></p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>Jean-Michel Muller. On the definition of ulp(x). RR-5504, INRIA. 2005, pp.16. &lt;inria-00070503&gt;
+Currently hosted at
+<a href="https://hal.inria.fr/inria-00070503/document">https://hal.inria.fr/inria-00070503/document</a>.</p>
+</div>
+</div>
 </div>
 <div class="paragraph">
 <p>The following table<sup>68</sup> describes the minimum accuracy of single precision
@@ -12679,7 +12685,7 @@
 <p>[68] The ULP values for built-in math functions <strong>lgamma</strong> and <strong>lgamma_r</strong> is
 currently undefined.</p>
 </div>
-<table id="table-ulp-float-math" class="tableblock frame-all grid-all spread">
+<table id="table-ulp-float-math" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 36. ULP values for single precision built-in math functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -13108,7 +13114,7 @@
 The reference value used to compute the ULP value of an arithmetic operation
 is the infinitely precise result.</p>
 </div>
-<table id="table-ulp-embedded" class="tableblock frame-all grid-all spread">
+<table id="table-ulp-embedded" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 37. ULP values for the embedded profile</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -13542,7 +13548,7 @@
 The reference value used to compute the ULP value of an arithmetic operation
 is the infinitely precise result.</p>
 </div>
-<table id="table-float-ulp-relaxed" class="tableblock frame-all grid-all spread">
+<table id="table-float-ulp-relaxed" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 38. ULP values for single precision built-in math functions with unsafe math optimizations in the full and embedded profiles</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -13680,9 +13686,9 @@
       Undefined for <em>x</em> &lt; 0 and non-integer y.
       Undefined for <em>x</em> &lt; 0 and <em>y</em> outside the domain [-2^24, 2^24].
       For <em>x</em> &gt; 0 or <em>x</em> &lt; 0 and even <em>y</em>, derived implementations implement
-      this as <strong>exp2</strong>(y * log2(<em>x</em>)).
+      this as <strong>exp2</strong>(<em>y</em> * <strong>log2</strong>(<strong>fabs</strong>(<em>x</em>))).
       For <em>x</em> &lt; 0 and odd <em>y</em>, derived implementations implement this as
-      <strong>-exp2(y * *log2</strong>(fabs(<em>x</em>))<sup>72</sup>.
+      -<strong>exp2</strong>(<em>y</em> * <strong>log2</strong>(<strong>fabs</strong>(<em>x</em>))<sup>72</sup>.
       For <em>x</em> == 0 and nonzero <em>y</em>, derived implementations return zero.
       For non-derived implementations, the error is ≤ 8192 ULP</p></td>
 </tr>
@@ -13691,9 +13697,9 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Defined only for integer values of y.
       Undefined for <em>x</em> = 0 and <em>y</em> = 0.
       For <em>x</em> &gt;= 0 or <em>x</em> &lt; 0 and even <em>y</em>, derived implementations
-      implement this as <strong>exp2</strong>(<em>y</em> * <strong>log2</strong>(<em>x</em>)).
+      implement this as <strong>exp2</strong>(<em>y</em> * <strong>log2</strong>(<strong>fabs</strong>(<em>x</em>))).
       For <em>x</em> &lt; 0 and odd <em>y</em>, derived implementations implement this as
-      <strong>-exp2</strong>(<em>y</em> * <strong>log2</strong>(<strong>fabs</strong>(<em>x</em>)).
+      -<strong>exp2</strong>(<em>y</em> * <strong>log2</strong>(<strong>fabs</strong>(<em>x</em>)).
       For non-derived implementations, the error is ≤ 8192 ulp.</p></td>
 </tr>
 <tr>
@@ -13770,7 +13776,7 @@
 The reference value used to compute the ULP value of an arithmetic operation
 is the infinitely precise result.</p>
 </div>
-<table id="table-ulp-double" class="tableblock frame-all grid-all spread">
+<table id="table-ulp-double" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 39. ULP values for double precision built-in math functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -14619,7 +14625,7 @@
 <div class="paragraph">
 <p>The following table describes the address_mode function.</p>
 </div>
-<table id="table-address-modes-texel-location" class="tableblock frame-all grid-all spread">
+<table id="table-address-modes-texel-location" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 40. Addressing modes to generate texel location</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -15394,7 +15400,7 @@
 <div class="paragraph">
 <p>For images created with a channel data type of <code>CL_HALF_FLOAT</code>, the
 conversions from <code>half</code> to <code>float</code> are lossless (as described in
-<a href="#the-half-data-type">The half data type</a>).
+<a href="#the-half-data-type">"The half data type"</a>).
 Conversions from <code>float</code> to <code>half</code> round the mantissa using the round to
 nearest even or round to zero rounding mode.
 Denormalized numbers for the <code>half</code> data type which may be generated when
@@ -15730,11 +15736,11 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 2.2-8<br>
-Last updated 2018-10-08 09:49:15 PDT
+Version v2.2-10<br>
+Last updated 2019-02-05 16:03:11 EST
 </div>
 </div>
 
-
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/specs/2.2/html/OpenCL_Cxx.html b/specs/2.2/html/OpenCL_Cxx.html
index 171fd59..974e5e4 100644
--- a/specs/2.2/html/OpenCL_Cxx.html
+++ b/specs/2.2/html/OpenCL_Cxx.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.5">
-<meta name="author" content="Khronos OpenCL Working Group">
+<meta name="generator" content="Asciidoctor 1.5.7">
+<meta name="author" content="Khronos&#174; OpenCL Working Group">
 <title>The OpenCL&#8482; C++ 1.0 Specification</title>
 <style>
 /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
@@ -724,7 +724,7 @@
 .literalblock pre, .listingblock pre { background: #eeeeee; }
 
 </style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
 <style>
 /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
 /*pre.CodeRay {background-color:#f7f7f8;}*/
@@ -840,10 +840,10 @@
 <div id="header">
 <h1>The OpenCL<sup>&#8482;</sup> C++ 1.0 Specification</h1>
 <div class="details">
-<span id="author" class="author">Khronos OpenCL Working Group</span><br>
-<span id="revnumber">version 2.2-8,</span>
-<span id="revdate">Mon, 08 Oct 2018 16:50:47 +0000</span>
-<br><span id="revremark">from git branch: master commit: b3cab22fcff5d8c17869907c983e259ddd7ce788</span>
+<span id="author" class="author">Khronos<sup>&#174;</sup> OpenCL Working Group</span><br>
+<span id="revnumber">version v2.2-10,</span>
+<span id="revdate">Tue, 05 Feb 2019 21:18:46 +0000</span>
+<br><span id="revremark">from git branch:  commit: 00422daf5dc013f21ab633479577c7cc225150e2</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -929,7 +929,7 @@
 <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>Copyright 2008-2018 The Khronos Group.</p>
+<p>Copyright 2008-2019 The Khronos Group.</p>
 </div>
 <div class="paragraph">
 <p>This specification is protected by copyright laws and contains material proprietary
@@ -960,7 +960,7 @@
 otherwise, arising from or in connection with these materials.</p>
 </div>
 <div class="paragraph">
-<p>Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL,
+<p>Vulkan and Khronos are registered trademarks, and OpenXR, SPIR, SPIR-V, SYCL, WebGL,
 WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput,
 OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are
 trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC,
@@ -1123,7 +1123,7 @@
 // etc.</code></pre>
 </div>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 1. generic types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1138,7 +1138,7 @@
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>typen</code></p></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>scalar and all vector types of type</p>
 </div>
 <div class="paragraph">
@@ -1197,7 +1197,7 @@
 </div>
 <div class="sect3">
 <h4 id="builtin-scalar-data-types">2.1.1. Built-in Scalar Data Types</h4>
-<table id="device_builtin_scalar_data_types" class="tableblock frame-all grid-all spread">
+<table id="device_builtin_scalar_data_types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 2. Device Built-in scalar data types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1271,7 +1271,7 @@
 <p>Most built-in scalar data types are also declared as appropriate types in the OpenCL API (and header files) that can be used by an application.
 The following table describes the built-in scalar data type in the OpenCL C++ programming language and the corresponding data type available to the application:</p>
 </div>
-<table id="host_scalar_builtin_data_types" class="tableblock frame-all grid-all spread">
+<table id="host_scalar_builtin_data_types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 3. Host Scalar Built-in Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1454,7 +1454,7 @@
 The vector data type is defined with the type name i.e. <code>bool</code>, <code>char</code>, <code>uchar</code>, <code>short</code>, <code>ushort</code>, <code>int</code>, <code>uint</code>, <code>long</code>, <code>ulong</code>, <code>half</code>, <code>float</code> or <code>double</code> followed by a literal value <em>n</em> that defines the number of elements in the vector.
 Supported values of <em>n</em> are 2, 3, 4, 8, and 16 for all vector data types.</p>
 </div>
-<table id="device_builtin_vector_data_types" class="tableblock frame-all grid-all spread">
+<table id="device_builtin_vector_data_types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 4. Device Built-in Vector Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1521,7 +1521,7 @@
 <p>The built-in vector data types are also declared as appropriate types in the OpenCL API (and header files) that can be used by an application.
 The following table describes the built-in vector data type in the OpenCL C++ programming language and the corresponding data type available to the application:</p>
 </div>
-<table id="host_builtin_vector_data_types" class="tableblock frame-all grid-all spread">
+<table id="host_builtin_vector_data_types" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 5. Host Built-in Vector Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1976,7 +1976,7 @@
 Each value selects single component.
 Values in a selector can be repeated and specified in any order.
 A number of values in a selector including repeated values is called the swizzle size.</p>
-<table id="selector_values_and_their_corresponding_components_in_swizzle" class="tableblock frame-all grid-all spread">
+<table id="selector_values_and_their_corresponding_components_in_swizzle" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 6. Selector values and their corresponding components in swizzle</caption>
 <colgroup>
 <col style="width: 25%;">
@@ -2187,7 +2187,7 @@
 <div class="paragraph">
 <p>The following <a href="#special_selector_values">Special selector values</a> table describes special selector values and their numerical equivalents.</p>
 </div>
-<table id="special_selector_values" class="tableblock frame-all grid-all spread">
+<table id="special_selector_values" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 7. Special selector values</caption>
 <colgroup>
 <col style="width: 25%;">
@@ -2326,7 +2326,7 @@
 </tr>
 </tbody>
 </table>
-<div class="listingblock">
+<div id="special_selector_values" class="listingblock">
 <div class="content">
 <pre class="CodeRay highlight"><code>float8 v = float8(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f);
 
@@ -2607,8 +2607,8 @@
 </tr>
 </table>
 </div>
-<div class="ulist">
-<ul>
+<div class="ulist NOTE">
+<ul class="NOTE">
 <li>
 <p><em>[ISO/IEC 14882:2014: expr.ass, ch. 5.18 (1)]</em> Assignment and compound assignment operators: The result in all cases is a bit-field or a <em>vector-swizzle</em> if the left operand is respectively a bit-field or a <em>vector-swizzle</em>.</p>
 </li>
@@ -3074,7 +3074,7 @@
 </div>
 <div class="sect3">
 <h4 id="memory-initialization">2.5.4. Memory initialization</h4>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 8. Supported memory initializers</caption>
 <colgroup>
 <col style="width: 13%;">
@@ -3094,15 +3094,15 @@
 <tr>
 <td class="tableblock halign-left valign-top"></td>
 <td class="tableblock halign-left valign-top"></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">uninitialized (no constructor or trivial default constructor)
-</p><p class="tableblock">  <strong>AND</strong>
-</p><p class="tableblock">  trivial destructor</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">initialized by constant expression
-</p><p class="tableblock">  <strong>AND</strong>
-</p><p class="tableblock">  trivial destructor</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">custom initializer
-</p><p class="tableblock">  <strong>OR</strong>
-</p><p class="tableblock">  custom destructor</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">uninitialized (no constructor or trivial default constructor)</p>
+<p class="tableblock">  <strong>AND</strong></p>
+<p class="tableblock">  trivial destructor</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">initialized by constant expression</p>
+<p class="tableblock">  <strong>AND</strong></p>
+<p class="tableblock">  trivial destructor</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">custom initializer</p>
+<p class="tableblock">  <strong>OR</strong></p>
+<p class="tableblock">  custom destructor</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top" rowspan="4"><p class="tableblock">local</p></td>
@@ -3113,17 +3113,17 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">kernel</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are not zero-pre-initialized.
-</p><p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are not zero-pre-initialized.
-</p><p class="tableblock">  Materialize temporary expressions are not supported.
-</p><p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are not zero-pre-initialized.
-</p><p class="tableblock">  Materialize temporary expressions are not supported.
-</p><p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are not zero-pre-initialized.</p>
+<p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are not zero-pre-initialized.</p>
+<p class="tableblock">  Materialize temporary expressions are not supported.</p>
+<p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are not zero-pre-initialized.</p>
+<p class="tableblock">  Materialize temporary expressions are not supported.</p>
+<p class="tableblock">  Optional zero-pre-initialization possible using switch: -cl-zero-init-local-mem-vars</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">local (non-kernel)</p></td>
@@ -3133,43 +3133,43 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">class (static data member)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are not zero-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are not zero-pre-initialized.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not supported</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not supported</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top" rowspan="3"><p class="tableblock">global</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">program</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero-pre-initialized.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">supported</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">kernel / local</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero-pre-initialized.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not supported</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">class (static data member)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero-pre-initialized.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not supported</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">constant</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">(any)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero-pre-initialized.</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">supported
-</p><p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero-pre-initialized.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">supported</p>
+<p class="tableblock">  Variables are zero or constexpr-pre-initialized.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">not supported</p></td>
 </tr>
 <tr>
@@ -3638,7 +3638,7 @@
 <div class="sect3">
 <h4 id="optional-loop-attributes">2.8.5. Optional Loop Attributes</h4>
 <div class="sect4">
-<h5 id="_cl_unroll_hint">cl::unroll_hint</h5>
+<h5 id="_clunroll_hint">cl::unroll_hint</h5>
 <div class="paragraph">
 <p>The <code><a id="cl::unroll_hint"></a></code> and <code>[[cl::unroll_hint(n)]]</code> attribute qualifiers can be used to specify that a loop (<code>for</code>, <code>while</code> and <code>do</code> loops) can be unrolled.
 This attribute qualifier can be used to specify full unrolling or partial unrolling by a specified amount.
@@ -4156,7 +4156,7 @@
 <p>Conversions to and from floating-point type shall conform to IEEE-754 rounding rules.
 Conversions may have an optional rounding mode specified as described in the table belows.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 9. Rounding Modes</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6247,9 +6247,9 @@
 <div class="sect2">
 <h3 id="specialization-constants-library">3.5. Specialization Constants Library</h3>
 <div class="paragraph">
-<p>The specialization constants are objects that will not have known constant values until after initial generation of a SPIR-V module.
-Such objects are called specialization constants.
-Application might provide values for the specialization constants that will be used when SPIR-V program is built.</p>
+<p>The specialization constants are objects that will not have known constant values until after initial generation of a module in
+an intermediate representation format (e.g. SPIR-V). Such objects are called specialization constants.
+Application might provide values for the specialization constants that will be used when program is built from an intermediate format.</p>
 </div>
 <div class="sect3">
 <h4 id="header-opencl_spec_constant-synopsis">3.5.1. Header &lt;opencl_spec_constant&gt; Synopsis</h4>
@@ -6330,7 +6330,7 @@
 <h5 id="id">ID</h5>
 <div class="paragraph">
 <p>Template parameter <code>ID</code> in spec_constant class template denotes an unique ID of the specialization constant that can be used to set a value from the host API.
-The value of <code>ID</code> must be unique within this compilation unit and across any other SPIR-V modules that it is linked with.</p>
+The value of <code>ID</code> must be unique within this compilation unit and across any other modules that it is linked with.</p>
 </div>
 </div>
 </div>
@@ -7695,7 +7695,7 @@
 <div class="paragraph">
 <p>The below table describes the OpenCL image and sampler data types and the corresponding data type available to the application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 10. Host image and sampler types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -7984,7 +7984,7 @@
 <div class="paragraph">
 <p>The following table describes the <code>image_dim_num</code> trait that return a number of dimensions based on <code>image_dim</code> parameter.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 11. Image_dim_num trait</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8779,7 +8779,7 @@
 <div class="paragraph">
 <p>The following tables describe the inline sampler parameters and their behavior.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 12. Addressing modes</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8817,7 +8817,7 @@
 <div class="paragraph">
 <p>For 1D and 2D image arrays, the addressing mode applies only to the <em>x</em> and (<em>x, y</em>) coordinates.  The addressing mode for the coordinate which specifies the array index is always clamp_to_edge.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 13. Normalized coordinates</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8843,7 +8843,7 @@
 <div class="paragraph">
 <p>Sampling from an image with samplers that differ in specification of coordinates normalization result in undefined behavior.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 14. Coordinate filtering modes</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -8942,7 +8942,7 @@
 <div class="paragraph">
 <p>The following table describes the mapping of the number of channels of an image element to the appropriate components in the <code>float4</code>, <code>int4</code> or <code>uint4</code> vector data type for the color values returned by <code>image::sample</code>, <code>image::read</code> or supplied to <code>image::write</code>. The unmapped components will be set to 0.0 for red, green and blue channels and will be set to 1.0 for the alpha channel.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 15. Image channel mappings</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9157,7 +9157,7 @@
 <div class="paragraph">
 <p>The below describes the OpenCL pipe data type and the corresponding data type available to the application:</p>
 </div>
-<table id="host_pipe_type" class="tableblock frame-all grid-all spread">
+<table id="host_pipe_type" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 16. Host pipe type</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -9810,7 +9810,7 @@
 <div class="paragraph">
 <p>The below table describes the OpenCL queue data type and the corresponding data type available to the application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 17. Host queue type</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10288,7 +10288,7 @@
 <p>Enqueue policy enumerable is used to specify launch policy of enqueued kernel.
 It is defined as follows:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 18. Enqueue policy</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10339,7 +10339,7 @@
 If the <em>-g</em> compile option is specified in compiler options passed to <code>clBuildProgram</code>, the other errors may be returned instead of <code>enqueue_status::failure</code> to indicate why <code>enqueue_kernel</code> or <code>enqueue_marker</code> failed.
 Enqueue status is defined as follows:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 19. Enqueue status</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10407,7 +10407,7 @@
 <p>Event status enumerable is used to set a user event status.
 It is defined as follows:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 20. Event status</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10464,7 +10464,7 @@
 <p>Event profiling info enumerable is used to determine the outcome of <code>event::profiling_info</code> function.
 It is defined as follows:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 21. Event profiling info</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -10480,9 +10480,9 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>exec_time</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Identifies profiling information to be queried.
-  If specified, the two 64-bit values are returned
-</p><p class="tableblock">  The first 64-bit value describes the elapsed time: <code>CL_PROFILING_COMMAND_END - CL_PROFILING_COMMAND_START</code> for the command identified by event in nanoseconds.
-</p><p class="tableblock">  The second 64-bit value describes the elapsed time <code>CL_PROFILING_COMMAND_COMPLETE - CL_PROFILING_COMMAND_START</code> for the command identified by event in nanoseconds.</p></td>
+  If specified, the two 64-bit values are returned</p>
+<p class="tableblock">  The first 64-bit value describes the elapsed time: <code>CL_PROFILING_COMMAND_END - CL_PROFILING_COMMAND_START</code> for the command identified by event in nanoseconds.</p>
+<p class="tableblock">  The second 64-bit value describes the elapsed time <code>CL_PROFILING_COMMAND_COMPLETE - CL_PROFILING_COMMAND_START</code> for the command identified by event in nanoseconds.</p></td>
 </tr>
 </tbody>
 </table>
@@ -13084,9 +13084,10 @@
 <div class="paragraph">
 <p><code>mad</code> computes <code>a * b + c</code>.
 The function may compute <code>a * b + c</code> with reduced accuracy
-    in the embedded profile.  See the SPIR-V OpenCL environment specification
-    for details. On some hardware the mad instruction may provide better
-    performance than expanded computation of <code>a * b + c</code>. <a id="ftnref22"></a> <a href="#ftn22">[22]</a></p>
+    in the embedded profile. It is implemented either as a correctly rounded fma,
+    or as a multiply followed by an add, both of which are correctly rounded.
+    On some hardware the mad instruction may provide better performance
+    than expanded computation of <code>a * b + c</code>. <a id="ftnref22"></a> <a href="#ftn22">[22]</a></p>
 </div>
 </div>
 <div class="sect4">
@@ -16058,7 +16059,7 @@
 <div class="paragraph">
 <p>The following table describes the built-in macro names given above in the OpenCL C++ library and the corresponding macro names available to the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 22. Float Built-in Macros</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16140,7 +16141,7 @@
 <div class="paragraph">
 <p>The following table describes the built-in macro names given above in the OpenCL C++ library and the corresponding macro names available to the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 23. Double Built-in Macros</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16215,7 +16216,7 @@
 <div class="paragraph">
 <p>The following table describes the built-in macro names given above in the OpenCL C++ library and the corresponding macro names available to the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 24. Half Built-in Macros</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16274,7 +16275,7 @@
 <p>The following symbolic constants are available.
 Their values are of type float and are accurate within the precision of a single precision floating-point number.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 25. Float Symbolic Constants</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16309,7 +16310,7 @@
 <div class="paragraph">
 <p>If double precision is supported by the device, the following symbolic constant will also be available:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 26. Double Symbolic Constants</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16359,7 +16360,7 @@
 <div class="paragraph">
 <p>The following table describes the built-in macro names given above in the OpenCL C++ library and the corresponding macro names available to the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 27. Integer built-in macros</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16583,7 +16584,7 @@
 <p>The following constants are also available.
 They are of type <code>half</code> and are accurate within the precision of the <code>half</code> type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 28. Half Constants</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16657,7 +16658,7 @@
 <p>The following constants are also available.
 They are of type <code>float</code> and are accurate within the precision of the <code>float</code> type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 29. Float Constants</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -16731,7 +16732,7 @@
 <p>The following constants are also available.
 They are of type <code>double</code> and are accurate within the precision of the <code>double</code> type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 30. Double Constants</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17147,7 +17148,7 @@
 <h4 id="unary-type-traits">3.29.2. Unary Type Traits</h4>
 <div class="sect4">
 <h5 id="additional-type-property-predicates">Additional type property predicates</h5>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 31. Additional type property predicates</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17189,7 +17190,7 @@
 </div>
 <div class="sect4">
 <h5 id="additional-type-property-queries">Additional type property queries</h5>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 32. Additional type property queries</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17214,7 +17215,7 @@
 <h4 id="binary-type-traits">3.29.3. Binary type traits</h4>
 <div class="sect4">
 <h5 id="changed-relationships-traits">Changed relationships traits</h5>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 33. Changed relationship traits</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17239,7 +17240,7 @@
 <h4 id="transformation-traits">3.29.4. Transformation traits</h4>
 <div class="sect4">
 <h5 id="address-space-and-vector-modifications">Address space and vector modifications</h5>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 34. Address space and vector traits</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17578,19 +17579,32 @@
 <div class="paragraph">
 <p>The ULP is defined as follows:</p>
 </div>
+<div class="exampleblock">
+<div class="content">
 <div class="paragraph">
 <p>If x is a real number that lies between two finite consecutive floating-point numbers a and b, without being equal to one of them, then ulp(x) = |b - a|, otherwise ulp(x) is the distance between the two non-equal finite floating-point numbers nearest x.
 Moreover, ulp(NaN) is NaN.</p>
 </div>
+</div>
+</div>
 <div class="paragraph">
-<p><em>Attribution: This definition was taken with consent from Jean-Michel Muller with slight clarification for behavior at zero.
-Refer to <a href="ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-5504.pdf" class="bare">ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-5504.pdf</a></em></p>
+<p><em>Attribution: This definition was taken with consent from Jean-Michel Muller
+with slight clarification for behavior at zero.</em></p>
+</div>
+<div class="exampleblock">
+<div class="content">
+<div class="paragraph">
+<p>Jean-Michel Muller. On the definition of ulp(x). RR-5504, INRIA. 2005, pp.16. &lt;inria-00070503&gt;
+Currently hosted at
+<a href="https://hal.inria.fr/inria-00070503/document">https://hal.inria.fr/inria-00070503/document</a>.</p>
+</div>
+</div>
 </div>
 <div class="paragraph">
 <p><a href="#ulp_values_for_single_precision_builtin_math_functions">ULP values for single precision built-in math functions</a> <a id="ftnref31"></a> <a href="#ftn31">[31]</a> table describes the minimum accuracy of single precision floating-point arithmetic operations given as ULP values.
 The reference value used to compute the ULP value of an arithmetic operation is the infinitely precise result.</p>
 </div>
-<table id="ulp_values_for_single_precision_builtin_math_functions" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_single_precision_builtin_math_functions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 35. ULP values for single precision built-in math functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -17945,7 +17959,7 @@
 <p><a href="#ulp_values_for_single_precision_builtin_math_functions_for_embedded_profile">ULP values for single precision builtin math functions for embedded profile</a> table describes the minimum accuracy of single precision floating-point arithmetic operations given as ULP values for the embedded profile.
 The reference value used to compute the ULP value of an arithmetic operation is the infinitely precise result.</p>
 </div>
-<table id="ulp_values_for_single_precision_builtin_math_functions_for_embedded_profile" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_single_precision_builtin_math_functions_for_embedded_profile" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 36. ULP values for single precision built-in math functions for embedded profile</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -18358,7 +18372,7 @@
 The minimum accuracy of math functions not defined in <a href="#ulp_values_for_single_precision_builtin_math_functions_with_fast_relaxed_math">ULP values for single precision built-in math functions with unsafe math optimizations</a> table when the <em>-cl-unsafe-math-optimizations</em> compiler option is specified is as defined in <a href="#ulp_values_for_single_precision_builtin_math_functions">ULP values for single precision built-in math functions</a> table when operating in the full profile, and as defined in <a href="#ulp_values_for_single_precision_builtin_math_functions_for_embedded_profile">ULP values for single precision built-in math functions for embedded profile</a> table when operating in the embedded profile.
 The reference value used to compute the ULP value of an arithmetic operation is the infinitely precise result.</p>
 </div>
-<table id="ulp_values_for_single_precision_builtin_math_functions_with_fast_relaxed_math" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_single_precision_builtin_math_functions_with_fast_relaxed_math" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 37. ULP values for single precision built-in math functions with unsafe math optimizations in the full and embedded profiles</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -18487,8 +18501,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Undefined for x = 0 and y = 0.
   Undefined for x &lt; 0 and non-integer y.
   Undefined for x &lt; 0 and y outside the domain [-2<sup>24</sup>, 2<sup>24</sup>].
-  For x &gt; 0 or x &lt; 0 and even y, derived implementations implement this as exp2( y * log2(x) ).
-  For x &lt; 0 and odd y, derived implementations implement this as -exp2( y * log2(fabs(x) ) <a id="ftnref33"></a> <a href="#ftn33">[33]</a>.
+  For x &gt; 0 or x &lt; 0 and even y, derived implementations implement this as exp2( y * log2( fabs(x) ) ).
+  For x &lt; 0 and odd y, derived implementations implement this as -exp2( y * log2( fabs(x) ) <a id="ftnref33"></a> <a href="#ftn33">[33]</a>.
   For x == 0 and nonzero y, derived implementations return zero.
   For non-derived implementations, the error is &lt;= 8192 ULP.</p></td>
 </tr>
@@ -18496,7 +18510,7 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">pown(x, y)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Defined only for integer values of y.
   Undefined for x = 0 and y = 0.
-  For x &gt;= 0 or x &lt; 0 and even y, derived implementations implement this as exp2( y * log2(x) ).
+  For x &gt;= 0 or x &lt; 0 and even y, derived implementations implement this as exp2( y * log2( fabs(x) ) ).
   For x &lt; 0 and odd y, derived implementations implement this as -exp2( y * log2( fabs(x) ) ).
   For non-derived implementations, the error is &lt;= 8192 ulp.</p></td>
 </tr>
@@ -18559,7 +18573,7 @@
 <p><a href="#ulp_values_for_double_precision_builtin_math_functions">ULP values for double precision built-in math functions</a> table describes the minimum accuracy of double precision floating-point arithmetic operations given as ULP values.
 The reference value used to compute the ULP value of an arithmetic operation is the infinitely precise result.</p>
 </div>
-<table id="ulp_values_for_double_precision_builtin_math_functions" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_double_precision_builtin_math_functions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 38. ULP values for double precision built-in math functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -18858,7 +18872,7 @@
 <p><a href="#ulp_values_for_half_precision_builtin_math_functions">ULP values for half precision built-in math functions</a> table describes the minimum accuracy of half precision floating-point arithmetic operations given as ULP values.
 The reference value used to compute the ULP value of an arithmetic operation is the infinitely precise result.</p>
 </div>
-<table id="ulp_values_for_half_precision_builtin_math_functions" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_half_precision_builtin_math_functions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 39. ULP values for half precision built-in math functions</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -19550,7 +19564,7 @@
 <div class="paragraph">
 <p>The below table describes the <code>address_mode</code> function.</p>
 </div>
-<table id="addressing_modes_to_generate_texel_location" class="tableblock frame-all grid-all spread">
+<table id="addressing_modes_to_generate_texel_location" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 40. Addressing modes to generate texel location</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -19564,26 +19578,26 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>clamp_to_edge</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>clamp (coord, 0, size - 1)</p>
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>clamp</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>clamp (coord, -1, size)</p>
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>none</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>Coord</p>
 </div></div></td>
 </tr>
@@ -20916,11 +20930,11 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 2.2-8<br>
-Last updated 2018-09-24 21:35:08 PDT
+Version v2.2-10<br>
+Last updated 2019-02-05 16:03:11 EST
 </div>
 </div>
 
-
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/specs/2.2/html/OpenCL_Env.html b/specs/2.2/html/OpenCL_Env.html
index e3f3305..abb366c 100644
--- a/specs/2.2/html/OpenCL_Env.html
+++ b/specs/2.2/html/OpenCL_Env.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.5">
-<meta name="author" content="Khronos OpenCL Working Group">
+<meta name="generator" content="Asciidoctor 1.5.7">
+<meta name="author" content="Khronos&#174; OpenCL Working Group">
 <title>The OpenCL&#8482; SPIR-V Environment Specification</title>
 <style>
 /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
@@ -724,7 +724,7 @@
 .literalblock pre, .listingblock pre { background: #eeeeee; }
 
 </style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
 <style>
 /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
 /*pre.CodeRay {background-color:#f7f7f8;}*/
@@ -840,10 +840,10 @@
 <div id="header">
 <h1>The OpenCL<sup>&#8482;</sup> SPIR-V Environment Specification</h1>
 <div class="details">
-<span id="author" class="author">Khronos OpenCL Working Group</span><br>
-<span id="revnumber">version 2.2-8,</span>
-<span id="revdate">Mon, 08 Oct 2018 16:50:05 +0000</span>
-<br><span id="revremark">from git branch: master commit: b3cab22fcff5d8c17869907c983e259ddd7ce788</span>
+<span id="author" class="author">Khronos<sup>&#174;</sup> OpenCL Working Group</span><br>
+<span id="revnumber">version v2.2-10,</span>
+<span id="revdate">Tue, 05 Feb 2019 21:17:11 +0000</span>
+<br><span id="revremark">from git branch:  commit: 00422daf5dc013f21ab633479577c7cc225150e2</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
@@ -927,7 +927,7 @@
 <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>Copyright 2008-2018 The Khronos Group.</p>
+<p>Copyright 2008-2019 The Khronos Group.</p>
 </div>
 <div class="paragraph">
 <p>This specification is protected by copyright laws and contains material proprietary
@@ -958,7 +958,7 @@
 otherwise, arising from or in connection with these materials.</p>
 </div>
 <div class="paragraph">
-<p>Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL,
+<p>Vulkan and Khronos are registered trademarks, and OpenXR, SPIR, SPIR-V, SYCL, WebGL,
 WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput,
 OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are
 trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC,
@@ -1206,7 +1206,7 @@
 <p>The following table describes the <strong>OpTypeImage</strong> image types supported by
 OpenCL environments:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 1. Image Types</caption>
 <colgroup>
 <col style="width: 16.6666%;">
@@ -1281,7 +1281,7 @@
 <p>The following table describes other data types that may be used in an
 OpenCL environment:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 2. Other Data Types</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1323,7 +1323,7 @@
 <strong>OpImageQueryOrder</strong> instruction correspond to the OpenCL host API image
 channel orders.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 3. Image Channel Order mapping</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -1422,7 +1422,7 @@
 <strong>OpImageQueryFormat</strong> instruction correspond to the OpenCL host API image
 channel data types.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 4. Image Channel Data Type mapping</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -2594,7 +2594,7 @@
 <div class="sect2">
 <h3 id="_full_and_embedded_profile_extensions">7.2. Full and Embedded Profile Extensions</h3>
 <div class="sect3">
-<h4 id="__code_cl_khr_3d_image_writes_code">7.2.1. <code>cl_khr_3d_image_writes</code></h4>
+<h4 id="_cl_khr_3d_image_writes">7.2.1. <code>cl_khr_3d_image_writes</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_3d_image_writes</code>,
 then the environment must accept <em>Image</em> operands to <strong>OpImageWrite</strong> that
@@ -2602,7 +2602,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_depth_images_code">7.2.2. <code>cl_khr_depth_images</code></h4>
+<h4 id="_cl_khr_depth_images">7.2.2. <code>cl_khr_depth_images</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_depth_images</code>,
 then the environment must accept modules that declare 2D depth image types
@@ -2623,7 +2623,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_device_enqueue_local_arg_types_code">7.2.3. <code>cl_khr_device_enqueue_local_arg_types</code></h4>
+<h4 id="_cl_khr_device_enqueue_local_arg_types">7.2.3. <code>cl_khr_device_enqueue_local_arg_types</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension
 <code>cl_khr_device_enqueue_local_arg_types</code>, then then environment will allow
@@ -2632,7 +2632,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_fp16_code">7.2.4. <code>cl_khr_fp16</code></h4>
+<h4 id="_cl_khr_fp16">7.2.4. <code>cl_khr_fp16</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_fp16</code>, then the
 environment must accept modules that declare the following SPIR-V
@@ -2647,7 +2647,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_fp64_code">7.2.5. <code>cl_khr_fp64</code></h4>
+<h4 id="_cl_khr_fp64">7.2.5. <code>cl_khr_fp64</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_fp64</code>, then the
 environment must accept modules that declare the following SPIR-V
@@ -2662,7 +2662,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_gl_depth_images_code">7.2.6. <code>cl_khr_gl_depth_images</code></h4>
+<h4 id="_cl_khr_gl_depth_images">7.2.6. <code>cl_khr_gl_depth_images</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_gl_depth_images</code>,
 then the following Image Channel Orders may additionally be returned by
@@ -2688,7 +2688,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_gl_msaa_sharing_code">7.2.7. <code>cl_khr_gl_msaa_sharing</code></h4>
+<h4 id="_cl_khr_gl_msaa_sharing">7.2.7. <code>cl_khr_gl_msaa_sharing</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_gl_msaa_sharing</code>,
 then the environment must accept modules that declare 2D multi-sampled
@@ -2720,7 +2720,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_int64_base_atomics_code_and_code_cl_khr_int64_extended_atomics_code">7.2.8. <code>cl_khr_int64_base_atomics</code> and <code>cl_khr_int64_extended_atomics</code></h4>
+<h4 id="_cl_khr_int64_base_atomics_and_cl_khr_int64_extended_atomics">7.2.8. <code>cl_khr_int64_base_atomics</code> and <code>cl_khr_int64_extended_atomics</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_int64_base_atomics</code>
 or <code>cl_khr_int64_extended_atomics</code>, then the environment must support 64-bit
@@ -2737,7 +2737,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_mipmap_image_code">7.2.9. <code>cl_khr_mipmap_image</code></h4>
+<h4 id="_cl_khr_mipmap_image">7.2.9. <code>cl_khr_mipmap_image</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_mipmap_image</code>,
 then the environment must accept non-zero optional <strong>Lod</strong> <em>Image Operands</em>
@@ -2763,7 +2763,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_mipmap_image_writes_code">7.2.10. <code>cl_khr_mipmap_image_writes</code></h4>
+<h4 id="_cl_khr_mipmap_image_writes">7.2.10. <code>cl_khr_mipmap_image_writes</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_mipmap_image_writes</code>,
 then the environment must accept non-zero optional <strong>Lod</strong> <em>Image Operands</em>
@@ -2783,7 +2783,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_subgroups_code">7.2.11. <code>cl_khr_subgroups</code></h4>
+<h4 id="_cl_khr_subgroups">7.2.11. <code>cl_khr_subgroups</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cl_khr_subgroups</code>, then
 the environment will generally allows the scope for <em>Execution</em> to include:</p>
@@ -2808,7 +2808,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="__code_cl_khr_subgroup_named_barrier_code">7.2.12. <code>cl_khr_subgroup_named_barrier</code></h4>
+<h4 id="_cl_khr_subgroup_named_barrier">7.2.12. <code>cl_khr_subgroup_named_barrier</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension
 <code>cl_khr_subgroup_named_barrier</code>, then the environment must accept modules
@@ -2822,11 +2822,20 @@
 </ul>
 </div>
 </div>
+<div class="sect3">
+<h4 id="_cl_khr_spirv_no_integer_wrap_decoration">7.2.13. <code>cl_khr_spirv_no_integer_wrap_decoration</code></h4>
+<div class="paragraph">
+<p>If the OpenCL environment supports the extension <code>cl_khr_spirv_no_integer_wrap_decoration</code>, then the environment must accept modules that declare use of the extension <code>SPV_KHR_no_integer_wrap_decoration</code> via <strong>OpExtension</strong>.</p>
+</div>
+<div class="paragraph">
+<p>If the OpenCL environment supports the extension <code>cl_khr_spirv_no_integer_wrap_decoration</code> and use of the SPIR-V extension <code>SPV_KHR_no_integer_wrap_decoration</code> is declared in the module via <strong>OpExtension</strong>, then the environment must accept modules that include the <strong>NoSignedWrap</strong> or <strong>NoUnsignedWrap</strong> decorations.</p>
+</div>
+</div>
 </div>
 <div class="sect2">
 <h3 id="_embedded_profile_extensions">7.3. Embedded Profile Extensions</h3>
 <div class="sect3">
-<h4 id="__code_cles_khr_int64_code">7.3.1. <code>cles_khr_int64</code></h4>
+<h4 id="_cles_khr_int64">7.3.1. <code>cles_khr_int64</code></h4>
 <div class="paragraph">
 <p>If the OpenCL environment supports the extension <code>cles_khr_int64</code>, then the
 environment must accept modules that declare the following SPIR-V
@@ -3067,7 +3076,7 @@
 accuracy of floating-point math arithmetic instructions for full profile
 devices given as ULP values.</p>
 </div>
-<table id="ulp_values_for_math_instructions" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_math_instructions" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 5. ULP Values for Math Instructions - Full Profile</caption>
 <colgroup>
 <col style="width: 31%;">
@@ -3691,7 +3700,7 @@
 describes the minimum accuracy of floating-point math arithmetic operations
 given as ULP values for the embedded profile.</p>
 </div>
-<table id="ulp_values_for_math_instructions_for_embedded_profile" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_math_instructions_for_embedded_profile" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 6. ULP Values for Math Instructions - Embedded Profile</caption>
 <colgroup>
 <col style="width: 31%;">
@@ -3986,9 +3995,9 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpExtInst</strong> <strong>mad</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Implemention-defined</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Implemention-defined</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Implemention-defined</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Implementation-defined</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Implementation-defined</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Implementation-defined</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>OpExtInst</strong> <strong>maxmag</strong></p></td>
@@ -4329,7 +4338,7 @@
 instructions for Embedded Profile</a> table when operating in the embedded
 profile.</p>
 </div>
-<table id="ulp_values_for_math_instructions_with_fast_relaxed_math" class="tableblock frame-all grid-all spread">
+<table id="ulp_values_for_math_instructions_with_fast_relaxed_math" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 7. ULP Values for Single Precision Math Instructions with <em>-cl-unsafe-math-optimizations</em></caption>
 <colgroup>
 <col style="width: 30%;">
@@ -4476,12 +4485,12 @@
   Undefined for x &lt; 0 and non-integer y.
   Undefined for x &lt; 0 and y outside the domain [-2<sup>24</sup>, 2<sup>24</sup>].
   For x &gt; 0 or x &lt; 0 and even y, derived implementations implement this as
-  exp2( y * log2(x) ).
+  exp2( y * log2( fabs(x) ) ).
   For x &lt; 0 and odd y, derived implementations implement this as -exp2( y *
-  log2(fabs(x) ).
+  log2( fabs(x) ).
   For x == 0 and nonzero y, derived implementations return zero.
-  For non-derived implementations, the error is &lt;= 8192 ULP.
-</p><p class="tableblock">  On some implementations, powr() or pown() may perform faster
+  For non-derived implementations, the error is &lt;= 8192 ULP.</p>
+<p class="tableblock">  On some implementations, powr() or pown() may perform faster
   than pow().
   If x is known to be &gt;= 0, consider using powr() in place of pow(),
   or if y is known to be an integer, consider using pown() in place of
@@ -4492,7 +4501,7 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Defined only for integer values of y.
   Undefined for x = 0 and y = 0.
   For x &gt;= 0 or x &lt; 0 and even y, derived implementations implement this as
-  exp2( y * log2(x) ).
+  exp2( y * log2( fabs(x) ) ).
   For x &lt; 0 and odd y, derived implementations implement this as -exp2( y *
   log2( fabs(x) ) ).
   For non-derived implementations, the error is &lt;= 8192 ulp.</p></td>
@@ -5126,7 +5135,7 @@
 They do not include ±0.
 A non-zero number is said to be sub-normal before rounding if, after
 normalization, its radix-2 exponent is less than (TYPE_MIN_EXP - 1).
-<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnote_1" title="View footnote.">1</a>]</sup></p>
+<sup class="footnote">[<a id="_footnoteref_1" class="footnote" href="#_footnotedef_1" title="View footnote.">1</a>]</sup></p>
 </div>
 </div>
 </div>
@@ -5190,7 +5199,7 @@
 <div class="paragraph">
 <p>The below table describes the <code>address_mode</code> function.</p>
 </div>
-<table id="addressing_modes_to_generate_texel_location" class="tableblock frame-all grid-all spread">
+<table id="addressing_modes_to_generate_texel_location" class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 8. Addressing Modes to Generate Texel Location</caption>
 <colgroup>
 <col style="width: 50%;">
@@ -5204,26 +5213,26 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>CL_ADDRESS_CLAMP</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><em>clamp (coord, -1, size)</em></p>
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>CL_ADDRESS_CLAMP_TO_EDGE</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><em>clamp (coord, 0, size - 1)</em></p>
 </div></div></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><code>CL_ADDRESS_NONE</code></p>
 </div></div></td>
-<td class="tableblock halign-left valign-top"><div><div class="paragraph">
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p><em>coord</em></p>
 </div></div></td>
 </tr>
@@ -6369,7 +6378,7 @@
 <p>For the following image channel orders, the data is a four
 component vector type:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 9. <em>Mapping Image Data to Vector Components</em></caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6415,7 +6424,7 @@
 <div class="paragraph">
 <p>For the following image channel orders, the data is a scalar type:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 10. <em>Scalar Image Data</em></caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6442,7 +6451,7 @@
 <p>The following table describes the mapping from image channel data type
 to the data vector component type or scalar type:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 11. <em>Image Data Types</em></caption>
 <colgroup>
 <col style="width: 50%;">
@@ -6534,7 +6543,9 @@
 </li>
 <li>
 <p><a id="ulp-definition"></a> Jean-Michel Muller. <em>On the definition of ulp(x)</em>.
-RR-5504, INRIA. 2005, pp.16. &lt;inria-00070503&gt;</p>
+RR-5504, INRIA. 2005, pp.16. &lt;inria-00070503&gt;
+Currently hosted at
+<a href="https://hal.inria.fr/inria-00070503/document">https://hal.inria.fr/inria-00070503/document</a>.</p>
 </li>
 <li>
 <p><a id="sRGB-spec"></a> &#8220;IEC 61966-2-1:1999 Multimedia systems and equipment -
@@ -6549,17 +6560,17 @@
 </div>
 <div id="footnotes">
 <hr>
-<div class="footnote" id="_footnote_1">
+<div class="footnote" id="_footnotedef_1">
 <a href="#_footnoteref_1">1</a>. Here <code>TYPE_MIN</code> and <code>TYPE_MIN_EXP</code> should be substituted by constants appropriate to the floating-point type under consideration, such as <code>FLT_MIN</code> and <code>FLT_MIN_EXP</code> for float.
 </div>
 </div>
 <div id="footer">
 <div id="footer-text">
-Version 2.2-8<br>
-Last updated 2018-09-24 21:35:08 PDT
+Version v2.2-10<br>
+Last updated 2019-02-05 16:03:11 EST
 </div>
 </div>
 
-
+<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_HTMLorMML"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/specs/2.2/html/OpenCL_Ext.html b/specs/2.2/html/OpenCL_Ext.html
index 7ab81e4..f1354ab 100644
--- a/specs/2.2/html/OpenCL_Ext.html
+++ b/specs/2.2/html/OpenCL_Ext.html
@@ -4,9 +4,9 @@
 <meta charset="UTF-8">
 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
-<meta name="generator" content="Asciidoctor 1.5.5">
-<meta name="author" content="Khronos OpenCL Working Group">
-<title>The OpenCL Extension Specification</title>
+<meta name="generator" content="Asciidoctor 1.5.7">
+<meta name="author" content="Khronos&#174; OpenCL Working Group">
+<title>The OpenCL&#8482; Extension Specification</title>
 <style>
 /*! normalize.css v2.1.2 | MIT License | git.io/normalize */
 /* ========================================================================== HTML5 display definitions ========================================================================== */
@@ -724,7 +724,7 @@
 .literalblock pre, .listingblock pre { background: #eeeeee; }
 
 </style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
 <style>
 /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
 /*pre.CodeRay {background-color:#f7f7f8;}*/
@@ -838,38 +838,53 @@
 </script></head>
 <body class="book toc2 toc-left" style="max-width: 100;">
 <div id="header">
-<h1>The OpenCL Extension Specification</h1>
+<h1>The OpenCL<sup>&#8482;</sup> Extension Specification</h1>
 <div class="details">
-<span id="author" class="author">Khronos OpenCL Working Group</span><br>
-<span id="revnumber">version 2.2-8,</span>
-<span id="revdate">Mon, 08 Oct 2018 16:50:25 +0000</span>
-<br><span id="revremark">from git branch: master commit: b3cab22fcff5d8c17869907c983e259ddd7ce788</span>
+<span id="author" class="author">Khronos<sup>&#174;</sup> OpenCL Working Group</span><br>
+<span id="revnumber">version v2.2-10,</span>
+<span id="revdate">Tue, 05 Feb 2019 21:17:59 +0000</span>
+<br><span id="revremark">from git branch:  commit: 00422daf5dc013f21ab633479577c7cc225150e2</span>
 </div>
 <div id="toc" class="toc2">
 <div id="toctitle">Table of Contents</div>
 <ul class="sectlevel1">
-<li><a href="#optional-extensions">1. Optional Extensions</a></li>
-<li><a href="#cl_khr_fp16">2. Half Precision Floating-Point</a></li>
-<li><a href="#cl_khr_gl_sharing">3. Creating an OpenCL Context from an OpenGL Context or Share Group</a></li>
-<li><a href="#cl_khr_gl_sharing__memobjs">4. Creating OpenCL Memory Objects from OpenGL Objects</a></li>
-<li><a href="#cl_khr_gl_event-creating">5. Creating OpenCL Event Objects from OpenGL Sync Objects</a></li>
-<li><a href="#cl_khr_dx9_media_sharing">6. Creating OpenCL Memory Objects from DirectX 9 Media Surfaces</a></li>
-<li><a href="#cl_khr_d3d10_sharing">7. Creating OpenCL Memory Objects from Direct3D 10 Buffers and Textures</a></li>
-<li><a href="#cl_khr_d3d11_sharing">8. Creating OpenCL Memory Objects from Direct3D 11 Buffers and Textures</a></li>
-<li><a href="#cl_khr_gl_depth_images">9. Sharing OpenGL and OpenGL ES Depth and Depth-Stencil Images</a></li>
-<li><a href="#cl_khr_gl_msaa_sharing">10. Creating OpenCL Memory Obejcts from OpenGL MSAA Textures</a></li>
-<li><a href="#cl_khr_initialize_memory">11. Local and Private Memory Initialization</a></li>
-<li><a href="#cl_khr_terminate_context">12. Terminating OpenCL contexts</a></li>
-<li><a href="#cl_khr_spir">13. SPIR 1.2 Binaries</a></li>
-<li><a href="#cl_khr_icd-opencl">14. OpenCL Installable Client Driver (ICD)</a></li>
-<li><a href="#cl_khr_subgroups">15. Subgroups</a></li>
-<li><a href="#cl_khr_mipmap_image">16. Mipmaps</a></li>
-<li><a href="#cl_khr_egl_image">17. Creating OpenCL Memory Objects from EGL Images</a></li>
-<li><a href="#cl_khr_egl_event">18. Creating OpenCL Event Objects from EGL Sync Objects</a></li>
-<li><a href="#cl_khr_priority_hints">19. Priority Hints</a></li>
-<li><a href="#cl_khr_throttle_hints">20. Throttle Hints</a></li>
-<li><a href="#cl_khr_subgroup_named_barrier">21. Named Barriers for Subgroups</a></li>
-<li><a href="#_summary_of_changes_from_opencl_2_1">Appendix A: Summary of Changes from OpenCL 2.1</a></li>
+<li><a href="#extensions-overview">1. Extensions Overview</a></li>
+<li><a href="#cl_khr_icd-opencl">2. Installable Client Drivers</a></li>
+<li><a href="#cl_khr_byte_addressable_store">3. Byte Addressable Stores</a></li>
+<li><a href="#cl_khr_3d_image_writes">4. Writing to 3D Image Objects</a></li>
+<li><a href="#cl_khr_fp16">5. Half Precision Floating-Point</a></li>
+<li><a href="#cl_khr_fp64">6. Double Precision Floating-Point</a></li>
+<li><a href="#cl_khr_int32_atomics">7. 32-bit Atomics</a></li>
+<li><a href="#cl_khr_int64_atomics">8. 64-bit Atomics</a></li>
+<li><a href="#cl_khr_select_fprounding_mode">9. Selecting the Rounding Mode <strong>(DEPRECATED)</strong></a></li>
+<li><a href="#cl_khr_gl_sharing">10. Creating an OpenCL Context from an OpenGL Context or Share Group</a></li>
+<li><a href="#cl_khr_gl_sharing__memobjs">11. Creating OpenCL Memory Objects from OpenGL Objects</a></li>
+<li><a href="#cl_khr_gl_event">12. Creating OpenCL Event Objects from OpenGL Sync Objects</a></li>
+<li><a href="#cl_khr_d3d10_sharing">13. Creating OpenCL Memory Objects from Direct3D 10 Buffers and Textures</a></li>
+<li><a href="#cl_khr_d3d11_sharing">14. Creating OpenCL Memory Objects from Direct3D 11 Buffers and Textures</a></li>
+<li><a href="#cl_khr_dx9_media_sharing">15. Creating OpenCL Memory Objects from DirectX 9 Media Surfaces</a></li>
+<li><a href="#cl_khr_depth_images">16. Depth Images</a></li>
+<li><a href="#cl_khr_gl_depth_images">17. Sharing OpenGL and OpenGL ES Depth and Depth-Stencil Images</a></li>
+<li><a href="#cl_khr_gl_msaa_sharing">18. Creating OpenCL Memory Objects from OpenGL MSAA Textures</a></li>
+<li><a href="#cl_khr_egl_event">19. Creating OpenCL Event Objects from EGL Sync Objects</a></li>
+<li><a href="#cl_khr_egl_image">20. Creating OpenCL Memory Objects from EGL Images</a></li>
+<li><a href="#cl_khr_image2d_from_buffer">21. Creating a 2D Image From A Buffer</a></li>
+<li><a href="#cl_khr_initialize_memory">22. Local and Private Memory Initialization</a></li>
+<li><a href="#cl_khr_terminate_context">23. Terminating OpenCL contexts</a></li>
+<li><a href="#cl_khr_spir">24. Standard Portable Intermediate Representation Binaries</a></li>
+<li><a href="#cl_khr_il_program">25. Intermediate Language Programs</a></li>
+<li><a href="#cl_khr_create_command_queue">26. Creating Command Queues with Properties</a></li>
+<li><a href="#cl_khr_device_enqueue_local_arg_types">27. Device Enqueue Local Argument Types</a></li>
+<li><a href="#cl_khr_subgroups">28. Subgroups</a></li>
+<li><a href="#cl_khr_mipmap_image">29. Mipmaps</a></li>
+<li><a href="#cl_khr_srgb_image_writes">30. sRGB Image Writes</a></li>
+<li><a href="#cl_khr_priority_hints">31. Priority Hints</a></li>
+<li><a href="#cl_khr_throttle_hints">32. Throttle Hints</a></li>
+<li><a href="#cl_khr_subgroup_named_barrier">33. Named Barriers for Subgroups</a></li>
+<li><a href="#spirv_extensions">34. Extensions to the OpenCL SPIR-V Environment</a></li>
+<li><a href="#_extensions_promoted_to_core_features">Appendix A: Extensions Promoted to Core Features</a></li>
+<li><a href="#_deprecated_extensions">Appendix B: Deprecated Extensions</a></li>
+<li><a href="#_quick_reference">Appendix C: Quick Reference</a></li>
 </ul>
 </div>
 </div>
@@ -877,7 +892,7 @@
 <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>Copyright 2008-2018 The Khronos Group.</p>
+<p>Copyright 2008-2019 The Khronos Group.</p>
 </div>
 <div class="paragraph">
 <p>This specification is protected by copyright laws and contains material proprietary
@@ -908,7 +923,7 @@
 otherwise, arising from or in connection with these materials.</p>
 </div>
 <div class="paragraph">
-<p>Vulkan is a registered trademark and Khronos, OpenXR, SPIR, SPIR-V, SYCL, WebGL,
+<p>Vulkan and Khronos are registered trademarks, and OpenXR, SPIR, SPIR-V, SYCL, WebGL,
 WebCL, OpenVX, OpenVG, EGL, COLLADA, glTF, NNEF, OpenKODE, OpenKCAM, StreamInput,
 OpenWF, OpenSL ES, OpenMAX, OpenMAX AL, OpenMAX IL, OpenMAX DL, OpenML and DevU are
 trademarks of the Khronos Group Inc. ASTC is a trademark of ARM Holdings PLC,
@@ -918,25 +933,38 @@
 and/or company names are used solely for identification and belong to their
 respective owners.</p>
 </div>
-<div style="page-break-after: always;"></div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="optional-extensions">1. Optional Extensions</h2>
+<h2 id="extensions-overview">1. Extensions Overview</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>This document describes the list of optional features supported by OpenCL
-2.2.
-Optional extensions may be supported by some OpenCL devices.
+<p>This document describes the list of optional features supported by OpenCL.
 Optional extensions are not required to be supported by a conformant OpenCL
-implementation, but are expected to be widely available; they define
-functionality that is likely to move into the required feature set in a
-future revision of the OpenCL specification.
-A brief description of how OpenCL extensions are defined is provided below.</p>
+implementation, but are expected to be widely available, and in some cases may define
+functionality that is likely to be required in a future revision of the
+OpenCL specification.</p>
 </div>
 <div class="paragraph">
-<p>For OpenCL extensions approved by the OpenCL working group, the following
-naming conventions are used:</p>
+<p>This document describes all extensions that have been approved by the OpenCL
+working group.
+It is a <em>unified</em> specification, meaning that the extensions described in this
+document are not specific to a specific core OpenCL specification version.</p>
+</div>
+<div class="paragraph">
+<p>OpenCL extensions approved by the OpenCL working group may be <em>promoted</em> to
+core features in later revisions of OpenCL.
+When this occurs, the feature described by the extension specification
+is merged into the core OpenCL specification.
+The extension will continue to be documented in this specification, both for
+backwards compatibility and for devices that wish to support the feature
+but that are unable to support the newer core OpenCL version.</p>
+</div>
+<div class="sect2">
+<h3 id="naming-convention-for-optional-extensions">1.1. Naming Convention for Optional Extensions</h3>
+<div class="paragraph">
+<p>OpenCL extensions approved by the OpenCL working group use the following
+naming convention:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -944,8 +972,8 @@
 <p>A unique <em>name string</em> of the form <code>"<strong>cl_khr_&lt;<em>name</em>&gt;</strong>"</code> is associated
 with each extension.
 If the extension is supported by an implementation, this string will be
-present in the implementation&#8217;s CL_PLATFORM_EXTENSIONS string or
-CL_DEVICE_EXTENSIONS string.</p>
+present in the implementation&#8217;s <code>CL_PLATFORM_EXTENSIONS</code> string or
+<code>CL_DEVICE_EXTENSIONS</code> string.</p>
 </li>
 <li>
 <p>All API functions defined by the extension will have names of the form
@@ -958,19 +986,16 @@
 </ul>
 </div>
 <div class="paragraph">
-<p>OpenCL extensions approved by the OpenCL working group can be <em>promoted</em> to
-required core features in later revisions of OpenCL.
-When this occurs, the extension specifications are merged into the core
-specification.
-Functions and enumerants that are part of such promoted extensions will have
-the <strong>KHR</strong> affix removed.
+<p>Functions and enumerants defined by extensions that are promoted to
+core features will have their <strong>KHR</strong> affix removed.
 OpenCL implementations of such later revisions must also export the name
-strings of promoted extensions in the CL_PLATFORM_EXTENSIONS or
-CL_DEVICE_EXTENSIONS string, and support the <strong>KHR</strong>-affixed versions of
+strings of promoted extensions in the <code>CL_PLATFORM_EXTENSIONS</code> or
+<code>CL_DEVICE_EXTENSIONS</code> string, and support the <strong>KHR</strong>-affixed versions of
 functions and enumerants as a transition aid.</p>
 </div>
 <div class="paragraph">
-<p>For vendor extensions, the following naming conventions are used:</p>
+<p>Vendor extensions are strongly encouraged to follow a similar naming
+convention:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -978,8 +1003,8 @@
 <p>A unique <em>name string</em> of the form <code>"<strong>cl_&lt;<em>vendor_name</em>&gt;_&lt;<em>name&gt;</em></strong>"</code>
 is associated with each extension.
 If the extension is supported by an implementation, this string will be
-present in the implementation&#8217;s CL_PLATFORM_EXTENSIONS string or
-CL_DEVICE_EXTENSIONS string.</p>
+present in the implementation&#8217;s <code>CL_PLATFORM_EXTENSIONS</code> string or
+<code>CL_DEVICE_EXTENSIONS</code> string.</p>
 </li>
 <li>
 <p>All API functions defined by the vendor extension will have names of the
@@ -991,8 +1016,9 @@
 </li>
 </ul>
 </div>
+</div>
 <div class="sect2">
-<h3 id="compiler-directives-for-optional-extensions">1.1. Compiler Directives for Optional Extensions</h3>
+<h3 id="compiler-directives-for-optional-extensions">1.2. Compiler Directives for Optional Extensions</h3>
 <div class="paragraph">
 <p>The <strong>#pragma OPENCL EXTENSION</strong> directive controls the behavior of the OpenCL
 compiler with respect to extensions.
@@ -1000,8 +1026,8 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#pragma OPENCL EXTENSION &lt;extension_name&gt; : &lt;behavior&gt;
-#pragma OPENCL EXTENSION all : &lt;behavior&gt;</code></pre>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#pragma</span> OPENCL EXTENSION &lt;extension_name&gt; : &lt;behavior&gt;
+<span class="preprocessor">#pragma</span> OPENCL EXTENSION all : &lt;behavior&gt;</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1014,7 +1040,7 @@
 The <em>behavior</em> can be set to one of the following values given by the table
 below.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 75%;">
@@ -1028,17 +1054,17 @@
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enable</strong></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Behave as specified by the extension <em>extension_name</em>.
-</p><p class="tableblock">  Report an error on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the
+<td class="tableblock halign-left valign-top"><p class="tableblock">Behave as specified by the extension <em>extension_name</em>.</p>
+<p class="tableblock">  Report an error on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the
   <em>extension_name</em> is not supported, or if <strong>all</strong> is specified.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>disable</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Behave (including issuing errors and warnings) as if the extension
-  <em>extension_name</em> is not part of the language definition.
-</p><p class="tableblock">  If <strong>all</strong> is specified, then behavior must revert back to that of the
-  non-extended core version of the language being compiled to.
-</p><p class="tableblock">  Warn on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the extension <em>extension_name</em>
+  <em>extension_name</em> is not part of the language definition.</p>
+<p class="tableblock">  If <strong>all</strong> is specified, then behavior must revert back to that of the
+  non-extended core version of the language being compiled to.</p>
+<p class="tableblock">  Warn on the <strong><code>#pragma OPENCL EXTENSION</code></strong> if the extension <em>extension_name</em>
   is not supported.</p></td>
 </tr>
 </tbody>
@@ -1059,7 +1085,7 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#pragma OPENCL EXTENSION all : disable</code></pre>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#pragma</span> OPENCL EXTENSION all : disable</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1083,24 +1109,24 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#ifdef cl_khr_3d_image_writes
-    // do something using the extension
-#else
-    // do something else or #error!
-#endif</code></pre>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#ifdef</span> cl_khr_3d_image_writes
+    <span class="comment">// do something using the extension</span>
+<span class="preprocessor">#else</span>
+    <span class="comment">// do something else or #error!</span>
+<span class="preprocessor">#endif</span></code></pre>
 </div>
 </div>
 </div>
 <div class="sect2">
-<h3 id="getting-opencl-api-extension-function-pointers">1.2. Getting OpenCL API Extension Function Pointers</h3>
+<h3 id="getting-opencl-api-extension-function-pointers">1.3. Getting OpenCL API Extension Function Pointers</h3>
 <div class="paragraph">
 <p>The function
 </p>
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>void* clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
-                                               const char *funcname)</code></pre>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="directive">void</span>* clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
+                                               <span class="directive">const</span> <span class="predefined-type">char</span> *funcname)</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1148,19 +1174,19 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#ifndef extension_name
-#define extension_name 1
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#ifndef</span> extension_name
+<span class="preprocessor">#define</span> extension_name <span class="integer">1</span>
 
-// all data typedefs, token #defines, prototypes, and
-// function pointer typedefs for this extension
+<span class="comment">// all data typedefs, token #defines, prototypes, and</span>
+<span class="comment">// function pointer typedefs for this extension</span>
 
-// function pointer typedefs must use the
-// following naming convention
+<span class="comment">// function pointer typedefs must use the</span>
+<span class="comment">// following naming convention</span>
 
-typedef CL_API_ENTRY return_type
+<span class="keyword">typedef</span> CL_API_ENTRY return_type
             (CL_API_CALL *clExtensionFunctionNameTAG_fn)(...);
 
-#endif // _extension_name_</code></pre>
+<span class="preprocessor">#endif</span> <span class="comment">// _extension_name_</span></code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1172,39 +1198,563 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#ifndef cl_khr_gl_sharing
-#define cl_khr_gl_sharing 1
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#ifndef</span> cl_khr_gl_sharing
+<span class="preprocessor">#define</span> cl_khr_gl_sharing <span class="integer">1</span>
 
-// all data typedefs, token #defines, prototypes, and
-// function pointer typedefs for this extension
-#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000
-#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR 0x2006
-#define CL_DEVICES_FOR_GL_CONTEXT_KHR 0x2007
-#define CL_GL_CONTEXT_KHR 0x2008
-#define CL_EGL_DISPLAY_KHR 0x2009
-#define CL_GLX_DISPLAY_KHR 0x200A
-#define CL_WGL_HDC_KHR 0x200B
-#define CL_CGL_SHAREGROUP_KHR 0x200C
+<span class="comment">// all data typedefs, token #defines, prototypes, and</span>
+<span class="comment">// function pointer typedefs for this extension</span>
+<span class="preprocessor">#define</span> CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR  -<span class="integer">1000</span>
+<span class="preprocessor">#define</span> CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR    <span class="hex">0x2006</span>
+<span class="preprocessor">#define</span> CL_DEVICES_FOR_GL_CONTEXT_KHR           <span class="hex">0x2007</span>
+<span class="preprocessor">#define</span> CL_GL_CONTEXT_KHR                       <span class="hex">0x2008</span>
+<span class="preprocessor">#define</span> CL_EGL_DISPLAY_KHR                      <span class="hex">0x2009</span>
+<span class="preprocessor">#define</span> CL_GLX_DISPLAY_KHR                      <span class="hex">0x200A</span>
+<span class="preprocessor">#define</span> CL_WGL_HDC_KHR                          <span class="hex">0x200B</span>
+<span class="preprocessor">#define</span> CL_CGL_SHAREGROUP_KHR                   <span class="hex">0x200C</span>
 
-// function pointer typedefs must use the
-// following naming convention
-typedef CL_API_ENTRY cl_int
+<span class="comment">// function pointer typedefs must use the</span>
+<span class="comment">// following naming convention</span>
+<span class="keyword">typedef</span> CL_API_ENTRY cl_int
         (CL_API_CALL *clGetGLContextInfoKHR_fn)(
-            const cl_context_properties * /* properties */,
-            cl_gl_context_info /* param_name */,
-            size_t /* param_value_size */,
-            void * /* param_value */,
-            size_t * /*param_value_size_ret*/);
+            <span class="directive">const</span> cl_context_properties * <span class="comment">/* properties */</span>,
+            cl_gl_context_info <span class="comment">/* param_name */</span>,
+            size_t <span class="comment">/* param_value_size */</span>,
+            <span class="directive">void</span> * <span class="comment">/* param_value */</span>,
+            size_t * <span class="comment">/*param_value_size_ret*/</span>);
 
-#endif // cl_khr_gl_sharing</code></pre>
+<span class="preprocessor">#endif</span> <span class="comment">// cl_khr_gl_sharing</span></code></pre>
 </div>
 </div>
-<div style="page-break-after: always;"></div>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="cl_khr_fp16">2. Half Precision Floating-Point</h2>
+<h2 id="cl_khr_icd-opencl">2. Installable Client Drivers</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="cl_khr_icd-overview">2.1. Overview</h3>
+<div class="paragraph">
+<p>This section describes a platform extension which defines a simple mechanism
+through which the Khronos OpenCL installable client driver loader (ICD
+Loader) may expose multiple separate vendor installable client drivers
+(Vendor ICDs) for OpenCL.
+An application written against the ICD Loader will be able to access all
+cl_platform_ids exposed by all vendor implementations with the ICD Loader
+acting as a demultiplexor.</p>
+</div>
+<div class="paragraph">
+<p>This is a platform extension, so if this extension is supported by an
+implementation, the string <strong>cl_khr_icd</strong> will be present in the
+<code>CL_PLATFORM_EXTENSIONS</code> string.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-inferring-vendors-from-function-call-arguments">2.2. Inferring Vendors from Function Call Arguments</h3>
+<div class="paragraph">
+<p>At every OpenCL function call, the ICD Loader infers the vendor ICD function
+to call from the arguments to the function.
+An object is said to be ICD compatible if it is of the following structure:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="c"><span class="keyword">struct</span> _cl_&lt;object&gt;
+{
+    <span class="keyword">struct</span> _cl_icd_dispatch *dispatch;
+    <span class="comment">// ... remainder of internal data</span>
+};</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>&lt;object&gt; is one of platform_id, device_id, context, command_queue, mem,
+program, kernel, event, or sampler.</p>
+</div>
+<div class="paragraph">
+<p>The structure <code>_cl_icd_dispatch</code> is a function pointer dispatch table which
+is used to direct calls to a particular vendor implementation.
+All objects created from ICD compatible objects must be ICD compatible.</p>
+</div>
+<div class="paragraph">
+<p>The order of the functions in <code>_cl_icd_dispatch</code> is determined by the ICD
+Loader&#8217;s source.
+The ICD Loader&#8217;s source&#8217;s <code>_cl_icd_dispatch</code> table is to be appended to
+only.</p>
+</div>
+<div class="paragraph">
+<p>Functions which do not have an argument from which the vendor implementation
+may be inferred have been deprecated and may be ignored.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-icd-data">2.3. ICD Data</h3>
+<div class="paragraph">
+<p>A Vendor ICD is defined by two pieces of data:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The Vendor ICD library specifies a library which contains the OpenCL
+entry points for the vendor&#8217;s OpenCL implementation.
+The vendor ICD&#8217;s library file name should include the vendor name, or a
+vendor-specific implementation identifier.</p>
+</li>
+<li>
+<p>The Vendor ICD extension suffix is a short string which specifies the
+default suffix for extensions implemented only by that vendor.
+The vendor suffix string is optional.</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-icd-loader-vendor-enumeration-on-windows">2.4. ICD Loader Vendor Enumeration on Windows</h3>
+<div class="paragraph">
+<p>To enumerate Vendor ICDs on Windows, the ICD Loader will first
+scan for REG_SZ string values in the "Display Adapter" and
+"Software Components" HKR registry keys.  The exact registry
+keys to scan should be obtained via PnP Configuration Manager
+APIs, but will look like:</p>
+</div>
+<div class="paragraph">
+<p>For 64-bit ICDs:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>HKLM\SYSTEM\CurrentControlSet\Control\Class\
+{Display Adapter GUID}\{Instance ID}\OpenCLDriverName, or
+
+HKLM\SYSTEM\CurrentControlSet\Control\Class\
+{Software Component GUID}\{Instance ID}\OpenCLDriverName</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For 32-bit ICDs:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>HKLM\SYSTEM\CurrentControlSet\Control\Class\
+{Display Adapter GUID}\{Instance ID}\OpenCLDriverNameWoW, or
+
+HKLM\SYSTEM\CurrentControlSet\Control\Class\
+{Software Component GUID}\{Instance ID}\OpenCLDriverNameWoW</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>These registry values contain the path to the Vendor ICD library.
+For example, if the registry contains the value:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>[HKLM\SYSTEM\CurrentControlSet\Control\Class\{GUID}\{Instance}]
+"OpenCLDriverName"="c:\\vendor a\\vndra_ocl.dll"</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then the ICD Loader will open the Vendor ICD library:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>c:\vendor a\vndra_ocl.dll</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The ICD Loader will also scan for REG_DWORD values in the registry
+key:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>HKLM\SOFTWARE\Khronos\OpenCL\Vendors</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>For each registry value in this key which has data set to 0, the
+ICD Loader will open the Vendor ICD library specified by the name
+of the registry value.</p>
+</div>
+<div class="paragraph">
+<p>For example, if the registry contains the value:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>[HKLM\SOFTWARE\Khronos\OpenCL\Vendors]
+"c:\\vendor a\\vndra_ocl.dll"=dword:00000000</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then the ICD will open the Vendor ICD library:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>c:\vendor a\vndra_ocl.dll</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-icd-loader-vendor-enumeration-on-linux">2.5. ICD Loader Vendor Enumeration on Linux</h3>
+<div class="paragraph">
+<p>To enumerate vendor ICDs on Linux, the ICD Loader scans the files in the
+path <code>/etc/OpenCL/vendors</code>.
+For each file in this path, the ICD Loader opens the file as a text file.
+The expected format for the file is a single line of text which specifies
+the Vendor ICD&#8217;s library.
+The ICD Loader will attempt to open that file as a shared object using
+dlopen().
+Note that the library specified may be an absolute path or just a file name.</p>
+</div>
+<div class="paragraph">
+<p>For example, if the following file exists</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>/etc/OpenCL/vendors/VendorA.icd</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and contains the text</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>libVendorAOpenCL.so</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>then the ICD Loader will load the library <code>libVendorAOpenCL.so</code>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-icd-loader-vendor-enumeration-on-android">2.6. ICD Loader Vendor Enumeration on Android</h3>
+<div class="paragraph">
+<p>To enumerate vendor ICDs on Android, the ICD Loader scans the files in the
+path <code>/system/vendor/Khronos/OpenCL/vendors</code>.
+For each file in this path, the ICD Loader opens the file as a text file.
+The expected format for the file is a single line of text which specifies
+the Vendor ICD&#8217;s library.
+The ICD Loader will attempt to open that file as a shared object using
+dlopen().
+Note that the library specified may be an absolute path or just a file name.</p>
+</div>
+<div class="paragraph">
+<p>For example, if the following file exists</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>/system/vendor/Khronos/OpenCL/vendors/VendorA.icd</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>and contains the text</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>libVendorAOpenCL.so</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>then the ICD Loader will load the library <code>libVendorAOpenCL.so</code>.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-adding-a-vendor-library">2.7. Adding a Vendor Library</h3>
+<div class="paragraph">
+<p>Upon successfully loading a Vendor ICD&#8217;s library, the ICD Loader queries the
+following functions from the library: <strong>clIcdGetPlatformIDsKHR</strong>,
+<strong>clGetPlatformInfo</strong>, and <strong>clGetExtensionFunctionAddress</strong> (note:
+<strong>clGetExtensionFunctionAddress</strong> has been deprecated, but is still required
+for the ICD loader).
+If any of these functions are not present then the ICD Loader will close and
+ignore the library.</p>
+</div>
+<div class="paragraph">
+<p>Next the ICD Loader queries available ICD-enabled platforms in the library
+using <strong>clIcdGetPlatformIDsKHR</strong>.
+For each of these platforms, the ICD Loader queries the platform&#8217;s extension
+string to verify that <strong>cl_khr_icd</strong> is supported, then queries the platform&#8217;s
+Vendor ICD extension suffix using <strong>clGetPlatformInfo</strong> with the value
+CL_PLATFORM_ICD_SUFFIX_KHR.</p>
+</div>
+<div class="paragraph">
+<p>If any of these steps fail, the ICD Loader will ignore the Vendor ICD and
+continue on to the next.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-new-procedures-and-functions">2.8. New Procedures and Functions</h3>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="c">cl_int clIcdGetPlatformIDsKHR(cl_uint num_entries,
+                              cl_platform_id *platforms,
+                              cl_uint *num_platforms);</code></pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-new-tokens">2.9. New Tokens</h3>
+<div class="paragraph">
+<p>Accepted as <em>param_name</em> to the function <strong>clGetPlatformInfo</strong>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>CL_PLATFORM_ICD_SUFFIX_KHR</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Returned by <strong>clGetPlatformIDs</strong> when no platforms are found:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>CL_PLATFORM_NOT_FOUND_KHR</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-additions-to-chapter-4">2.10. Additions to Chapter 4 of the OpenCL 2.2 Specification</h3>
+<div class="paragraph">
+<p>In <em>section 4.1</em>, replace the description of the return values of
+<strong>clGetPlatformIDs</strong> with:</p>
+</div>
+<div class="paragraph">
+<p>"clGetPlatformIDs* returns CL_SUCCESS if the function is executed
+successfully and there are a non zero number of platforms available.
+It returns CL_PLATFORM_NOT_FOUND_KHR if zero platforms are available.
+It returns CL_INVALID_VALUE if <em>num_entries</em> is equal to zero and
+<em>platforms</em> is not <code>NULL</code> or if both <em>num_platforms</em> and <em>platforms</em> are
+<code>NULL</code>."</p>
+</div>
+<div class="paragraph">
+<p>In <em>section 4.1</em>, add the following after the description of
+<strong>clGetPlatformIDs</strong>:</p>
+</div>
+<div class="paragraph">
+<p>"The list of platforms accessible through the Khronos ICD Loader can be
+obtained using the following function:
+</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="c">cl_int clIcdGetPlatformIDsKHR(cl_uint num_entries,
+                              cl_platform_id *platforms,
+                              cl_uint *num_platforms);</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p><em>num_entries</em> is the number of cl_platform_id entries that can be added to
+<em>platforms</em>.
+If <em>platforms</em> is not <code>NULL</code>, then <em>num_entries</em> must be greater than zero.</p>
+</div>
+<div class="paragraph">
+<p><em>platforms</em> returns a list of OpenCL platforms available for access through
+the Khronos ICD Loader.
+The cl_platform_id values returned in <em>platforms</em> are ICD compatible and can
+be used to identify a specific OpenCL platform.
+If the <em>platforms</em> argument is <code>NULL</code>, then this argument is ignored.
+The number of OpenCL platforms returned is the minimum of the value
+specified by <em>num_entries</em> or the number of OpenCL platforms available.</p>
+</div>
+<div class="paragraph">
+<p><em>num_platforms</em> returns the number of OpenCL platforms available.
+If <em>num_platforms</em> is <code>NULL</code>, then this argument is ignored.</p>
+</div>
+<div class="paragraph">
+<p><strong>clIcdGetPlatformIDsKHR</strong> returns CL_SUCCESS if the function is executed
+successfully and there are a non zero number of platforms available.
+It returns CL_PLATFORM_NOT_FOUND_KHR if zero platforms are available.
+It returns CL_INVALID_VALUE if <em>num_entries</em> is equal to zero and
+<em>platforms</em> is not <code>NULL</code> or if both <em>num_platforms</em> and <em>platforms</em> are
+<code>NULL</code>."</p>
+</div>
+<div class="paragraph">
+<p>Add the following to <em>table 4.1</em>:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 40%;">
+<col style="width: 20%;">
+<col style="width: 40%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>cl_platform_info enum</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Return Type</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_PLATFORM_ICD_SUFFIX_KHR</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">char[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The function name suffix used to identify extension functions to be
+  directed to this platform by the ICD Loader.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-source-code">2.11. Source Code</h3>
+<div class="paragraph">
+<p>The official source for the ICD loader is available on github, at:</p>
+</div>
+<div class="paragraph">
+<p><a href="https://github.com/KhronosGroup/OpenCL-ICD-Loader" class="bare">https://github.com/KhronosGroup/OpenCL-ICD-Loader</a></p>
+</div>
+<div class="paragraph">
+<p>The complete <code>_cl_icd_dispatch</code> structure is defined in the header
+<strong>icd_dispatch.h</strong>, which is available as a part of the source code.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_icd-issues">2.12. Issues</h3>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Some OpenCL functions do not take an object argument from which their
+vendor library may be identified (e.g, clUnloadCompiler), how will they
+be handled?</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>RESOLVED: Such functions will be a noop for all calls through the ICD.</p>
+</div>
+</div>
+</div>
+</li>
+<li>
+<p>How are OpenCL extension to be handled?</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>RESOLVED: OpenCL extension functions may be added to the ICD as soon as they
+are implemented by any vendor.
+The suffix mechanism provides access for vendor extensions which are not yet
+added to the ICD.</p>
+</div>
+</div>
+</div>
+</li>
+<li>
+<p>How will the ICD handle a <code>NULL</code> cl_platform_id?</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>RESOLVED: The ICD will by default choose the first enumerated platform as
+the <code>NULL</code> platform.
+The user can override this default by setting an environment variable
+OPENCL_ICD_DEFAULT_PLATFORM to the desired platform index.
+The API calls that deal with platforms will return CL_INVALID_PLATFORM if
+the index is not between zero and (number of platforms - 1), both inclusive.</p>
+</div>
+</div>
+</div>
+</li>
+<li>
+<p>There exists no mechanism to unload the ICD, should there be one?</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>RESOLVED: As there is no standard mechanism for unloading a vendor
+implementation, do not add one for the ICD.</p>
+</div>
+</div>
+</div>
+</li>
+<li>
+<p>How will the ICD loader handle <code>NULL</code> objects passed to the OpenCL
+functions?</p>
+<div class="openblock">
+<div class="content">
+<div class="paragraph">
+<p>RESOLVED: The ICD loader will check for <code>NULL</code> objects passed to the OpenCL
+functions without trying to dereference the <code>NULL</code> objects for obtaining the
+ICD dispatch table.
+On detecting a <code>NULL</code> object it will return one of the CL_INVALID_* error
+values corresponding to the object in question.</p>
+</div>
+</div>
+</div>
+</li>
+</ol>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="cl_khr_byte_addressable_store">3. Byte Addressable Stores</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This section describes the <strong>cl_khr_byte_addressable_store</strong> extension.
+This extension relaxes restrictions on pointers to <code>char</code>, <code>uchar</code>, <code>char2</code>, <code>uchar2</code>, <code>short</code>, <code>ushort</code> and <code>half</code> that were present in <em>Section 6.8m: Restrictions</em> of the OpenCL 1.0 specification.
+With this extension, applications are able to read from and write to pointers to these types.</p>
+</div>
+<div class="paragraph">
+<p>This extension became a core feature in OpenCL 1.1.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="cl_khr_3d_image_writes">4. Writing to 3D Image Objects</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This section describes the <strong>cl_khr_3d_image_writes</strong> extension.</p>
+</div>
+<div class="paragraph">
+<p>This extension adds built-in functions that allow a kernel to write to 3D image objects in addition to 2D image objects.</p>
+</div>
+<div class="paragraph">
+<p>This extension became a core feature in OpenCL 2.0.</p>
+</div>
+<div class="paragraph">
+<p>The new built-in functions are described in the table below:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. <em>3D Image Built-in Image Write Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>write_imagef</strong> (<br>
+image3d_t <em>image</em>,<br>
+int4 <em>coord</em>,<br>
+float4 <em>color</em>)<br>
+<br>
+void <strong>write_imagei</strong> (<br>
+image3d_t <em>image</em>,<br>
+int4 <em>coord</em>,<br>
+int4 <em>color</em>)<br>
+<br>
+void <strong>write_imageui</strong> (<br>
+image3d_t <em>image</em>,<br>
+int4 <em>coord</em>,<br>
+uint4 <em>color</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Write <em>color</em> value to the location specified by coordinate (<em>x</em>, <em>y</em>, <em>z</em>) in the 3D image specified by <em>image</em>.
+The appropriate data format conversion to the specified image format is done before writing the color value.
+<em>coord.x</em>, <em>coord.y</em>, and <em>coord.z</em> are considered to be unnormalized coordinates and must be in the range 0 &#8230;&#8203; image width - 1, 0 &#8230;&#8203; image height - 1, and 0 &#8230;&#8203; image depth - 1.<br>
+<br>
+<strong>write_imagef</strong> can only be used with image objects created with <em>image_channel_data_type</em> set to one of the pre-defined packed formats or set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16, CL_HALF_FLOAT, or CL_FLOAT.  Appropriate data format conversion will be done to convert the channel data from a floating-point value to the actual data format in which the channels are stored.<br>
+<br>
+<strong>write_imagei</strong> can only be used with image objects created with <em>image_channel_data_type</em> set to one of the following values:<br>
+CL_SIGNED_INT8,<br>
+CL_SIGNED_INT16, or<br>
+CL_SIGNED_INT32.<br>
+<br>
+<strong>write_imageui</strong> can only be used with image objects created with <em>image_channel_data_type</em> set to one of the following values:<br>
+CL_UNSIGNED_INT8,<br>
+CL_UNSIGNED_INT16, or<br>
+CL_UNSIGNED_INT32.<br>
+<br>
+The behavior of <strong>write_imagef</strong>, <strong>write_imagei</strong>, and <strong>write_imageui</strong> for image objects created with <em>image_channel_data_type</em> values not specified in the description above, or with (<em>x</em>, <em>y</em>, <em>z</em>) coordinate values that are not in the range (0 &#8230;&#8203; image width - 1, 0 &#8230;&#8203; image height - 1, 0 &#8230;&#8203; image depth - 1) respectively, is undefined.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="sect1">
+<h2 id="cl_khr_fp16">5. Half Precision Floating-Point</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>This section describes the <strong>cl_khr_fp16</strong> extension.
@@ -1212,12 +1762,12 @@
 types that can be used for arithmetic operations, conversions etc.</p>
 </div>
 <div class="sect2">
-<h3 id="cl_khr_fp16-additions-to-chapter-6-of-the-opencl-2.0-specification">2.1. Additions to Chapter 6 of the OpenCL 2.0 C Specification</h3>
+<h3 id="cl_khr_fp16-additions-to-chapter-6-of-the-opencl-2.0-specification">5.1. Additions to Chapter 6 of the OpenCL 2.0 C Specification</h3>
 <div class="paragraph">
 <p>The list of built-in scalar, and vector data types defined in <em>tables 6.1</em>,
 and <em>6.2</em> are extended to include the following:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 75%;">
@@ -1259,7 +1809,7 @@
 defined in the OpenCL C programming language and the corresponding data type
 available to the application:</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1303,7 +1853,7 @@
 indicating the literal is typed as a half.</p>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-conversions">2.1.1. Conversions</h4>
+<h4 id="cl_khr_fp16-conversions">5.1.1. Conversions</h4>
 <div class="paragraph">
 <p>The implicit conversion rules specified in <em>section 6.2.1</em> now include the
 <code>half</code> scalar and <code>halfn</code> vector data types.</p>
@@ -1323,10 +1873,10 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-math-functions">2.1.2. Math Functions</h4>
+<h4 id="cl_khr_fp16-math-functions">5.1.2. Math Functions</h4>
 <div class="paragraph">
 <p>The built-in math functions defined in <em>table 6.8</em> (also listed below) are
-extended to include appropriate versions of functions that take <code>half</code>, and
+extended to include appropriate versions of functions that take <code>half</code> and
 <code>half{2|3|4|8|16}</code> as arguments and return values.
 <code>gentype</code> now also includes <code>half</code>, <code>half2</code>, <code>half3</code>, <code>half4</code>, <code>half8</code>, and
 <code>half16</code>.</p>
@@ -1335,8 +1885,8 @@
 <p>For any specific use of a function, the actual type has to be the same for
 all arguments and the return type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 1. <em>Half Precision Built-in Math Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 2. <em>Half Precision Built-in Math Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1411,7 +1961,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cosh</strong> (gentype <em>x</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic consine.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic cosine.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cospi</strong> (gentype <em>x</em>)</p></td>
@@ -1459,10 +2009,10 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns the correctly rounded floating-point representation of the sum of
   <em>c</em> with the infinitely precise product of <em>a</em> and <em>b</em>.
   Rounding of intermediate products shall not occur.
-  Edge case behavior is per the IEEE 754-2008.</p></td>
+  Edge case behavior is per the IEEE 754-2008 standard.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmax</strong> (gentype x, gentype y)<br>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmax</strong> (gentype <em>x</em>, gentype <em>y</em>)<br>
   gentype <strong>fmax</strong> (gentype <em>x</em>, half <em>y</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>x</em> &lt; <em>y</em>, otherwise it returns <em>x</em>.
   If one argument is a NaN, <strong>fmax()</strong> returns the other argument.
@@ -1481,12 +2031,27 @@
   Returns <em>x</em> - <em>y</em> * <strong>trunc</strong> (<em>x</em>/<em>y</em>) .</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fract</strong> (gentype <em>x</em>, gentype *<em>iptr</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>fmin</strong>( <em>x</em> - <strong>floor</strong> (<em>x</em>), 0x1.ffcp-1f ).
-</p><p class="tableblock">  <strong>floor</strong>(x) is returned in <em>iptr</em>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fract</strong> (gentype <em>x</em>, __global gentype *<em>iptr</em>)<br>
+  gentype <strong>fract</strong> (gentype <em>x</em>, __local gentype *<em>iptr</em>)<br>
+  gentype <strong>fract</strong> (gentype <em>x</em>, __private gentype *<em>iptr</em>)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
+  gentype <strong>fract</strong> (gentype <em>x</em>, gentype *<em>iptr</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>fmin</strong>( <em>x</em> - <strong>floor</strong> (<em>x</em>), 0x1.ffcp-1f ).</p>
+<p class="tableblock">  <strong>floor</strong>(x) is returned in <em>iptr</em>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">half<em>n</em> <strong>frexp</strong> (half<em>n</em> <em>x</em>, int<em>n</em> *exp)<br>
+<td class="tableblock halign-left valign-top"><p class="tableblock">half<em>n</em> <strong>frexp</strong> (half<em>n x</em>, __global int<em>n</em> *exp)<br>
+  half<em>n</em> <strong>frexp</strong> (half<em>n x</em>, __local int<em>n</em> *exp)<br>
+  half<em>n</em> <strong>frexp</strong> (half<em>n x</em>, __private int<em>n</em> *exp)<br>
+  half <strong>frexp</strong> (half <em>x</em>, __global int *exp)<br>
+  half <strong>frexp</strong> (half <em>x</em>, __local int *exp)<br>
+  half <strong>frexp</strong> (half <em>x</em>, __private int *exp)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
+  half<em>n</em> <strong>frexp</strong> (half<em>n</em> <em>x</em>, int<em>n</em> *exp)<br>
   half <strong>frexp</strong> (half <em>x</em>, int *exp)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Extract mantissa and exponent from <em>x</em>.
   For each component the mantissa returned is a float with magnitude in the
@@ -1511,6 +2076,15 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>lgamma</strong> (gentype <em>x</em>)<br>
+  half<em>n</em> <strong>lgamma_r</strong> (half<em>n</em> <em>x</em>, __global int<em>n</em> *<em>signp</em>)<br>
+  half<em>n</em> <strong>lgamma_r</strong> (half<em>n</em> <em>x</em>, __local int<em>n</em> *<em>signp</em>)<br>
+  half<em>n</em> <strong>lgamma_r</strong> (half<em>n</em> <em>x</em>, __private int<em>n</em> *<em>signp</em>)<br>
+  half <strong>lgamma_r</strong> (half <em>x</em>, __global int *<em>signp</em>)<br>
+  half <strong>lgamma_r</strong> (half <em>x</em>, __local int *<em>signp</em>)<br>
+  half <strong>lgamma_r</strong> (half <em>x</em>, __private int *<em>signp</em>)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
   half<em>n</em> <strong>lgamma_r</strong> (half<em>n</em> <em>x</em>, int<em>n</em> *<em>signp</em>)<br>
   half <strong>lgamma_r</strong> (half <em>x</em>, int *<em>signp</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log gamma function.
@@ -1545,8 +2119,8 @@
   The function may compute <em>a</em> * <em>b</em> + <em>c</em> with reduced accuracy
   in the embedded profile.  See the SPIR-V OpenCL environment specification
   for details. On some hardware the mad instruction may provide better
-  performance than expanded computation of <em>a</em> * <em>b</em> + <em>c</em>.
-</p><p class="tableblock">  Note: For some usages, e.g. <strong>mad</strong>(a, b, -a*b), the half precision
+  performance than expanded computation of <em>a</em> * <em>b</em> + <em>c</em>.</p>
+<p class="tableblock">  Note: For some usages, e.g. <strong>mad</strong>(a, b, -a*b), the half precision
   definition of <strong>mad</strong>() is loose enough that almost any result is allowed
   from <strong>mad</strong>() for some values of a and b.</p></td>
 </tr>
@@ -1561,7 +2135,13 @@
   <strong>fmin</strong>(<em>x</em>, <em>y</em>).</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>modf</strong> (gentype <em>x</em>, gentype *<em>iptr</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>modf</strong> (gentype <em>x</em>, __global gentype *<em>iptr</em>)<br>
+  gentype <strong>modf</strong> (gentype <em>x</em>, __local gentype *<em>iptr</em>)<br>
+  gentype <strong>modf</strong> (gentype <em>x</em>, __private gentype *<em>iptr</em>)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
+  gentype <strong>modf</strong> (gentype <em>x</em>, gentype *<em>iptr</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Decompose a floating-point number.
   The <strong>modf</strong> function breaks the argument <em>x</em> into integral and fractional
   parts, each of which has the same sign as the argument.
@@ -1601,7 +2181,16 @@
   If <em>r</em> is zero, it is given the same sign as <em>x</em>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">half<em>n</em> <strong>remquo</strong> (half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>, int<em>n</em> *<em>quo</em>)<br>
+<td class="tableblock halign-left valign-top"><p class="tableblock">half<em>n</em> <strong>remquo</strong> (half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>, __global int<em>n</em> *<em>quo</em>)<br>
+  half<em>n</em> <strong>remquo</strong> (half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>, __local int<em>n</em> *<em>quo</em>)<br>
+  half<em>n</em> <strong>remquo</strong> (half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>, __private int<em>n</em> *<em>quo</em>)<br>
+  half <strong>remquo</strong> (half <em>x</em>, half <em>y</em>, __global int *<em>quo</em>)<br>
+  half <strong>remquo</strong> (half <em>x</em>, half <em>y</em>, __local int *<em>quo</em>)<br>
+  half <strong>remquo</strong> (half <em>x</em>, half <em>y</em>, __private int *<em>quo</em>)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
+  half<em>n</em> <strong>remquo</strong> (half<em>n</em> <em>x</em>, half<em>n</em> <em>y</em>, int<em>n</em> *<em>quo</em>)<br>
   half <strong>remquo</strong> (half <em>x</em>, half <em>y</em>, int *<em>quo</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <strong>remquo</strong> function computes the value r such that <em>r</em> = <em>x</em> - <em>k</em>*<em>y</em>,
   where <em>k</em> is the integer nearest the exact value of <em>x</em>/<em>y</em>.
@@ -1637,7 +2226,13 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Compute sine.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sincos</strong> (gentype <em>x</em>, gentype *<em>cosval</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sincos</strong> (gentype <em>x</em>, __global gentype *<em>cosval</em>)<br>
+  gentype <strong>sincos</strong> (gentype <em>x</em>, __local gentype *<em>cosval</em>)<br>
+  gentype <strong>sincos</strong> (gentype <em>x</em>, __private gentype *<em>cosval</em>)<br>
+  <br>
+  If OpenCL 2.0 or newer:<br>
+  <br>
+  gentype <strong>sincos</strong> (gentype <em>x</em>, gentype *<em>cosval</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Compute sine and cosine of x.
   The computed sine is the return value and computed cosine is returned in
   <em>cosval</em>.</p></td>
@@ -1682,7 +2277,7 @@
 floating-point.
 If defined, the <strong>FP_FAST_FMA_HALF</strong> macro shall indicate that the <strong>fma()</strong>
 function generally executes about as fast as, or faster than, a multiply and
-an add of <strong>half</strong> operands</p>
+an add of <strong>half</strong> operands.</p>
 </div>
 <div class="paragraph">
 <p>The macro names given in the following list must use the values specified.
@@ -1691,16 +2286,16 @@
 </div>
 <div class="listingblock">
 <div class="content">
-<pre class="CodeRay highlight"><code>#define HALF_DIG            3
-#define HALF_MANT_DIG       11
-#define HALF_MAX_10_EXP     +4
-#define HALF_MAX_EXP        +16
-#define HALF_MIN_10_EXP     -4
-#define HALF_MIN_EXP        -13
-#define HALF_RADIX          2
-#define HALF_MAX            0x1.ffcp15h
-#define HALF_MIN            0x1.0p-14h
-#define HALF_EPSILON        0x1.0p-10h</code></pre>
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#define</span> HALF_DIG            <span class="integer">3</span>
+<span class="preprocessor">#define</span> HALF_MANT_DIG       <span class="integer">11</span>
+<span class="preprocessor">#define</span> HALF_MAX_10_EXP     +<span class="integer">4</span>
+<span class="preprocessor">#define</span> HALF_MAX_EXP        +<span class="integer">16</span>
+<span class="preprocessor">#define</span> HALF_MIN_10_EXP     -<span class="integer">4</span>
+<span class="preprocessor">#define</span> HALF_MIN_EXP        -<span class="integer">13</span>
+<span class="preprocessor">#define</span> HALF_RADIX          <span class="integer">2</span>
+<span class="preprocessor">#define</span> HALF_MAX            <span class="hex">0x1</span>.ffcp15h
+<span class="preprocessor">#define</span> HALF_MIN            <span class="hex">0x1</span><span class="float">.0</span>p-<span class="integer">14</span>h
+<span class="preprocessor">#define</span> HALF_EPSILON        <span class="hex">0x1</span><span class="float">.0</span>p-<span class="integer">10</span>h</code></pre>
 </div>
 </div>
 <div class="paragraph">
@@ -1708,7 +2303,7 @@
 OpenCL C programming language and the corresponding macro names available to
 the application.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1767,7 +2362,7 @@
 They are of type <code>half</code> and are accurate within the precision of the <code>half</code>
 type.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1835,17 +2430,17 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-common-functions">2.1.3. Common Functions</h4>
+<h4 id="cl_khr_fp16-common-functions">5.1.3. Common Functions</h4>
 <div class="paragraph">
 <p>The built-in common functions defined in <em>table 6.12</em> (also listed below)
-are extended to include appropriate versions of functions that take <code>half</code>,
+are extended to include appropriate versions of functions that take <code>half</code>
 and <code>half{2|3|4|8|16}</code> as arguments and return values.
 gentype now also includes <code>half</code>, <code>half2</code>, <code>half3</code>, <code>half4</code>, <code>half8</code> and
 <code>half16</code>.
 These are described below.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 2. <em>Half Precision Built-in Common Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 3. <em>Half Precision Built-in Common Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1859,11 +2454,11 @@
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>clamp</strong> (<br>
-  gentype <em>x</em>, gentype <em>minval</em>, gentype <em>maxval</em>)
-</p><p class="tableblock">  gentype <strong>clamp</strong> (<br>
+  gentype <em>x</em>, gentype <em>minval</em>, gentype <em>maxval</em>)</p>
+<p class="tableblock">  gentype <strong>clamp</strong> (<br>
   gentype <em>x</em>, half <em>minval</em>, half <em>maxval</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>min</strong>(<strong>max</strong>(<em>x</em>, <em>minval</em>), <em>maxval</em>).
-</p><p class="tableblock">  Results are undefined if <em>minval</em> &gt; <em>maxval</em>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>min</strong>(<strong>max</strong>(<em>x</em>, <em>minval</em>), <em>maxval</em>).</p>
+<p class="tableblock">  Results are undefined if <em>minval</em> &gt; <em>maxval</em>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>degrees</strong> (gentype <em>radians</em>)</p></td>
@@ -1885,11 +2480,11 @@
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>mix</strong> (gentype <em>x</em>, gentype <em>y</em>, gentype <em>a</em>)<br>
   gentype <strong>mix</strong> (gentype <em>x</em>, gentype <em>y</em>, half <em>a</em>)</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the linear blend of <em>x</em> and <em>y</em> implemented as:
-</p><p class="tableblock">  <em>x</em> + (<em>y</em> - <em>x)</em> * <em>a</em>
-</p><p class="tableblock">  <em>a</em> must be a value in the range 0.0 &#8230;&#8203; 1.0.
-  If <em>a</em> is not in the range 0.0 &#8230;&#8203; 1.0, the return values are undefined.
-</p><p class="tableblock">  Note: The half precision <strong>mix</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the linear blend of <em>x</em> and <em>y</em> implemented as:</p>
+<p class="tableblock">  <em>x</em> + (<em>y</em> - <em>x)</em> * <em>a</em></p>
+<p class="tableblock">  <em>a</em> must be a value in the range 0.0 &#8230;&#8203; 1.0.
+  If <em>a</em> is not in the range 0.0 &#8230;&#8203; 1.0, the return values are undefined.</p>
+<p class="tableblock">  Note: The half precision <strong>mix</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>radians</strong> (gentype <em>degrees</em>)</p></td>
@@ -1902,19 +2497,19 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>smoothstep</strong> (<br>
-  gentype <em>edge0</em>, gentype <em>edge1</em>, gentype <em>x</em>)
-</p><p class="tableblock">  gentype <strong>smoothstep</strong> (<br>
+  gentype <em>edge0</em>, gentype <em>edge1</em>, gentype <em>x</em>)</p>
+<p class="tableblock">  gentype <strong>smoothstep</strong> (<br>
   half <em>edge0</em>, half <em>edge1</em>, gentype <em>x</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Returns 0.0 if <em>x</em> &lt;= <em>edge0</em> and 1.0 if <em>x</em> &gt;= <em>edge1</em> and performs
   smooth Hermite interpolation between 0 and 1 when <em>edge0</em> &lt; <em>x</em> &lt; <em>edge1</em>.
   This is useful in cases where you would want a threshold function with a
-  smooth transition.
-</p><p class="tableblock">  This is equivalent to:
-</p><p class="tableblock">  gentype <em>t</em>;<br>
+  smooth transition.</p>
+<p class="tableblock">  This is equivalent to:</p>
+<p class="tableblock">  gentype <em>t</em>;<br>
   <em>t</em> = clamp ((<em>x</em> - <em>edge0</em>) / (<em>edge1</em> - <em>edge0</em>), 0, 1);<br>
-  return <em>t</em> * <em>t</em> * (3 - 2 * <em>t</em>);<br>
-</p><p class="tableblock">  Results are undefined if <em>edge0</em> &gt;= <em>edge1</em>.
-</p><p class="tableblock">  Note: The half precision <strong>smoothstep</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
+  return <em>t</em> * <em>t</em> * (3 - 2 * <em>t</em>);<br></p>
+<p class="tableblock">  Results are undefined if <em>edge0</em> &gt;= <em>edge1</em>.</p>
+<p class="tableblock">  Note: The half precision <strong>smoothstep</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sign</strong> (gentype <em>x</em>)</p></td>
@@ -1926,10 +2521,10 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-geometric-functions">2.1.4. Geometric Functions</h4>
+<h4 id="cl_khr_fp16-geometric-functions">5.1.4. Geometric Functions</h4>
 <div class="paragraph">
 <p>The built-in geometric functions defined in <em>table 6.13</em> (also listed below)
-are extended to include appropriate versions of functions that take <code>half</code>,
+are extended to include appropriate versions of functions that take <code>half</code>
 and <code>half{2|3|4}</code> as arguments and return values.
 gentype now also includes <code>half</code>, <code>half2</code>, <code>half3</code> and <code>half4</code>.
 These are described below.</p>
@@ -1938,8 +2533,8 @@
 <p>Note: The half precision geometric functions can be implemented using
 contractions such as <strong>mad</strong> or <strong>fma</strong>.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 3. <em>Half Precision Built-in Geometric Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 4. <em>Half Precision Built-in Geometric Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -1979,7 +2574,7 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-relational-functions">2.1.5. Relational Functions</h4>
+<h4 id="cl_khr_fp16-relational-functions">5.1.5. Relational Functions</h4>
 <div class="paragraph">
 <p>The scalar and vector relational functions described in <em>table 6.14</em> are
 extended to include versions that take <code>half</code>, <code>half2</code>, <code>half3</code>, <code>half4</code>,
@@ -2012,8 +2607,8 @@
 <p>The functions described in <em>table 6.14</em> are extended to include the <code>halfn</code>
 vector types.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 4. <em>Half Precision Relational Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 5. <em>Half Precision Relational Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2128,13 +2723,13 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-vector-data-load-and-store-functions">2.1.6. Vector Data Load and Store Functions</h4>
+<h4 id="cl_khr_fp16-vector-data-load-and-store-functions">5.1.6. Vector Data Load and Store Functions</h4>
 <div class="paragraph">
 <p>The vector data load (<strong>vload<em>n</em></strong>) and store (<strong>vstore<em>n</em></strong>) functions
-described in <em>table 6.14</em> (also listed below) are extended to include
+described in <em>table 6.13</em> (also listed below) are extended to include
 versions that read from or write to half scalar or vector values.
 The generic type <code>gentype</code> is extended to include <code>half</code>.
-The generic type <code>gentypen</code> is extended to include <code>half</code>, <code>half2</code>, <code>half3</code>,
+The generic type <code>gentypen</code> is extended to include <code>half2</code>, <code>half3</code>,
 <code>half4</code>, <code>half8</code>, and <code>half16</code>.</p>
 </div>
 <div class="paragraph">
@@ -2142,8 +2737,8 @@
 (<em>p</em> + (<em>offset</em> * 3)) into a 3-component vector and <strong>vstore3</strong> writes <em>x</em>, <em>y</em>, <em>z</em>
 components from a 3-component vector to address (<em>p</em> + (<em>offset</em> * 3)).</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 5. <em>Half Precision Vector Data Load and Store Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 6. <em>Half Precision Vector Data Load and Store Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2156,18 +2751,23 @@
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">gentype<em>n</em> <strong>vload<em>n</em></strong><br>
-  (size_t <em>offset</em>, const gentype *<em>p</em>)
-</p><p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong><br>
-  (size_t <em>offset</em>, const __constant gentype *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __global gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __local gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __constant gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __private gentype *<em>p</em>)</p>
+<p class="tableblock">  If OpenCL 2.0 or newer:</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const gentype *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Return sizeof (gentype<em>n</em>) bytes of data read from address
   (<em>p</em> + (<em>offset * n</em>)).
   The read address computed as (<em>p</em> + (<em>offset * n</em>)) must be 16-bit
   aligned.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore<em>n</em></strong> (<br>
-  gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, gentype *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __global gentype *<em>p</em>)</p>
+<p class="tableblock">  void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __local gentype *<em>p</em>)</p>
+<p class="tableblock">  void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __private gentype *<em>p</em>)</p>
+<p class="tableblock">  If OpenCL 2.0 or newer:</p>
+<p class="tableblock">  void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, gentype *<em>p</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Write sizeof (gentype<em>n</em>) bytes given by <em>data</em> to address
   (<em>p</em> + (<em>offset * n</em>)).
   The write address computed as (<em>p</em> + (<em>offset * n</em>)) must be 16-bit
@@ -2177,7 +2777,7 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-async-copies-from-global-to-local-memory-local-to-global-memory-and-prefetch">2.1.7. Async Copies from Global to Local Memory, Local to Global Memory, and Prefetch</h4>
+<h4 id="cl_khr_fp16-async-copies-from-global-to-local-memory-local-to-global-memory-and-prefetch">5.1.7. Async Copies from Global to Local Memory, Local to Global Memory, and Prefetch</h4>
 <div class="paragraph">
 <p>The OpenCL C programming language implements the following functions that
 provide asynchronous copies between global and local memory and a prefetch
@@ -2187,8 +2787,8 @@
 <p>The generic type <code>gentype</code> is extended to include <code>half</code>, <code>half2</code>, <code>half3</code>,
 <code>half4</code>, <code>half8</code>, and <code>half16</code>.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 6. <em>Half Precision Built-in Async Copy and Prefetch Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 7. <em>Half Precision Built-in Async Copy and Prefetch Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2204,8 +2804,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">event_t <strong>async_work_group_copy</strong> (<br>
   __local gentype *<em>dst</em>,<br>
   const __global gentype *<em>src</em>,<br>
-  size_t <em>num_gentypes</em>, event_t <em>event</em>)
-</p><p class="tableblock">  event_t <strong>async_work_group_copy</strong> (<br>
+  size_t <em>num_gentypes</em>, event_t <em>event</em>)</p>
+<p class="tableblock">  event_t <strong>async_work_group_copy</strong> (<br>
   __global gentype <em>*dst</em>,<br>
   const __local gentype *<em>src</em>,<br>
   size_t <em>num_gentypes</em>, event_t <em>event</em>)</p></td>
@@ -2214,15 +2814,15 @@
   The async copy is performed by all work-items in a work-group and this
   built-in function must therefore be encountered by all work-items in a
   work-group executing the kernel with the same argument values; otherwise
-  the results are undefined.
-</p><p class="tableblock">  Returns an event object that can be used by <strong>wait_group_events</strong> to wait
+  the results are undefined.</p>
+<p class="tableblock">  Returns an event object that can be used by <strong>wait_group_events</strong> to wait
   for the async copy to finish.
   The <em>event</em> argument can also be used to associate the
   <strong>async_work_group_copy</strong> with a previous async copy allowing an event to be
-  shared by multiple async copies; otherwise <em>event</em> should be zero.
-</p><p class="tableblock">  If <em>event</em> argument is not zero, the event object supplied in <em>event</em>
-  argument will be returned.
-</p><p class="tableblock">  This function does not perform any implicit synchronization of source data
+  shared by multiple async copies; otherwise <em>event</em> should be zero.</p>
+<p class="tableblock">  If <em>event</em> argument is not zero, the event object supplied in <em>event</em>
+  argument will be returned.</p>
+<p class="tableblock">  This function does not perform any implicit synchronization of source data
   such as using a <strong>barrier</strong> before performing the copy.</p></td>
 </tr>
 <tr>
@@ -2234,8 +2834,8 @@
   __local gentype <em>*dst</em>,<br>
   const __global gentype *<em>src</em>,<br>
   size_t <em>num_gentypes</em>,<br>
-  size_t <em>src_stride</em>, event_t <em>event</em>)
-</p><p class="tableblock">  event_t <strong>async_work_group_strided_copy</strong> (<br>
+  size_t <em>src_stride</em>, event_t <em>event</em>)</p>
+<p class="tableblock">  event_t <strong>async_work_group_strided_copy</strong> (<br>
   __global gentype <em>*dst</em>,<br>
   const __local gentype *<em>src</em>,<br>
   size_t <em>num_gentypes</em>,<br>
@@ -2247,18 +2847,18 @@
   The async gather is performed by all work-items in a work-group and this
   built-in function must therefore be encountered by all work-items in a
   work-group executing the kernel with the same argument values; otherwise
-  the results are undefined.
-</p><p class="tableblock">  Returns an event object that can be used by <strong>wait_group_events</strong> to wait
+  the results are undefined.</p>
+<p class="tableblock">  Returns an event object that can be used by <strong>wait_group_events</strong> to wait
   for the async copy to finish.
   The <em>event</em> argument can also be used to associate the
   <strong>async_work_group_strided_copy</strong> with a previous async copy allowing an
   event to be shared by multiple async copies; otherwise <em>event</em> should be
-  zero.
-</p><p class="tableblock">  If <em>event</em> argument is not zero, the event object supplied in <em>event</em>
-  argument will be returned.
-</p><p class="tableblock">  This function does not perform any implicit synchronization of source data
-  such as using a <strong>barrier</strong> before performing the copy.
-</p><p class="tableblock">  The behavior of <strong>async_work_group_strided_copy</strong> is undefined if
+  zero.</p>
+<p class="tableblock">  If <em>event</em> argument is not zero, the event object supplied in <em>event</em>
+  argument will be returned.</p>
+<p class="tableblock">  This function does not perform any implicit synchronization of source data
+  such as using a <strong>barrier</strong> before performing the copy.</p>
+<p class="tableblock">  The behavior of <strong>async_work_group_strided_copy</strong> is undefined if
   <em>src_stride</em> or <em>dst_stride</em> is 0, or if the <em>src_stride</em> or <em>dst_stride</em>
   values cause the <em>src</em> or <em>dst</em> pointers to exceed the upper bounds of the
   address space during the copy.</p></td>
@@ -2273,8 +2873,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">Wait for events that identify the <strong>async_work_group_copy</strong> operations to
   complete.
   The event objects specified in <em>event_list</em> will be released after the
-  wait is performed.
-</p><p class="tableblock">  This function must be encountered by all work-items in a work-group
+  wait is performed.</p>
+<p class="tableblock">  This function must be encountered by all work-items in a work-group
   executing the kernel with the same <em>num_events</em> and event objects
   specified in <em>event_list</em>; otherwise the results are undefined.</p></td>
 </tr>
@@ -2289,16 +2889,16 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-image-read-and-write-functions">2.1.8. Image Read and Write Functions</h4>
+<h4 id="cl_khr_fp16-image-read-and-write-functions">5.1.8. Image Read and Write Functions</h4>
 <div class="paragraph">
 <p>The image read and write functions defined in <em>tables 6.23</em>, <em>6.24</em> and
 <em>6.25</em> are extended to support image color values that are a <code>half</code> type.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="_built_in_image_read_functions">2.1.9. Built-in Image Read Functions</h4>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 7. <em>Half Precision Built-in Image Read Functions</em></caption>
+<h4 id="_built_in_image_read_functions">5.1.9. Built-in Image Read Functions</h4>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 8. <em>Half Precision Built-in Image Read Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2314,28 +2914,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   read_only image2d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
-  int2 <em>coord</em>)
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int2 <em>coord</em>)</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   read_only image2d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
   float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate <em>(coord.x, coord.y)</em> to do an element lookup in the 2D
-  image object specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  image object specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats, CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
   with filter mode set to CLK_FILTER_NEAREST, normalized coordinates set to
   CLK_NORMALIZED_COORDS_FALSE and addressing mode set to
   CLK_ADDRESS_CLAMP_TO_EDGE, CLK_ADDRESS_CLAMP or CLK_ADDRESS_NONE;
-  otherwise the values returned are undefined.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  otherwise the values returned are undefined.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
@@ -2347,29 +2947,29 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   read_only image3d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
-  int4 <em>coord</em> )
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int4 <em>coord</em> )</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   read_only image3d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
   float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate <em>(coord.x</em>, <em>coord.y</em>, <em>coord.z)</em> to do an
   elementlookup in the 3D image object specified by <em>image</em>. <em>coord.w</em> is
-  ignored.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  ignored.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong>returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong>returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
   with filter mode set to CLK_FILTER_NEAREST, normalized coordinates set to
   CLK_NORMALIZED_COORDS_FALSE and addressing mode set to
   CLK_ADDRESS_CLAMP_TO_EDGE, CLK_ADDRESS_CLAMP or CLK_ADDRESS_NONE;
-  otherwise the values returned are undefined.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  otherwise the values returned are undefined.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description are
   undefined.</p></td>
 </tr>
@@ -2381,28 +2981,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   read_only image2d_array_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
-  int4 <em>coord</em>)
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int4 <em>coord</em>)</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   read_only image2d_array_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
   float4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-  <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with image_channel_data_type set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with image_channel_data_type set
-  to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with image_channel_data_type set to CL_HALF_FLOAT.
-</p><p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
+  to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with image_channel_data_type set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
   with filter mode set to CLK_FILTER_NEAREST, normalized coordinates set to
   CLK_NORMALIZED_COORDS_FALSE and addressing mode set to
   CLK_ADDRESS_CLAMP_TO_EDGE, CLK_ADDRESS_CLAMP or CLK_ADDRESS_NONE;
-  otherwise the values returned are undefined.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  otherwise the values returned are undefined.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   image_channel_data_type values not specified in the description above are
   undefined.</p></td>
 </tr>
@@ -2414,28 +3014,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   read_only image1d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
-  int <em>coord</em>)
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int <em>coord</em>)</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   read_only image1d_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
   float <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image object specified by
-  <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
   with filter mode set to CLK_FILTER_NEAREST, normalized coordinates set to
   CLK_NORMALIZED_COORDS_FALSE and addressing mode set to
   CLK_ADDRESS_CLAMP_TO_EDGE, CLK_ADDRESS_CLAMP or CLK_ADDRESS_NONE;
-  otherwise the values returned are undefined.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  otherwise the values returned are undefined.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
@@ -2447,28 +3047,28 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   read_only image1d_array_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
-  int2 <em>coord</em>)
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int2 <em>coord</em>)</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   read_only image1d_array_t <em>image</em>,<br>
   sampler_t <em>sampler</em>,<br>
   float2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 1D image identified by
-  <em>coord.y</em> in the 1D image array specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  <em>coord.y</em> in the 1D image array specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with image_channel_data_type set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with image_channel_data_type set
-  to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with image_channel_data_type set to CL_HALF_FLOAT.
-</p><p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
+  to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with image_channel_data_type set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  The <strong>read_imageh</strong> calls that take integer coordinates must use a sampler
   with filter mode set to CLK_FILTER_NEAREST, normalized coordinates set to
   CLK_NORMALIZED_COORDS_FALSE and addressing mode set to
   CLK_ADDRESS_CLAMP_TO_EDGE, CLK_ADDRESS_CLAMP or CLK_ADDRESS_NONE;
-  otherwise the values returned are undefined.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  otherwise the values returned are undefined.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   image_channel_data_type values not specified in the description above are
   undefined.</p></td>
 </tr>
@@ -2476,13 +3076,13 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="_built_in_image_sampler_less_read_functions">2.1.10. Built-in Image Sampler-less Read Functions</h4>
+<h4 id="_built_in_image_sampler_less_read_functions">5.1.10. Built-in Image Sampler-less Read Functions</h4>
 <div class="paragraph">
 <p><em>aQual</em> in Table 6.24 refers to one of the access qualifiers.
 For sampler-less read functions this may be <em>read_only</em> or <em>read_write</em>.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 8. <em>Half Precision Built-in Image Sampler-less Read Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 9. <em>Half Precision Built-in Image Sampler-less Read Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2499,17 +3099,17 @@
   <em>aQual</em> image2d_t <em>image</em>,<br>
   int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate <em>(coord.x, coord.y)</em> to do an element lookup in the 2D
-  image object specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  image object specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
@@ -2518,17 +3118,17 @@
   <em>aQual</em> image3d_t <em>image</em>,<br>
   int4 <em>coord</em> )</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use the coordinate <em>(coord.x</em>, <em>coord.y</em>, <em>coord.z)</em> to do an element
-  lookup in the 3D image object specified by <em>image</em>. <em>coord.w</em> is ignored.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  lookup in the 3D image object specified by <em>image</em>. <em>coord.w</em> is ignored.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description are
   undefined.</p></td>
 </tr>
@@ -2537,39 +3137,39 @@
   <em>aQual</em> image2d_array_t <em>image</em>,<br>
   int4 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.xy</em> to do an element lookup in the 2D image identified by
-  <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">half4 <strong>read_imageh</strong> (<br>
   <em>aQual</em> image1d_t <em>image</em>,<br>
-  int <em>coord</em>)
-</p><p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
+  int <em>coord</em>)</p>
+<p class="tableblock">  half4 <strong>read_imageh</strong> (<br>
   <em>aQual</em> image1d_buffer_t <em>image</em>,<br>
   int <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord</em> to do an element lookup in the 1D image or 1D image buffer
-  object specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  object specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
@@ -2578,17 +3178,17 @@
   <em>aQual</em> image1d_array_t <em>image</em>,<br>
   int2 <em>coord</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Use <em>coord.x</em> to do an element lookup in the 2D image identified by
-  <em>coord.y</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  <em>coord.y</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [0.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em> set
   to one of the pre-defined packed formats or CL_UNORM_INT8, or
-  CL_UNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
+  CL_UNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values in the range
   [-1.0 &#8230;&#8203; 1.0] for image objects created with <em>image_channel_data_type</em>
-  set to CL_SNORM_INT8, or CL_SNORM_INT16.
-</p><p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
-  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.
-</p><p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
+  set to CL_SNORM_INT8, or CL_SNORM_INT16.</p>
+<p class="tableblock">  <strong>read_imageh</strong> returns half precision floating-point values for image
+  objects created with <em>image_channel_data_type</em> set to CL_HALF_FLOAT.</p>
+<p class="tableblock">  Values returned by <strong>read_imageh</strong> for image objects with
   <em>image_channel_data_type</em> values not specified in the description above
   are undefined.</p></td>
 </tr>
@@ -2596,13 +3196,13 @@
 </table>
 </div>
 <div class="sect3">
-<h4 id="_built_in_image_write_functions">2.1.11. Built-in Image Write Functions</h4>
+<h4 id="_built_in_image_write_functions">5.1.11. Built-in Image Write Functions</h4>
 <div class="paragraph">
 <p><em>aQual</em> in Table 6.25 refers to one of the access qualifiers.
 For write functions this may be <em>write_only</em> or <em>read_write</em>.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 9. <em>Half Precision Built-in Image Write Functions</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 10. <em>Half Precision Built-in Image Write Functions</em></caption>
 <colgroup>
 <col style="width: 50%;">
 <col style="width: 50%;">
@@ -2620,16 +3220,16 @@
   int2 <em>coord</em>,<br>
   half4 <em>color</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Write <em>color</em> value to location specified by <em>coord.xy</em> in the 2D image
-  specified by <em>image</em>.
-</p><p class="tableblock">  Appropriate data format conversion to the specified image format is done
+  specified by <em>image</em>.</p>
+<p class="tableblock">  Appropriate data format conversion to the specified image format is done
   before writing the color value. <em>x</em> &amp; <em>y</em> are considered to be
   unnormalized coordinates and must be in the range 0 &#8230;&#8203; width - 1, and 0
-  &#8230;&#8203; height - 1.
-</p><p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
+  &#8230;&#8203; height - 1.</p>
+<p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
   <em>image_channel_data_type</em> set to one of the pre-defined packed formats or
   set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16 or
-  CL_HALF_FLOAT.
-</p><p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
+  CL_HALF_FLOAT.</p>
+<p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
   <em>image_channel_data_type</em> values not specified in the description above or
   with (<em>x</em>, <em>y</em>) coordinate values that are not in the range (0 &#8230;&#8203; width -
   1, 0 &#8230;&#8203; height - 1) respectively, is undefined.</p></td>
@@ -2640,17 +3240,17 @@
   int4 <em>coord</em>,<br>
   half4 <em>color</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Write <em>color</em> value to location specified by <em>coord.xy</em> in the 2D image
-  identified by <em>coord.z</em> in the 2D image array specified by <em>image</em>.
-</p><p class="tableblock">  Appropriate data format conversion to the specified image format is done
+  identified by <em>coord.z</em> in the 2D image array specified by <em>image</em>.</p>
+<p class="tableblock">  Appropriate data format conversion to the specified image format is done
   before writing the color value. <em>coord.x</em>, <em>coord.y</em> and <em>coord.z</em> are
   considered to be unnormalized coordinates and must be in the range 0 &#8230;&#8203;
   image width - 1, 0 &#8230;&#8203; image height - 1 and 0 &#8230;&#8203; image number of layers -
-  1.
-</p><p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
+  1.</p>
+<p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
   <em>image_channel_data_type</em> set to one of the pre-defined packed formats or
   set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16 or
-  CL_HALF_FLOAT.
-</p><p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
+  CL_HALF_FLOAT.</p>
+<p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
   <em>image_channel_data_type</em> values not specified in the description above or
   with (<em>x</em>, <em>y, z</em>) coordinate values that are not in the range (0 &#8230;&#8203;
   image width - 1, 0 &#8230;&#8203; image height - 1, 0 &#8230;&#8203; image number of layers -
@@ -2660,8 +3260,8 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>write_imageh</strong> (<br>
   <em>aQual</em> image1d_t <em>image</em>,<br>
   int <em>coord</em>,<br>
-  half4 <em>color</em>)
-</p><p class="tableblock">  void <strong>write_imageh</strong> (<br>
+  half4 <em>color</em>)</p>
+<p class="tableblock">  void <strong>write_imageh</strong> (<br>
   <em>aQual</em> image1d_buffer_t <em>image</em>,<br>
   int <em>coord</em>,<br>
   half4 <em>color</em>)</p></td>
@@ -2670,15 +3270,15 @@
   Appropriate data format conversion to the specified image format is done
   before writing the color value.
   <em>coord</em> is considered to be unnormalized coordinates and must be in the
-  range 0 &#8230;&#8203; image width - 1.
-</p><p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
+  range 0 &#8230;&#8203; image width - 1.</p>
+<p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
   <em>image_channel_data_type</em> set to one of the pre-defined packed formats or
   set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16 or
   CL_HALF_FLOAT.
   Appropriate data format conversion will be done to convert channel data
   from a floating-point value to actual data format in which the channels
-  are stored.
-</p><p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
+  are stored.</p>
+<p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
   <em>image_channel_data_type</em> values not specified in the description above or
   with coordinate values that is not in the range (0 &#8230;&#8203; image width - 1),
   is undefined.</p></td>
@@ -2693,15 +3293,15 @@
   Appropriate data format conversion to the specified image format is done
   before writing the color value. <em>coord.x</em> and <em>coord.y</em> are considered to
   be unnormalized coordinates and must be in the range 0 &#8230;&#8203; image width - 1
-  and 0 &#8230;&#8203; image number of layers - 1.
-</p><p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
+  and 0 &#8230;&#8203; image number of layers - 1.</p>
+<p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
   <em>image_channel_data_type</em> set to one of the pre-defined packed formats or
   set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16 or
   CL_HALF_FLOAT.
   Appropriate data format conversion will be done to convert channel data
   from a floating-point value to actual data format in which the channels
-  are stored.
-</p><p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
+  are stored.</p>
+<p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
   <em>image_channel_data_type</em> values not specified in the description above or
   with (<em>x</em>, <em>y</em>) coordinate values that are not in the range (0 &#8230;&#8203; image
   width - 1, 0 &#8230;&#8203; image number of layers - 1), respectively, is undefined.</p></td>
@@ -2712,36 +3312,36 @@
   int4 <em>coord</em>,<br>
   half4 <em>color</em>)</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Write color value to location specified by coord.xyz in the 3D image
-  object specified by <em>image</em>.
-</p><p class="tableblock">  Appropriate data format conversion to the specified image format is done
+  object specified by <em>image</em>.</p>
+<p class="tableblock">  Appropriate data format conversion to the specified image format is done
   before writing the color value.
   coord.x, coord.y and coord.z are considered to be unnormalized coordinates
   and must be in the range 0 &#8230;&#8203; image width - 1, 0 &#8230;&#8203; image height - 1 and
-  0 &#8230;&#8203; image depth - 1.
-</p><p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
+  0 &#8230;&#8203; image depth - 1.</p>
+<p class="tableblock">  <strong>write_imageh</strong> can only be used with image objects created with
   image_channel_data_type set to one of the pre-defined packed formats or
   set to CL_SNORM_INT8, CL_UNORM_INT8, CL_SNORM_INT16, CL_UNORM_INT16 or
-  CL_HALF_FLOAT.
-</p><p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
+  CL_HALF_FLOAT.</p>
+<p class="tableblock">  The behavior of <strong>write_imageh</strong> for image objects created with
   image_channel_data_type values not specified in the description above or
   with (x, y, z) coordinate values that are not in the range (0 &#8230;&#8203; image
   width - 1, 0 &#8230;&#8203; image height - 1, 0 &#8230;&#8203; image depth - 1), respectively,
-  is undefined.
-</p><p class="tableblock">  Note: This built-in function is only available if the
+  is undefined.</p>
+<p class="tableblock">  Note: This built-in function is only available if the
   cl_khr_3d_image_writes extension is also supported by the device.</p></td>
 </tr>
 </tbody>
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-ieee754-compliance">2.1.12. IEEE754 Compliance</h4>
+<h4 id="cl_khr_fp16-ieee754-compliance">5.1.12. IEEE754 Compliance</h4>
 <div class="paragraph">
 <p>The following table entry describes the additions to <em>table 4.3,</em> which
 allows applications to query the configuration information using
 <strong>clGetDeviceInfo</strong> for an OpenCL device that supports half precision
 floating-point.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
+<table class="tableblock frame-all grid-all stretch">
 <colgroup>
 <col style="width: 25%;">
 <col style="width: 25%;">
@@ -2759,25 +3359,25 @@
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DEVICE_HALF_FP_CONFIG</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">cl_device_fp_config</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Describes half precision floating-point capability of the OpenCL device.
-  This is a bit-field that describes one or more of the following values:
-</p><p class="tableblock">  CL_FP_DENORM&#8201;&#8212;&#8201;denorms are supported
-</p><p class="tableblock">  CL_FP_INF_NAN&#8201;&#8212;&#8201;INF and NaNs are supported
-</p><p class="tableblock">  CL_FP_ROUND_TO_NEAREST&#8201;&#8212;&#8201;round to nearest even rounding mode supported
-</p><p class="tableblock">  CL_FP_ROUND_TO_ZERO&#8201;&#8212;&#8201;round to zero rounding mode supported
-</p><p class="tableblock">  CL_FP_ROUND_TO_INF&#8201;&#8212;&#8201;round to positive and negative infinity rounding
-  modes supported
-</p><p class="tableblock">  CL_FP_FMA&#8201;&#8212;&#8201;IEEE754-2008 fused multiply-add is supported
-</p><p class="tableblock">  CL_FP_SOFT_FLOAT&#8201;&#8212;&#8201;Basic floating-point operations (such as addition,
-  subtraction, multiplication) are implemented in software.
-</p><p class="tableblock">  The required minimum half precision floating-point capability as
-  implemented by this extension is:
-</p><p class="tableblock">  CL_FP_ROUND_TO_ZERO, or CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN.</p></td>
+  This is a bit-field that describes one or more of the following values:</p>
+<p class="tableblock">  CL_FP_DENORM&#8201;&#8212;&#8201;denorms are supported</p>
+<p class="tableblock">  CL_FP_INF_NAN&#8201;&#8212;&#8201;INF and NaNs are supported</p>
+<p class="tableblock">  CL_FP_ROUND_TO_NEAREST&#8201;&#8212;&#8201;round to nearest even rounding mode supported</p>
+<p class="tableblock">  CL_FP_ROUND_TO_ZERO&#8201;&#8212;&#8201;round to zero rounding mode supported</p>
+<p class="tableblock">  CL_FP_ROUND_TO_INF&#8201;&#8212;&#8201;round to positive and negative infinity rounding
+  modes supported</p>
+<p class="tableblock">  CL_FP_FMA&#8201;&#8212;&#8201;IEEE754-2008 fused multiply-add is supported</p>
+<p class="tableblock">  CL_FP_SOFT_FLOAT&#8201;&#8212;&#8201;Basic floating-point operations (such as addition,
+  subtraction, multiplication) are implemented in software.</p>
+<p class="tableblock">  The required minimum half precision floating-point capability as
+  implemented by this extension is:</p>
+<p class="tableblock">  CL_FP_ROUND_TO_ZERO, or CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN.</p></td>
 </tr>
 </tbody>
 </table>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-rounding-modes">2.1.13. Rounding Modes</h4>
+<h4 id="cl_khr_fp16-rounding-modes">5.1.13. Rounding Modes</h4>
 <div class="paragraph">
 <p>If CL_FP_ROUND_TO_NEAREST is supported, the default rounding mode for
 half-precision floating-point operations will be round to nearest even;
@@ -2797,7 +3397,7 @@
 </div>
 </div>
 <div class="sect3">
-<h4 id="cl_khr_fp16-relative-error-as-ulps">2.1.14. Relative Error as ULPs</h4>
+<h4 id="cl_khr_fp16-relative-error-as-ulps">5.1.14. Relative Error as ULPs</h4>
 <div class="paragraph">
 <p>In this section we discuss the maximum relative error defined as <em>ulp</em>
 (units in the last place).</p>
@@ -2814,8 +3414,8 @@
 The reference value used to compute the ULP value of an arithmetic operation
 is the infinitely precise result.</p>
 </div>
-<table class="tableblock frame-all grid-all spread">
-<caption class="title">Table 10. <em>ULP Values for Half Precision Floating-Point Arithmetic Operations</em></caption>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 11. <em>ULP Values for Half Precision Floating-Point Arithmetic Operations</em></caption>
 <colgroup>
 <col style="width: 33.3333%;">
 <col style="width: 33.3333%;">
@@ -3194,16 +3794,2068 @@
 In this case, the implementation will use the</em> <code>half</code> <em>scalar or vector data
 type as a storage only format</em>.</p>
 </div>
-<div style="page-break-after: always;"></div>
 </div>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="cl_khr_gl_sharing">3. Creating an OpenCL Context from an OpenGL Context or Share Group</h2>
+<h2 id="cl_khr_fp64">6. Double Precision Floating-Point</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This section describes the <strong>cl_khr_fp64</strong> extension.
+This extension became an optional core feature in OpenCL 1.2.</p>
+</div>
+<div class="sect2">
+<h3 id="cl_khr_fp64-additions-to-chapter-6">6.1. Additions to Chapter 6</h3>
+<div class="paragraph">
+<p>The list of built-in scalar, and vector data types defined in <em>tables 6.1</em>
+and <em>6.2</em> are extended to include the following:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 25%;">
+<col style="width: 75%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Type</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A double precision float.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A 2-component double-precision floating-point vector.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double3</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A 3-component double-precision floating-point vector.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double4</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A 4-component double-precision floating-point vector.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double8</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A 8-component double-precision floating-point vector.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double16</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A 16-component double-precision floating-point vector.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The built-in scalar and vector data types for <code>doublen</code> are also declared as appropriate
+types in the OpenCL API (and header files) that can be used by an
+application.
+The following table describes the built-in scalar and vector data types for <code>doublen</code> as
+defined in the OpenCL C programming language and the corresponding data type
+available to the application:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Type in OpenCL Language</strong></th>
+<th class="tableblock halign-left valign-top"><strong>API type for application</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double2</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double3</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double3</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double4</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double4</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double8</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double8</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>double16</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>cl_double16</strong></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The double data type must conform to the IEEE-754 double precision storage format.</p>
+</div>
+<div class="paragraph">
+<p>The following text is added to <em>Section 6.1.1.1 The half data type</em>:</p>
+</div>
+<div class="paragraph">
+<p>Conversions from double to half are correctly rounded.
+Conversions from half to double are lossless.</p>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-conversions">6.1.1. Conversions</h4>
+<div class="paragraph">
+<p>The implicit conversion rules specified in <em>section 6.2.1</em> now include the
+<code>double</code> scalar and <code>doublen</code> vector data types.</p>
+</div>
+<div class="paragraph">
+<p>The explicit casts described in <em>section 6.2.2</em> are extended to take a
+<code>double</code> scalar data type and a <code>doublen</code> vector data type.</p>
+</div>
+<div class="paragraph">
+<p>The explicit conversion functions described in <em>section 6.2.3</em> are extended
+to take a <code>double</code> scalar data type and a <code>doublen</code> vector data type.</p>
+</div>
+<div class="paragraph">
+<p>The <code>as_typen()</code> function for re-interpreting types as described in <em>section
+6.2.4.2</em> is extended to allow conversion-free casts between <code>longn</code>,
+<code>ulongn</code> and <code>doublen</code> scalar and vector data types.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-math-functions">6.1.2. Math Functions</h4>
+<div class="paragraph">
+<p>The built-in math functions defined in <em>table 6.8</em> (also listed below) are
+extended to include appropriate versions of functions that take <code>double</code> and
+<code>double{2|3|4|8|16}</code> as arguments and return values.
+<code>gentype</code> now also includes <code>double</code>, <code>double2</code>, <code>double3</code>, <code>double4</code>, <code>double8</code> and
+<code>double16</code>.</p>
+</div>
+<div class="paragraph">
+<p>For any specific use of a function, the actual type has to be the same for
+all arguments and the return type.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 12. <em>Double Precision Built-in Math Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>acos</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Arc cosine function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>acosh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Inverse hyperbolic cosine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>acospi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>acos</strong> (<em>x</em>) / π.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>asin</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Arc sine function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>asinh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Inverse hyperbolic sine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>asinpi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>asin</strong> (<em>x</em>) / π.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>atan</strong> (gentype <em>y_over_x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Arc tangent function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>atan2</strong> (gentype <em>y</em>, gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Arc tangent of <em>y</em> / <em>x</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>atanh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Hyperbolic arc tangent.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>atanpi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>atan</strong> (<em>x</em>) / π.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>atan2pi</strong> (gentype <em>y</em>, gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>atan2</strong> (<em>y</em>, <em>x</em>) / π.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cbrt</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute cube-root.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>ceil</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Round to integral value using the round to positive infinity rounding
+  mode.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>copysign</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>x</em> with its sign changed to match the sign of <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cos</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute cosine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cosh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic cosine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>cospi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>cos</strong> (π <em>x</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>erfc</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Complementary error function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>erf</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Error function encountered in integrating the normal distribution.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>exp</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the base- e exponential of <em>x</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>exp2</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Exponential base 2 function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>exp10</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Exponential base 10 function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>expm1</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <em>e<sup>x</sup></em>- 1.0.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fabs</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute absolute value of a floating-point number.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fdim</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><em>x</em> - <em>y</em> if <em>x</em> &gt; <em>y</em>, +0 if x is less than or equal to y.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>floor</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Round to integral value using the round to negative infinity rounding
+  mode.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fma</strong> (gentype <em>a</em>, gentype <em>b</em>, gentype <em>c</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the correctly rounded floating-point representation of the sum of
+  <em>c</em> with the infinitely precise product of <em>a</em> and <em>b</em>.
+  Rounding of intermediate products shall not occur.
+  Edge case behavior is per the IEEE 754-2008 standard.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmax</strong> (gentype <em>x</em>, gentype <em>y</em>)<br>
+  gentype <strong>fmax</strong> (gentype <em>x</em>, double <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>x</em> &lt; <em>y</em>, otherwise it returns <em>x</em>.
+  If one argument is a NaN, <strong>fmax()</strong> returns the other argument.
+  If both arguments are NaNs, <strong>fmax()</strong> returns a NaN.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmin</strong> (gentype <em>x</em>, gentype <em>y</em>)<br>
+  gentype <strong>fmin</strong> (gentype <em>x</em>, double <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>y</em> &lt; <em>x</em>, otherwise it returns <em>x</em>.
+  If one argument is a NaN, <strong>fmin()</strong> returns the other argument.
+  If both arguments are NaNs, <strong>fmin()</strong> returns a NaN.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fmod</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Modulus.
+  Returns <em>x</em> - <em>y</em> * <strong>trunc</strong> (<em>x</em>/<em>y</em>) .</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>fract</strong> (gentype <em>x</em>, __global gentype <strong><em>iptr</em>)<br>
+  gentype *fract</strong> (gentype <em>x</em>, __local gentype <strong><em>iptr</em>)<br>
+  gentype *fract</strong> (gentype <em>x</em>, __private gentype *<em>iptr</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>fmin</strong>( <em>x</em> - <strong>floor</strong> (<em>x</em>), 0x1. fffffffffffffp-1 ).</p>
+<p class="tableblock">  <strong>floor</strong>(x) is returned in <em>iptr</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>frexp</strong> (double<em>n x</em>, __global int<em>n</em> <strong>exp)<br>
+  double<em>n</em> *frexp</strong> (double<em>n x</em>, __local int<em>n</em> <strong>exp)<br>
+  double<em>n</em> *frexp</strong> (double<em>n x</em>, __private int<em>n</em> <strong>exp)<br>
+  double *frexp</strong> (double <em>x</em>, __global int <strong>exp)<br>
+  double *frexp</strong> (double <em>x</em>, __local int <strong>exp)<br>
+  double *frexp</strong> (double <em>x</em>, __private int *exp)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Extract mantissa and exponent from <em>x</em>.
+  For each component the mantissa returned is a float with magnitude in the
+  interval [1/2, 1) or 0.
+  Each component of <em>x</em> equals mantissa returned * 2<em><sup>exp</sup></em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>hypot</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the value of the square root of <em>x</em>2+ <em>y</em>2  without undue
+  overflow or underflow.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int<em>n</em> <strong>ilogb</strong> (double<em>n</em> <em>x</em>)<br>
+  int <strong>ilogb</strong> (double <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return the exponent as an integer value.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>ldexp</strong> (double<em>n</em> <em>x</em>, int<em>n</em> <em>k</em>)<br>
+  double<em>n</em> <strong>ldexp</strong> (double<em>n</em> <em>x</em>, int <em>k</em>)<br>
+  double <strong>ldexp</strong> (double <em>x</em>, int <em>k</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Multiply <em>x</em> by 2 to the power <em>k</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>lgamma</strong> (gentype <em>x</em>)<br>
+  double<em>n</em> <strong>lgamma_r</strong> (double<em>n</em> <em>x</em>, __global int<em>n</em> *<em>signp</em>)<br>
+  double<em>n</em> <strong>lgamma_r</strong> (double<em>n</em> <em>x</em>, __local int<em>n</em> *<em>signp</em>)<br>
+  double<em>n</em> <strong>lgamma_r</strong> (double<em>n</em> <em>x</em>, __private int<em>n</em> *<em>signp</em>)<br>
+  double <strong>lgamma_r</strong> (double <em>x</em>, __global int *<em>signp</em>)<br>
+  double <strong>lgamma_r</strong> (double <em>x</em>, __local int *<em>signp</em>)<br>
+  double <strong>lgamma_r</strong> (double <em>x</em>, __private int *<em>signp</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Log gamma function.
+  Returns the natural logarithm of the absolute value of the gamma function.
+  The sign of the gamma function is returned in the <em>signp</em> argument of
+  <strong>lgamma_r</strong>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>log</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute natural logarithm.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>log2</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute a base 2 logarithm.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>log10</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute a base 10 logarithm.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>log1p</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute log<sub>e</sub>(1.0 + <em>x</em>) .</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>logb</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the exponent of <em>x</em>, which is the integral part of
+  log<em><sub>r</sub></em>|<em>x</em>|.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>mad</strong> (gentype <em>a</em>, gentype <em>b</em>, gentype <em>c</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>mad</strong> computes <em>a</em> * <em>b</em> + <em>c</em>.
+  The function may compute <em>a</em> * <em>b</em> + <em>c</em> with reduced accuracy
+  in the embedded profile.  See the SPIR-V OpenCL environment specification
+  for details. On some hardware the mad instruction may provide better
+  performance than expanded computation of <em>a</em> * <em>b</em> + <em>c</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>maxmag</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>x</em> if |<em>x</em>| &gt; |<em>y</em>|, <em>y</em> if |<em>y</em>| &gt; |<em>x</em>|, otherwise
+  <strong>fmax</strong>(<em>x</em>, <em>y</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>minmag</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>x</em> if |<em>x</em>| &lt; |<em>y</em>|, <em>y</em> if |<em>y</em>| &lt; |<em>x</em>|, otherwise
+  <strong>fmin</strong>(<em>x</em>, <em>y</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>modf</strong> (gentype <em>x</em>, __global gentype <strong><em>iptr</em>)<br>
+  gentype *modf</strong> (gentype <em>x</em>, __local gentype <strong><em>iptr</em>)<br>
+  gentype *modf</strong> (gentype <em>x</em>, __private gentype *<em>iptr</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Decompose a floating-point number.
+  The <strong>modf</strong> function breaks the argument <em>x</em> into integral and fractional
+  parts, each of which has the same sign as the argument.
+  It stores the integral part in the object pointed to by <em>iptr</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>nan</strong> (ulong<em>n nancode</em>)<br>
+  double <strong>nan</strong> (ulong <em>nancode</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a quiet NaN.
+  The <em>nancode</em> may be placed in the significand of the resulting NaN.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>nextafter</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Computes the next representable double-precision floating-point value
+  following <em>x</em> in the direction of <em>y</em>.
+  Thus, if <em>y</em> is less than <em>x</em>, <strong>nextafter</strong>() returns the largest
+  representable floating-point number less than <em>x</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>pow</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <em>x</em> to the power <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>pown</strong> (double<em>n</em> <em>x</em>, int<em>n</em> <em>y</em>)<br>
+  double <strong>pown</strong> (double <em>x</em>, int <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <em>x</em> to the power <em>y</em>, where <em>y</em> is an integer.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>powr</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <em>x</em> to the power <em>y</em>, where <em>x</em> is &gt;= 0.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>remainder</strong> (gentype <em>x</em>, gentype <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the value <em>r</em> such that <em>r</em> = <em>x</em> - <em>n</em>*<em>y</em>, where <em>n</em> is the
+  integer nearest the exact value of <em>x</em>/<em>y</em>.
+  If there are two integers closest to <em>x</em>/<em>y</em>, <em>n</em> shall be the even one.
+  If <em>r</em> is zero, it is given the same sign as <em>x</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>remquo</strong> (double<em>n</em> <em>x</em>, double<em>n</em> <em>y</em>, __global int<em>n</em> *<em>quo</em>)<br>
+  double<em>n</em> <strong>remquo</strong> (double<em>n</em> <em>x</em>, double<em>n</em> <em>y</em>, __local int<em>n</em> *<em>quo</em>)<br>
+  double<em>n</em> <strong>remquo</strong> (double<em>n</em> <em>x</em>, double<em>n</em> <em>y</em>, __private int<em>n</em> *<em>quo</em>)<br>
+  double <strong>remquo</strong> (double <em>x</em>, double <em>y</em>, __global int *<em>quo</em>)<br>
+  double <strong>remquo</strong> (double <em>x</em>, double <em>y</em>, __local int *<em>quo</em>)<br>
+  double <strong>remquo</strong> (double <em>x</em>, double <em>y</em>, __private int *<em>quo</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <strong>remquo</strong> function computes the value r such that <em>r</em> = <em>x</em> - <em>k</em>*<em>y</em>,
+  where <em>k</em> is the integer nearest the exact value of <em>x</em>/<em>y</em>.
+  If there are two integers closest to <em>x</em>/<em>y</em>, <em>k</em> shall be the even one.
+  If <em>r</em> is zero, it is given the same sign as <em>x</em>.
+  This is the same value that is returned by the <strong>remainder</strong> function.
+  <strong>remquo</strong> also calculates the lower seven bits of the integral quotient
+  <em>x</em>/<em>y</em>, and gives that value the same sign as <em>x</em>/<em>y</em>.
+  It stores this signed value in the object pointed to by <em>quo</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>rint</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Round to integral value (using round to nearest even rounding mode) in
+  floating-point format.
+  Refer to section 7.1 for description of rounding modes.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>rootn</strong> (double<em>n</em> <em>x</em>, int<em>n</em> <em>y</em>)<br>
+  double<em>n</em> <strong>rootn</strong> (double <em>x</em>, int <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <em>x</em> to the power 1/<em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>round</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return the integral value nearest to <em>x</em> rounding halfway cases away from
+  zero, regardless of the current rounding direction.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>rsqrt</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute inverse square root.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sin</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute sine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sincos</strong> (gentype <em>x</em>, __global gentype <strong><em>cosval</em>)<br>
+  gentype *sincos</strong> (gentype <em>x</em>, __local gentype <strong><em>cosval</em>)<br>
+  gentype *sincos</strong> (gentype <em>x</em>, __private gentype *<em>cosval</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute sine and cosine of x.
+  The computed sine is the return value and computed cosine is returned in
+  <em>cosval</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sinh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic sine.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sinpi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>sin</strong> (π <em>x</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sqrt</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute square root.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>tan</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute tangent.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>tanh</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute hyperbolic tangent.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>tanpi</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute <strong>tan</strong> (π <em>x</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>tgamma</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the gamma function.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>trunc</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Round to integral value using the round to zero rounding mode.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>In addition, the following symbolic constant will also be available:</p>
+</div>
+<div class="paragraph">
+<p><strong>HUGE_VAL</strong> - A positive double expression that evaluates to infinity.
+Used as an error value returned by the built-in math functions.</p>
+</div>
+<div class="paragraph">
+<p>The <strong>FP_FAST_FMA</strong> macro indicates whether the <strong>fma()</strong> family of
+functions are fast compared with direct code for double precision
+floating-point.
+If defined, the <strong>FP_FAST_FMA</strong> macro shall indicate that the <strong>fma()</strong>
+function generally executes about as fast as, or faster than, a multiply and
+an add of <strong>double</strong> operands.</p>
+</div>
+<div class="paragraph">
+<p>The macro names given in the following list must use the values specified.
+These constant expressions are suitable for use in #if preprocessing
+directives.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code data-lang="c"><span class="preprocessor">#define</span> DBL_DIG             <span class="integer">15</span>
+<span class="preprocessor">#define</span> DBL_MANT_DIG        <span class="integer">53</span>
+<span class="preprocessor">#define</span> DBL_MAX_10_EXP      +<span class="integer">308</span>
+<span class="preprocessor">#define</span> DBL_MAX_EXP         +<span class="integer">1024</span>
+<span class="preprocessor">#define</span> DBL_MIN_10_EXP      -<span class="integer">307</span>
+<span class="preprocessor">#define</span> DBL_MIN_EXP         -<span class="integer">1021</span>
+<span class="preprocessor">#define</span> DBL_RADIX           <span class="integer">2</span>
+<span class="preprocessor">#define</span> DBL_MAX             <span class="hex">0x1</span>.fffffffffffffp1023
+<span class="preprocessor">#define</span> DBL_MIN             <span class="hex">0x1</span><span class="float">.0</span>p-<span class="integer">1022</span>
+<span class="preprocessor">#define</span> DBL_EPSILON         <span class="hex">0x1</span><span class="float">.0</span>p-<span class="integer">52</span></code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following table describes the built-in macro names given above in the
+OpenCL C programming language and the corresponding macro names available to
+the application.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Macro in OpenCL Language</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Macro for application</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_DIG</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_DIG</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MANT_DIG</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MANT_DIG</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MAX_10_EXP</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MAX_10_EXP</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MAX_EXP</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MAX_EXP</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MIN_10_EXP</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MIN_10_EXP</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MIN_EXP</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MIN_EXP</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_RADIX</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_RADIX</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MAX</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MAX</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_MIN</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_MIN</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>DBL_EPSILSON</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>CL_DBL_EPSILON</strong></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>The following constants are also available.
+They are of type <code>double</code> and are accurate within the precision of the <code>double</code>
+type.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Constant</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_E</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of e</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_LOG2E</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of log<sub>2</sub>e</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_LOG10E</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of log<sub>10</sub>e</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_LN2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of log<sub>e</sub>2</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_LN10</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of log<sub>e</sub>10</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_PI</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of π</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_PI_2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of π / 2</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_PI_4</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of π / 4</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_1_PI</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of 1 / π</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_2_PI</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of 2 / π</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_2_SQRTPI</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of 2 / √π</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_SQRT2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of √2</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>M_SQRT1_2</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Value of 1 / √2</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-common-functions">6.1.3. Common Functions</h4>
+<div class="paragraph">
+<p>The built-in common functions defined in <em>table 6.12</em> (also listed below)
+are extended to include appropriate versions of functions that take <code>double</code>
+and <code>double{2|3|4|8|16}</code> as arguments and return values.
+gentype now also includes <code>double</code>, <code>double2</code>, <code>double3</code>, <code>double4</code>, <code>double8</code> and
+<code>double16</code>.
+These are described below.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 13. Double Precision Built-in Common Functions</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>clamp</strong> (<br>
+  gentype <em>x</em>, gentype <em>minval</em>, gentype <em>maxval</em>)</p>
+<p class="tableblock">  gentype <strong>clamp</strong> (<br>
+  gentype <em>x</em>, double <em>minval</em>, double <em>maxval</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <strong>min</strong>(<strong>max</strong>(<em>x</em>, <em>minval</em>), <em>maxval</em>).</p>
+<p class="tableblock">  Results are undefined if <em>minval</em> &gt; <em>maxval</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>degrees</strong> (gentype <em>radians</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Converts <em>radians</em> to degrees,<br>
+  i.e. (180 / π) * <em>radians</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>max</strong> (gentype <em>x</em>, gentype <em>y</em>)<br>
+  gentype <strong>max</strong> (gentype <em>x</em>, double <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>x</em> &lt; <em>y</em>, otherwise it returns <em>x</em>.
+  If <em>x</em> and <em>y</em> are infinite or NaN, the return values are undefined.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>min</strong> (gentype <em>x</em>, gentype <em>y</em>)<br>
+  gentype <strong>min</strong> (gentype <em>x</em>, double <em>y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns <em>y</em> if <em>y</em> &lt; <em>x</em>, otherwise it returns <em>x</em>.
+  If <em>x</em> and <em>y</em> are infinite or NaN, the return values are undefined.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>mix</strong> (gentype <em>x</em>, gentype <em>y</em>, gentype <em>a</em>)<br>
+  gentype <strong>mix</strong> (gentype <em>x</em>, gentype <em>y</em>, double <em>a</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the linear blend of <em>x</em> and <em>y</em> implemented as:</p>
+<p class="tableblock">  <em>x</em> + (<em>y</em> - <em>x)</em> * <em>a</em></p>
+<p class="tableblock">  <em>a</em> must be a value in the range 0.0 &#8230;&#8203; 1.0.
+  If <em>a</em> is not in the range 0.0 &#8230;&#8203; 1.0, the return values are undefined.</p>
+<p class="tableblock">  Note: The double precision <strong>mix</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>radians</strong> (gentype <em>degrees</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Converts <em>degrees</em> to radians, i.e. (π / 180) * <em>degrees</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>step</strong> (gentype <em>edge</em>, gentype <em>x</em>)<br>
+  gentype <strong>step</strong> (double <em>edge</em>, gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns 0.0 if <em>x</em> &lt; <em>edge</em>, otherwise it returns 1.0.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>smoothstep</strong> (<br>
+  gentype <em>edge0</em>, gentype <em>edge1</em>, gentype <em>x</em>)<br></p>
+<p class="tableblock">  gentype <strong>smoothstep</strong> (<br>
+  double <em>edge0</em>, double <em>edge1</em>, gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns 0.0 if <em>x</em> &lt;= <em>edge0</em> and 1.0 if <em>x</em> &gt;= <em>edge1</em> and performs
+  smooth Hermite interpolation between 0 and 1 when <em>edge0</em> &lt; <em>x</em> &lt; <em>edge1</em>.
+  This is useful in cases where you would want a threshold function with a
+  smooth transition.</p>
+<p class="tableblock">  This is equivalent to:</p>
+<p class="tableblock">  gentype <em>t</em>;<br>
+  <em>t</em> = clamp ((<em>x</em> - <em>edge0</em>) / (<em>edge1</em> - <em>edge0</em>), 0, 1);<br>
+  return <em>t</em> * <em>t</em> * (3 - 2 * <em>t</em>);<br></p>
+<p class="tableblock">  Results are undefined if <em>edge0</em> &gt;= <em>edge1</em>.</p>
+<p class="tableblock">  Note: The double precision <strong>smoothstep</strong> function can be implemented using contractions such as <strong>mad</strong> or <strong>fma</strong>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>sign</strong> (gentype <em>x</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns 1.0 if <em>x</em> &gt; 0, -0.0 if <em>x</em> = -0.0, +0.0 if <em>x</em> = +0.0, or -1.0 if
+  <em>x</em> &lt; 0.
+  Returns 0.0 if <em>x</em> is a NaN.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-geometric-functions">6.1.4. Geometric Functions</h4>
+<div class="paragraph">
+<p>The built-in geometric functions defined in <em>table 6.13</em> (also listed below)
+are extended to include appropriate versions of functions that take <code>double</code>
+and <code>double{2|3|4}</code> as arguments and return values.
+gentype now also includes <code>double</code>, <code>double2</code>, <code>double3</code> and <code>double4</code>.
+These are described below.</p>
+</div>
+<div class="paragraph">
+<p>Note: The double precision geometric functions can be implemented using
+contractions such as <strong>mad</strong> or <strong>fma</strong>.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 14. <em>Double Precision Built-in Geometric Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double4 <strong>cross</strong> (double4 <em>p0</em>, double4 <em>p1</em>)<br>
+  double3 <strong>cross</strong> (double3 <em>p0</em>, double3 <em>p1</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the cross product of <em>p0.xyz</em> and <em>p1.xyz</em>.
+  The <em>w</em> component of the result will be 0.0.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double <strong>dot</strong> (gentype <em>p0</em>, gentype <em>p1</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Compute the dot product of <em>p0</em> and <em>p1</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double <strong>distance</strong> (gentype <em>p0</em>, gentype <em>p1</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the distance between <em>p0</em> and <em>p1</em>.
+  This is calculated as <strong>length</strong>(<em>p0</em> - <em>p1</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double <strong>length</strong> (gentype <em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return the length of vector x, i.e.,<br>
+  sqrt( <em>p.x</em><sup>2</sup> + <em>p.y</em><sup>2</sup> + &#8230;&#8203; )</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype <strong>normalize</strong> (gentype <em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns a vector in the same direction as <em>p</em> but with a length of 1.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-relational-functions">6.1.5. Relational Functions</h4>
+<div class="paragraph">
+<p>The scalar and vector relational functions described in <em>table 6.14</em> are
+extended to include versions that take <code>double</code>, <code>double2</code>, <code>double3</code>, <code>double4</code>,
+<code>double8</code> and <code>double16</code> as arguments.</p>
+</div>
+<div class="paragraph">
+<p>The relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, !=, ==) can be used
+with <code>doublen</code> vector types and shall produce a vector <code>longn</code> result as
+described in <em>section 6.3</em>.</p>
+</div>
+<div class="paragraph">
+<p>The functions <strong>isequal</strong>, <strong>isnotequal</strong>, <strong>isgreater</strong>, <strong>isgreaterequal</strong>,
+<strong>isless</strong>, <strong>islessequal</strong>, <strong>islessgreater</strong>, <strong>isfinite</strong>, <strong>isinf</strong>, <strong>isnan</strong>,
+<strong>isnormal</strong>, <strong>isordered</strong>, <strong>isunordered</strong> and <strong>signbit</strong> shall return a 0 if the
+specified relation is <em>false</em> and a 1 if the specified relation is true for
+scalar argument types.
+These functions shall return a 0 if the specified relation is <em>false</em> and a
+-1 (i.e. all bits set) if the specified relation is <em>true</em> for vector
+argument types.</p>
+</div>
+<div class="paragraph">
+<p>The relational functions <strong>isequal</strong>, <strong>isgreater</strong>, <strong>isgreaterequal</strong>, <strong>isless</strong>,
+<strong>islessequal</strong>, and <strong>islessgreater</strong> always return 0 if either argument is not
+a number (NaN).
+<strong>isnotequal</strong> returns 1 if one or both arguments are not a number (NaN) and
+the argument type is a scalar and returns -1 if one or both arguments are
+not a number (NaN) and the argument type is a vector.</p>
+</div>
+<div class="paragraph">
+<p>The functions described in <em>table 6.14</em> are extended to include the <code>doublen`</code>
+vector types.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 15. <em>Double Precision Relational Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isequal</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isequal</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> == <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isnotequal</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isnotequal</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> != <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isgreater</strong> (double <em>x</em>, double <em>y</em>)
+  long<em>n</em> <strong>isgreater</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> &gt; <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isgreaterequal</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isgreaterequal</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> &gt;= <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isless</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isless</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> &lt; <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>islessequal</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>islessequal</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of <em>x</em> &lt;= <em>y</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>islessgreater</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>islessgreater</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Returns the component-wise compare of (<em>x</em> &lt; <em>y</em>) || (<em>x</em> &gt; <em>y</em>) .</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isfinite</strong> (double)<br>
+  long<em>n</em> <strong>isfinite</strong> (double<em>n</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test for finite value.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isinf</strong> (double)<br>
+  long<em>n</em> <strong>isinf</strong> (double<em>n</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test for infinity value (positive or negative) .</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isnan</strong> (double)<br>
+  long<em>n</em> <strong>isnan</strong> (double<em>n</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test for a NaN.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isnormal</strong> (double)<br>
+  long<em>n</em> <strong>isnormal</strong> (double<em>n</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test for a normal value.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isordered</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isordered</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test if arguments are ordered.
+  <strong>isordered</strong>() takes arguments <em>x</em> and <em>y</em>, and returns the result
+  <strong>isequal</strong>(<em>x</em>, <em>x</em>) &amp;&amp; <strong>isequal</strong>(<em>y</em>, <em>y</em>).</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>isunordered</strong> (double <em>x</em>, double <em>y</em>)<br>
+  long<em>n</em> <strong>isunordered</strong> (double<em>n x</em>, double<em>n y</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test if arguments are unordered.
+  <strong>isunordered</strong>() takes arguments <em>x</em> and <em>y</em>, returning non-zero if <em>x</em> or
+  <em>y</em> is a NaN, and zero otherwise.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int <strong>signbit</strong> (double)<br>
+  long<em>n</em> <strong>signbit</strong> (double<em>n</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Test for sign bit.
+  The scalar version of the function returns a 1 if the sign bit in the double
+  is set else returns 0.
+  The vector version of the function returns the following for each
+  component in double<em>n</em>: -1 (i.e all bits set) if the sign bit in the double
+  is set else returns 0.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>bitselect</strong> (double<em>n a</em>, double<em>n b</em>, double<em>n c</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Each bit of the result is the corresponding bit of <em>a</em> if the
+  corresponding bit of <em>c</em> is 0.
+  Otherwise it is the corresponding bit of <em>b</em>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">double<em>n</em> <strong>select</strong> (double<em>n a</em>, double<em>n b</em>, long<em>n c</em>)<br>
+  double<em>n</em> <strong>select</strong> (double<em>n a</em>, double<em>n b</em>, ulong<em>n c</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">For each component,<br>
+  <em>result[i]</em> = if MSB of <em>c[i]</em> is set ? <em>b[i]</em> : <em>a[i]</em>.<br></p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-vector-data-load-and-store-functions">6.1.6. Vector Data Load and Store Functions</h4>
+<div class="paragraph">
+<p>The vector data load (<strong>vload<em>n</em></strong>) and store (<strong>vstore<em>n</em></strong>) functions
+described in <em>table 6.13</em> (also listed below) are extended to include
+versions that read from or write to double scalar or vector values.
+The generic type <code>gentype</code> is extended to include <code>double</code>.
+The generic type <code>gentypen</code> is extended to include <code>double2</code>, <code>double3</code>,
+<code>double4</code>, <code>double8</code> and <code>double16</code>.
+The <strong>vstore_half</strong>, <strong>vstore_half<em>n </em></strong>and <strong>vstorea_half<em>n </em></strong>
+functions are extended to allow a double precision scalar or vector
+value to be written to memory as half values.</p>
+</div>
+<div class="paragraph">
+<p>Note: <strong>vload3</strong> reads (<em>x</em>,<em>y</em>,<em>z</em>) components from address
+<code>(<em>p</em> + (<em>offset</em> * 3))</code> into a 3-component vector.
+<strong>vstore3</strong>, and <strong>vstore_half3</strong> write (<em>x</em>,<em>y</em>,<em>z</em>) components from a
+3-component vector to address <code>(<em>p</em> + (<em>offset</em> * 3))</code>.
+In addition, <strong>vloada_half3</strong> reads (<em>x</em>,<em>y</em>,<em>z</em>) components from address
+<code>(<em>p</em> + (<em>offset</em> * 4))</code> into a 3-component vector and <strong>vstorea_half3</strong>
+writes (<em>x</em>,<em>y</em>,<em>z</em>) components from a 3-component vector to address
+<code>(<em>p</em> + (<em>offset</em> * 4))</code>.
+Whether <strong>vloada_half3</strong> and <strong>vstorea_half3</strong> read/write padding data
+between the third vector element and the next alignment boundary is
+implementation defined.
+<strong>vloada_</strong> and <strong>vstoreaa_</strong> variants are provided to access data that is
+aligned to the size of the vector, and are intended to enable performance
+on hardware that can take advantage of the increased alignment.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 16. <em>Double Precision Vector Data Load and Store Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __global gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __local gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __constant gentype *<em>p</em>)</p>
+<p class="tableblock">  gentype<em>n</em> <strong>vload<em>n</em></strong>(size_t <em>offset</em>, const __private gentype *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Return sizeof (gentype<em>n</em>) bytes of data read from address
+  (<em>p</em> + (<em>offset * n</em>)).
+  The read address computed as (<em>p</em> + (<em>offset * n</em>)) must be 8-bit aligned
+  if gentype is char, uchar; 16-bit aligned if gentype is short, ushort;
+  32-bit aligned if gentype is int, uint, float; 64-bit aligned if
+  gentype is long, ulong or double.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __global gentype *<em>p</em>)</p>
+<p class="tableblock">  void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __local gentype *<em>p</em>)</p>
+<p class="tableblock">  void <strong>vstore<em>n</em></strong>(gentype<em>n</em> <em>data</em>, size_t <em>offset</em>, __private gentype *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Write sizeof (gentype<em>n</em>) bytes given by <em>data</em> to address
+  (<em>p</em> + (<em>offset * n</em>)).
+  The address computed as (<em>p</em> + (<em>offset * n</em>)) must be 8-bit aligned
+  if gentype is char, uchar; 16-bit aligned if gentype is short, ushort;
+  32-bit aligned if gentype is int, uint, float; 64-bit aligned
+  if gentype is long, ulong or double.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half</strong>(double <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half_rte</strong>(double <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half_rtz</strong>(double <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half_rtp</strong>(double <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half_rtn</strong>(double <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstore_half</strong>(double <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half_rte</strong>(double <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half_rtz</strong>(double <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half_rtp</strong>(double <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half_rtn</strong>(double <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstore_half</strong>(double <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half_rte</strong>(double <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half_rtz</strong>(double <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half_rtp</strong>(double <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half_rtn</strong>(double <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The double value given by <em>data</em> is first converted to a half value
+  using the appropriate rounding mode.
+  The half value is then written to the address computed as
+  (<em>p</em> + <em>offset</em>).
+  The address computed as (<em>p</em> + <em>offset</em>) must be 16-bit aligned.</p>
+<p class="tableblock">  <strong>vstore_half</strong> uses the current rounding mode.
+  The default current rounding mode is round to nearest even.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstore_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstore_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstore_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstore_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The double<em>n</em> value given by <em>data</em> is converted to a half<em>n</em> value
+  using the appropriate rounding mode.
+  The half<em>n </em>value is then written to the address computed as
+  (<em>p</em> + (<em>offset * n</em>)).
+  The address computed as (<em>p</em> + (<em>offset * n</em>)) must be 16-bit
+  aligned.</p>
+<p class="tableblock">  <strong>vstore_half<em>n </em></strong>uses the current rounding mode.
+  The default current rounding mode is round to nearest even.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">void <strong>vstorea_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __global half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstorea_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __local half *<em>p</em>)<br></p>
+<p class="tableblock">  void <strong>vstorea_half<em>n</em></strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rte</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtz</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtp</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)<br>
+  void <strong>vstorea_half<em>n</em>_rtn</strong>(double<em>n</em> <em>data</em>, size_t <em>offset</em>, __private half *<em>p</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The double<em>n</em> value is converted to a half<em>n</em> value
+  using the appropriate rounding mode.</p>
+<p class="tableblock">  For n = 1, 2, 4, 8 or 16, the half<em>n</em> value is written to the
+  address computed as
+  (<em>p</em> + (<em>offset * n</em>)).
+  The address computed as (<em>p</em> + (<em>offset * n</em>)) must be aligned to
+  sizeof (half<em>n</em>) bytes.</p>
+<p class="tableblock">  For n = 3, the half<em>3</em> value is written to the address computed as
+  (<em>p</em> + (<em>offset * 4</em>)).
+  The address computed as (<em>p</em> + (<em>offset * 4</em>)) must be aligned to
+  sizeof (half) * 4 bytes.</p>
+<p class="tableblock">  <strong>vstorea_half<em>n</em></strong> uses the current rounding mode.
+  The default current rounding mode is round to nearest even.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="cl_khr_fp64-async-copies-from-global-to-local-memory-local-to-global-memory-and-prefetch">6.1.7. Async Copies from Global to Local Memory, Local to Global Memory, and Prefetch</h4>
+<div class="paragraph">
+<p>The OpenCL C programming language implements the following functions that
+provide asynchronous copies between global and local memory and a prefetch
+from global memory.</p>
+</div>
+<div class="paragraph">
+<p>The generic type gentype is extended to include <code>double</code>, <code>double2</code>, <code>double3</code>,
+<code>double4</code>, <code>double8</code> and <code>double16</code>.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 17. <em>Double Precision Built-in Async Copy and Prefetch Functions</em></caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top"><strong>Function</strong></th>
+<th class="tableblock halign-left valign-top"><strong>Description</strong></th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">event_t <strong>async_work_group_copy</strong> (<br>
+  __local gentype *<em>dst</em>,<br>
+  const __global gentype *<em>src</em>,<br>
+  size_t <em>num_gentypes</em>, event_t <em>event</em>)</p>
+<p class="tableblock">  event_t <strong>async_work_group_copy</strong> (<br>
+  __global gentype <em>*dst</em>,<br>
+  const __local gentype *<em>src</em>,<br>
+  size_t <em>num_gentypes</em>, event_t <em>event</em>)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Perform an async copy of <em>num_gentypes</em> gentype elements from <em>src</em> to
+  <em>dst</em>.
+  The async copy is performed by all work-items in a work-group and this
+  built-in function must therefore be encountered by all work-items in a
+  work-group executing the kernel with the same argument values; otherwise
+  the results are undefined.</p>
+<p class="tableblock">  Returns an event object that can be used by <strong>wait_group_events</strong> to wait
+  for the async copy to finish.
+  The <em>event</em> argument can also be used to associate the
+  <strong>async_work_group_copy</strong> with a previous async copy allowing an event to be
+  shared by multiple async copies; otherwise <em>event</em> should be zero.</p>
+<p class="tableblock">  If <em>event</em> argu