<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">
<!-- saved from url=(0013)about:internet -->
<?xml-stylesheet type="text/xsl" href="mathml.xsl"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:pref="http://www.w3.org/2002/Math/preference" xmlns:xlink="http://www.w3.org/1999/xlink" pref:renderer="mathplayer-dl">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style xmlns="" type="text/css">
    /* This style sets a margin around the entire page */
        html, body {
            margin: 10px;
        }

        p {
            font: normal 16px verdana, sans-serif;
            margin: 0;
            padding-bottom:12px;
        }

        h1 {
            font: bold 25px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h2 {
            font: bold 19px verdana, sans-serif;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        h3 {
            font: bold 19px verdana, sans-serif !important;
            margin-top: 28px;
            margin-bottom: 3px;
            padding-top: 0;
            padding-bottom: 0;
        }

        li {
            font: normal 16px verdana, sans-serif;
            margin-top: 0;
            margin-bottom: 18px;
            padding-top: 0;
            padding-bottom: 0;
        }

        .pdparam {
            font: italic 16px verdana, sans-serif;
        }

                .term {
                        font: italic 16px verdana, sans-serif;
                        font-weight: normal;
                }

                .type {
                        font: normal 16px verdana, sans-serif !important;
                }

                .parameter {
                        font-style: italic;
                        }

        a:link, a:visited {
            color: blue;
            text-decoration: none;
            font: normal 16px;
        }

        a:hover {
            background-color: #FFFF99;
            font: normal 16px;
        }

        div.funcsynopsis {
            text-align: left;
            background-color: #e6e6e6;
            font: normal 16px verdana, sans-serif;
                        padding-top: 10px;
                        padding-bottom: 10px;
        }

        div.funcsynopsis table {
            border-collapse: separate;
            font: normal 16px verdana, sans-serif;
        }

        div.funcsynopsis td {
            background-color: #e6e6e6;
            border: 0 solid #000;
            padding: 1px;
            font: normal 16px verdana, sans-serif;
        }

        div.refsect1 {
            font-family: verdana, sans-serif;
            font-size: 16px;
        }

        code.constant {
            font: normal 16px courier new, monospace !important;
        }

                span.errorname {
            font: normal 16px verdana, sans-serif !important;
        }

        code.function {
            font: bold 16px verdana, sans-serif !important;
        }

        b.fsfunc {
            font: bold 16px verdana, sans-serif !important;
        }

        code.varname {
            font: italic 16px verdana, sans-serif;
        }

        code.replaceable {
            font: italic 16px courier new, monospace;
        }

        code.funcdef {
            font: normal 16px verdana, sans-serif !important;
        }

        .citerefentry {
            font: normal 16px verdana, sans-serif !important;
        }

        .parameter {
            font-style: italic;
        }

        code.fsfunc {
            font: normal 16px verdana, sans-serif !important;
        }

        /* PARAMETER: This style controls spacing between the terms in Parameter section */
        dt {
            margin-top: 15px;
        }

        /* TABLES: These styles apply to all tables OTHER than the Synopsis and Example tables */
        div.refsect1 table {
            width: 100%;
                        margin-top: 10px;
            background-color: #FFF;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
                        font: normal 16px verdana, sans-serif;
        }

        div.refsect1 th {
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: bold 16px verdana, sans-serif;
        }

        div.refsect1 td {
            background-color: #FFF;
            padding: 5px;
            vertical-align: text-top;
                        border-collapse: collapse;
                        border-color: #000;
            border-width: 1px;
            font: normal 16px verdana, sans-serif;
        }

                  div.refsect1 p{
            font: normal 16px verdana, sans-serif;
            margin-top: 8px;
            margin-bottom: 8px;
            padding-top: 0;
            padding-bottom: 0;
        }


        /* EXAMPLE: These styles apply only to the Example section */
        div.refsect2 {
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 table {
            margin-top: 0;
            background-color: #e6e6e6;
            width: 100%;
            border: 0 solid #000;
            padding: 2px;
            font: normal 16px courier new, monospace !important;
        }

        div.refsect2 td {
            background-color: #e6e6e6;
            font: normal 16px courier new, monospace !important;
                        white-space:pre;
        }

        /* COPYRIGHT: This style formats the text of the copyright statement at the bottom of the page */
        div.refsect3 {
            font: normal 11px verdana, sans-serif;
            margin-top: 50px;
            margin-bottom: 20px;
            padding-top: 0;
            padding-bottom: 0;
        }

</style>
    <title>Reinterpreting Types Using as_type() and as_typen()</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.79.1" />
    <meta name="keywords" content="Reinterpreting Types, as_typen(), as_type()" />
  </head>
  <body>
    <div class="refentry">
      <a id="id-1"></a>
      <div class="titlepage"></div>
      <div xmlns="" class="refnamediv">
        <a xmlns="http://www.w3.org/1999/xhtml" id="ReinterpretingTypesUsingas_typen()"></a>
        <h1>as_type(), as_typen()</h1>
        <p>
        </p>
      </div>
      <div class="refsect2">
        <a id="synopsis"></a>
        <h3></h3>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
as_type()
                        </td>
              </tr>
              <tr>
                <td align="left">
as_type<em class="replaceable"><code>n</code></em>()
                        </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="description"></a>
        <h2>Description</h2>
        <p>
          All data types described in <a class="citerefentry" href="scalarDataTypes.html"><span class="citerefentry"><span class="refentrytitle">Scalar
          Data Types</span></span></a> and
          <a class="citerefentry" href="vectorDataTypes.html"><span class="citerefentry"><span class="refentrytitle">Vector Data
          Types</span></span></a> (except <span class="type">bool</span>, <span class="type">half</span>
          (unless  the <a class="citerefentry" href="cl_khr_fp16.html"><span class="citerefentry"><span class="refentrytitle">cl_khr_fp16</span></span></a>
          extension is supported), and <span class="type">void</span>) may be also reinterpreted as another
          data type of the same size using the <code class="function">as_type()</code> operator for scalar
          data types and the <code class="function">as_type<em class="replaceable"><code>n</code></em>()</code> operator
          for vector data types. When the operand and result type contain the same number of
          elements, the bits in the operand shall be returned directly without modification as
          the new type. The usual type promotion for function arguments shall not be performed.
        </p>
        <p>
          For example, <code class="code">as_float(0x3f800000)</code> returns <code class="code">1.0f</code>, which is
          the value that the bit pattern <code class="code">0x3f800000</code> has if viewed as an IEEE-754
          single precision value.
        </p>
        <p>
          When the operand and result type contain a different number of elements, the result
          shall be implementation-defined except if the operand is a 4-component vector and the
          result is a 3-component vector.  In this case, the bits in the operand shall be returned
          directly without modification as the new type. That is, a conforming implementation shall
          explicitly define a behavior, but two conforming implementations need not have the same
          behavior when the number of elements in the result and operand types does not match. The
          implementation may define the result to contain all, some or none of the original bits
          in whatever order it chooses. It is an error to use the  <code class="function">as_type()</code>
          or  <code class="function">as_type<em class="replaceable"><code>n</code></em>()</code> operators to reinterpret
          data to a type of a different number of bytes.
        </p>
      </div>
      <div class="refsect1">
        <a id="notes"></a>
        <h2>Notes</h2>
        <p>
          While the union is intended to reflect the organization
          of data in memory, the <code class="function">as_type()</code> and
          <code class="function">as_type<em class="replaceable"><code>n</code></em>()</code> constructs are intended
          to reflect the organization of data in register. The <code class="function">as_type()</code>
          and <code class="function">as_type<em class="replaceable"><code>n</code></em>()</code> constructs are intended
          to compile to no instructions on devices that use a shared register file designed to
          operate on both the operand and result types.
        </p>
        <p>
          Note that while differences in memory organization are expected to largely be limited
          to those arising from endianness, the register based representation may also differ
          due to size of the element in register. (For example, an architecture may load a char
          into a 32-bit register, or a char vector into a SIMD vector register with fixed 32-bit
          element size.)
        </p>
        <p>
          If the element count does not match, then the implementation should pick a data
          representation that most closely matches what would happen if an appropriate result type
          operator was applied to a register containing data of the source type. If the number of
          elements matches, then the <code class="function">as_type<em class="replaceable"><code>n</code></em>()</code>
          should faithfully reproduce the behavior expected from a similar data type
          reinterpretation using memory/unions.  So, for example if an implementation stores
          all single precision data as double in register, it should implement as_int( float )
          by first downconverting the double to single precision and then (if necessary) moving
          the single precision bits to a register suitable for operating on integer data.
        </p>
        <p>
          If data stored in different address spaces do not have the same endianness, then the
          "dominant endianness" of the device should prevail.
        </p>
      </div>
      <div class="refsect2">
        <a id="example1"></a>
        <h3>
            Example
        </h3>
        <div class="informaltable">
          <table class="informaltable" border="0">
            <colgroup>
              <col align="left" class="col1" />
            </colgroup>
            <tbody>
              <tr>
                <td align="left">
float f = 1.0f;
uint u = as_uint(f);  // Legal. Contains:  0x3f800000

float4 f = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
// Legal. Contains: (int4)
// (0x3f800000, 0x40000000, 0x40400000, 0x40800000)
int4 i = as_int4(f);

float4 f, g;
int4 is_less = f &lt; g;

// Legal. f[i] = f[i] &lt; g[i] ? f[i] : 0.0f
f = as_float4(as_int4(f) &amp; is_less);

int i;
// Legal. Result is implementation-defined.
short2 j = as_short2(i);

int4 i;
// Legal. Result is implementation-defined.
short8 j = as_short8(i);

float4 f;
//Error. result and operand have different size
double4 g = as_double4(f);   // Only if double is supported.

float4 f;
// Legal. g.xyz will have same values as f.xyz. g.w is undefined
float3 g = as_float3(f);

                        </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="refsect1">
        <a id="specification"></a>
        <h2>Specification</h2>
        <p>
            <img src="pdficon_small1.gif" />

            <a href="https://www.khronos.org/registry/cl/specs/opencl-2.1-openclc.pdf#page=24" target="OpenCL Spec">OpenCL Specification</a>
        </p>
      </div>
      <div class="refsect1">
        <a id="seealso"></a>
        <h2>Also see</h2>
        <p>
            <a class="citerefentry" href="scalarDataTypes.html"><span class="citerefentry"><span class="refentrytitle">Scalar Data Types</span></span></a>,
            <a class="citerefentry" href="vectorDataTypes.html"><span class="citerefentry"><span class="refentrytitle">Vector Data Types</span></span></a>
        </p>
      </div>
      <div xmlns="" class="refsect3" lang="en" xml:lang="en"><a xmlns="http://www.w3.org/1999/xhtml" id="Copyright"></a><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><img xmlns="http://www.w3.org/1999/xhtml" src="KhronosLogo.jpg" /><p xmlns="http://www.w3.org/1999/xhtml"></p>Copyright © 2007-2015 The Khronos Group Inc.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the condition that this copyright notice and permission notice shall be included
in all copies or substantial portions of the Materials.
</div>
    </div>
  </body>
</html>
