blob: a96d9a83a5eeccaa0a51a466726589ee9e107cf5 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook MathML Module V1.1b1//EN"
"http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd">
<refentry>
<refentryinfo>
<keywordset>
<keyword>Preprocessor Directives and Macros</keyword>
</keywordset>
</refentryinfo>
<refmeta>
<refentrytitle>Preprocessor Directives and Macros</refentrytitle>
<refmiscinfo>
<copyright>
<year>2007-2013</year>
<holder>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.</holder>
</copyright>
</refmiscinfo>
<manvolnum>3</manvolnum>
</refmeta>
<!-- ================================ SYNOPSIS -->
<refnamediv id="PreprocessorDirectivesandMacros">
<refname>Preprocessor Directives and Macros</refname>
<refpurpose>
Preprocessor Directives and Macros.
</refpurpose>
</refnamediv>
<!-- ALTERNATIVE SYNTAX SYNOPSIS (NON-FUNCTION) -->
<refsect2 id="synopsis">
<title>
</title>
<informaltable frame="none">
<tgroup cols="1" align="left" colsep="0" rowsep="0">
<colspec colname="col1" colnum="1" />
<tbody>
<row>
<entry>
# <function>pragma</function> <varname>pp-tokens</varname><subscript>opt</subscript> <emphasis>new-line</emphasis>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect2>
<!-- ================================ DESCRIPTION -->
<refsect1 id="description"><title>Description</title>
<para>
The preprocessing directives defined by the C99 specification are supported.
</para>
<para>
A <function># pragma</function> directive where the preprocessing token
<constant>OPENCL</constant> (used instead of <constant>STDC</constant>) does not
immediately follow <function>pragma</function> in the directive (prior to any macro
replacement) causes the implementation to behave in an implementation-defined manner. The
behavior might cause translation to fail or cause the translator or the resulting
program to behave in a non-conforming manner. Any such <function>pragma</function>
that is not recognized by the implementation is ignored. If the preprocessing token
<constant>OPENCL</constant> does immediately follow <function>pragma</function> in the
directive (prior to any macro replacement), then no macro replacement is performed on
the directive, and the directive shall have one of the following forms whose meanings
are described elsewhere:
</para>
<para>
<literallayout><constant> #pragma OPENCL <citerefentry><refentrytitle>FP_CONTRACT</refentrytitle></citerefentry> <replaceable>on-off-switch</replaceable>
<replaceable>on-off-switch</replaceable>: one of ON OFF DEFAULT
#pragma OPENCL <citerefentry><refentrytitle>EXTENSION</refentrytitle></citerefentry> <varname>extensionname : behavior</varname>
#pragma OPENCL <citerefentry><refentrytitle>EXTENSION</refentrytitle></citerefentry> all : <varname>behavior</varname></constant></literallayout>
</para>
<para>
The following predefined macro names are available.
</para>
<itemizedlist mark="disc">
<listitem>
<code>__FILE__</code> The presumed name of the current
source file (a character string literal).
</listitem>
<listitem>
<code>__LINE__</code> The presumed line number (within the current source file)
of the current source line (an integer constant).
</listitem>
<listitem>
<code>__OPENCL_VERSION__</code> substitutes an integer reflecting the version
number of the OpenCL supported by the OpenCL device. The version of OpenCL
described in this document will have <code>__OPENCL_VERSION__</code> substitute
the integer 200.
</listitem>
<listitem>
<code>CL_VERSION_1_0</code> substitutes the integer 100 reflecting the OpenCL 1.0 version.
</listitem>
<listitem>
<code>CL_VERSION_1_1</code> substitutes the integer 110 reflecting the OpenCL 1.1 version.
</listitem>
<listitem>
<code>CL_VERSION_1_2</code> substitutes the integer 120 reflecting the OpenCL 1.2 version.
</listitem>
<listitem>
<code>CL_VERSION_2_0</code> substitutes the integer 200 reflecting the OpenCL 2.0 version.
</listitem>
<listitem>
<code>__OPENCL_C_VERSION__</code> substitutes an integer reflecting
the OpenCL C version specified by the <code>-cl-std</code> build option to
<citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> or
<citerefentry><refentrytitle>clCompileProgram</refentrytitle></citerefentry>.
If the <code>-cl-std</code>
build option is not specified, the highest OpenCL C 1.x
language version supported by each device is used
as the version of OpenCL C when compiling
the program for each device. The version of OpenCL C
described in this document will have
<code>__OPENCL_C_VERSION__</code> substitute the integer 200
if <code>–cl-std=CL2.0</code> is specified.
</listitem>
<listitem>
<code>__ENDIAN_LITTLE__</code> is used to determine if the OpenCL device is a
little endian architecture or a big endian architecture (an integer constant
of 1 if device is little endian and is undefined otherwise). Also refer to
<constant>CL_DEVICE_ENDIAN_LITTLE</constant> specified in the table of OpenCL
Device Queries for
<citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry>.
</listitem>
<listitem>
<code>__kernel_exec(X, type<replaceable>n</replaceable>)</code> (and
<code>kernel_exec(X, type<replaceable>n</replaceable>))</code> is defined as
follows:
<para>
<literallayout> <code>__kernel __attribute__((work_group_size_hint(X, 1, 1)))</code> \
<code>__attribute__((vec_type_hint(type<replaceable>n</replaceable>)))</code></literallayout>
</para>
</listitem>
<listitem>
<code>__IMAGE_SUPPORT__</code> is used to determine if the OpenCL device supports
images. This is an integer constant of 1 if images are supported and is undefined
otherwise. Also refer to <constant>CL_DEVICE_IMAGE_SUPPORT</constant>
specified in the table of OpenCL Device Queries for
<citerefentry><refentrytitle>clGetDeviceInfo</refentrytitle></citerefentry><!--table
4.3-->.
</listitem>
<listitem>
<code>__FAST_RELAXED_MATH__</code> is used to determine if the
cl-fast-relaxed-math optimization option is specified in build options given
to <citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry> or
<citerefentry><refentrytitle>clCompileProgram</refentrytitle></citerefentry>.
This is an integer constant of 1 if the cl-fast-relaxed-math build option
is specified and is undefined otherwise.
</listitem>
<listitem>
The <code>NULL</code> macro expands to a null pointer
constant. An integer constant expression with the
value 0, or such an expression cast to type
<code>void *</code> is called a null pointer constant.
</listitem>
<listitem>
The macro names defined by the C99 specification but not currently supported
by OpenCL are reserved for future use.
</listitem>
<listitem>
The predefined identifier <code>__func__</code> is available.
</listitem>
</itemizedlist>
</refsect1>
<!-- ================================ EXAMPLE -->
<!-- DO NOT DELETE IN CASE AN EXAMPLE IS ADDED IN THE FUTURE -->
<!--
<refsect2 id="example1">
<title>
Example
</title>
<informaltable frame="none">
<tgroup cols="1" align="left" colsep="0" rowsep="0">
<colspec colname="col1" colnum="1" />
<tbody>
<row>
<entry>
Example goes here - it will be set in "code" type with white space preserved.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect2>
-->
<!-- ================================ SPECIFICATION -->
<!-- Set the "uri" attribute in the <olink /> element to the "named destination" for the PDF page
-->
<refsect1 id="specification"><title>Specification</title>
<para>
<imageobject>
<imagedata fileref="pdficon_small1.gif" format="gif" />
</imageobject>
<olink uri="preprocessorDirectives">OpenCL Specification</olink>
</para>
</refsect1>
<!-- ================================ ALSO SEE -->
<refsect1 id="seealso"><title>Also see</title>
<para>
<citerefentry href="mathConstants"><refentrytitle>Symbolic Math Constants</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>clBuildProgram</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>FP_CONTRACT</refentrytitle></citerefentry>,
<citerefentry><refentrytitle>EXTENSION</refentrytitle></citerefentry>
</para>
</refsect1>
<!-- ============================== COPYRIGHT -->
<!-- Content included from copyright.inc.xsl -->
<refsect3 id="Copyright"><title></title>
<imageobject>
<imagedata fileref="KhronosLogo.jpg" format="jpg" />
</imageobject>
<para />
</refsect3>
<!-- 28-Oct-2015, C lang ver 2.0 rev 30 -->
</refentry>