10e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===- SPIRVBuiltin.h - SPIR-V extended instruction --------------*- C++ -*-===//
20e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
30e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//                     The LLVM/SPIRV Translator
40e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
50e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// This file is distributed under the University of Illinois Open Source
60e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// License. See LICENSE.TXT for details.
70e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
80e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Copyright (c) 2014 Advanced Micro Devices, Inc. All rights reserved.
90e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Permission is hereby granted, free of charge, to any person obtaining a
110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// copy of this software and associated documentation files (the "Software"),
120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// to deal with the Software without restriction, including without limitation
130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// the rights to use, copy, modify, merge, publish, distribute, sublicense,
140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// and/or sell copies of the Software, and to permit persons to whom the
150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Software is furnished to do so, subject to the following conditions:
160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Redistributions of source code must retain the above copyright notice,
180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// this list of conditions and the following disclaimers.
190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Redistributions in binary form must reproduce the above copyright notice,
200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// this list of conditions and the following disclaimers in the documentation
210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// and/or other materials provided with the distribution.
220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Neither the names of Advanced Micro Devices, Inc., nor the names of its
230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// contributors may be used to endorse or promote products derived from this
240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// Software without specific prior written permission.
250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung// THE SOFTWARE.
320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//
330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===----------------------------------------------------------------------===//
340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// \file
350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung///
360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung/// This file defines SPIR-V extended instructions.
370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung///
380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung//===----------------------------------------------------------------------===//
390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#ifndef SPIRVBUILTIN_HPP_
410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#define SPIRVBUILTIN_HPP_
420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include "SPIRVUtil.h"
440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include "OpenCL.std.h"
450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include <string>
470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#include <vector>
480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungnamespace SPIRV{
500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline bool
530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungisOpenCLBuiltinSet (SPIRVExtInstSetKind Set) {
540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  return Set == SPIRVEIS_OpenCL;
550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtypedef OpenCLLIB::Entrypoints OCLExtOpKind;
580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sungtemplate<> inline void
600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRVMap<OCLExtOpKind, std::string>::init() {
610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Acos, "acos");
620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Acosh, "acosh");
630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Acospi, "acospi");
640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Asin, "asin");
650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Asinh, "asinh");
660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Asinpi, "asinpi");
670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Atan, "atan");
680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Atan2, "atan2");
690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Atanh, "atanh");
700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Atanpi, "atanpi");
710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Atan2pi, "atan2pi");
720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Cbrt, "cbrt");
730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Ceil, "ceil");
740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Copysign, "copysign");
750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Cos, "cos");
760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Cosh, "cosh");
770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Cospi, "cospi");
780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Erfc, "erfc");
790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Erf, "erf");
800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Exp, "exp");
810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Exp2, "exp2");
820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Exp10, "exp10");
830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Expm1, "expm1");
840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fabs, "fabs");
850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fdim, "fdim");
860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Floor, "floor");
870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fma, "fma");
880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fmax, "fmax");
890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fmin, "fmin");
900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fmod, "fmod");
910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fract, "fract");
920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Frexp, "frexp");
930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Hypot, "hypot");
940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Ilogb, "ilogb");
950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Ldexp, "ldexp");
960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Lgamma, "lgamma");
970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Lgamma_r, "lgamma_r");
980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Log, "log");
990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Log2, "log2");
1000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Log10, "log10");
1010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Log1p, "log1p");
1020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Logb, "logb");
1030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Mad, "mad");
1040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Maxmag, "maxmag");
1050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Minmag, "minmag");
1060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Modf, "modf");
1070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Nan, "nan");
1080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Nextafter, "nextafter");
1090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Pow, "pow");
1100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Pown, "pown");
1110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Powr, "powr");
1120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Remainder, "remainder");
1130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Remquo, "remquo");
1140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Rint, "rint");
1150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Rootn, "rootn");
1160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Round, "round");
1170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Rsqrt, "rsqrt");
1180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sin, "sin");
1190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sincos, "sincos");
1200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sinh, "sinh");
1210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sinpi, "sinpi");
1220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sqrt, "sqrt");
1230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Tan, "tan");
1240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Tanh, "tanh");
1250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Tanpi, "tanpi");
1260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Tgamma, "tgamma");
1270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Trunc, "trunc");
1280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_cos, "half_cos");
1290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_divide, "half_divide");
1300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_exp, "half_exp");
1310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_exp2, "half_exp2");
1320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_exp10, "half_exp10");
1330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_log, "half_log");
1340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_log2, "half_log2");
1350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_log10, "half_log10");
1360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_powr, "half_powr");
1370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_recip, "half_recip");
1380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_rsqrt, "half_rsqrt");
1390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_sin, "half_sin");
1400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_sqrt, "half_sqrt");
1410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Half_tan, "half_tan");
1420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_cos, "native_cos");
1430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_divide, "native_divide");
1440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_exp, "native_exp");
1450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_exp2, "native_exp2");
1460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_exp10, "native_exp10");
1470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_log, "native_log");
1480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_log2, "native_log2");
1490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_log10, "native_log10");
1500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_powr, "native_powr");
1510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_recip, "native_recip");
1520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_rsqrt, "native_rsqrt");
1530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_sin, "native_sin");
1540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_sqrt, "native_sqrt");
1550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Native_tan, "native_tan");
1560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::FClamp, "fclamp");
1570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Degrees, "degrees");
1580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Mix, "mix");
1590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::FMax_common, "fmax_common");
1600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::FMin_common, "fmin_common");
1610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Radians, "radians");
1620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Step, "step");
1630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Smoothstep, "smoothstep");
1640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Sign, "sign");
1650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Cross, "cross");
1660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Distance, "distance");
1670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Length, "length");
1680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Normalize, "normalize");
1690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fast_distance, "fast_distance");
1700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fast_length, "fast_length");
1710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Fast_normalize, "fast_normalize");
1720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagef, "read_imagef");
1730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagei, "read_imagei");
1740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageui, "read_imageui");
1750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageh, "read_imageh");
1760e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagef_samplerless, "read_imagef_samplerless");
1770e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagei_samplerless, "read_imagei_samplerless");
1780e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageui_samplerless, "read_imageui_samplerless");
1790e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageh_samplerless, "read_imageh_samplerless");
1800e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imagef, "write_imagef");
1810e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imagei, "write_imagei");
1820e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imageui, "write_imageui");
1830e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imageh, "write_imageh");
1840e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagef_mipmap_lod, "read_imagef_mipmap_lod");
1850e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagei_mipmap_lod, "read_imagei_mipmap_lod");
1860e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageui_mipmap_lod, "read_imageui_mipmap_lod");
1870e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagef_mipmap_grad, "read_imagef_mipmap_gradient");
1880e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imagei_mipmap_grad, "read_imagei_mipmap_gradient");
1890e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Read_imageui_mipmap_grad, "read_imageui_mipmap_gradient");
1900e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imagef_mipmap_lod, "write_imagef_mipmap_lod");
1910e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imagei_mipmap_lod, "write_imagei_mipmap_lod");
1920e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Write_imageui_mipmap_lod, "write_imageui_mipmap_lod");
1930e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_width, "get_image_width");
1940e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_height, "get_image_height");
1950e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_depth, "get_image_depth");
1960e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_channel_data_type, "get_image_channel_data_type");
1970e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_channel_order, "get_image_channel_order");
1980e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_dim, "get_image_dim");
1990e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_array_size, "get_image_array_size");
2000e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_num_samples, "get_image_num_samples");
2010e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Get_image_num_mip_levels, "get_image_num_mip_levels");
2020e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SAbs, "s_abs");
2030e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SAbs_diff, "s_abs_diff");
2040e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SAdd_sat, "s_add_sat");
2050e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UAdd_sat, "u_add_sat");
2060e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SHadd, "s_hadd");
2070e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UHadd, "u_hadd");
2080e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SRhadd, "s_rhadd");
2090e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::URhadd, "u_rhadd");
2100e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SClamp, "s_clamp");
2110e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UClamp, "u_clamp");
2120e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Clz, "clz");
2130e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Ctz, "ctz");
2140e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMad_hi, "s_mad_hi");
2150e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMad_sat, "s_mad_sat");
2160e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMad_sat, "u_mad_sat");
2170e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMax, "s_max");
2180e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMin, "s_min");
2190e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMax, "u_max");
2200e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMin, "u_min");
2210e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMul_hi, "s_mul_hi");
2220e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Rotate, "rotate");
2230e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SSub_sat, "s_sub_sat");
2240e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::USub_sat, "u_sub_sat");
2250e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::U_Upsample, "u_upsample");
2260e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::S_Upsample, "s_upsample");
2270e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Popcount, "popcount");
2280e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMad24, "s_mad24");
2290e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMad24, "u_mad24");
2300e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::SMul24, "s_mul24");
2310e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMul24, "u_mul24");
2320e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vloadn, "vloadn");
2330e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstoren, "vstoren");
2340e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vload_half, "vload_half");
2350e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vload_halfn, "vload_halfn");
2360e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstore_half, "vstore_half");
2370e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstore_half_r, "vstore_half_r");
2380e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstore_halfn, "vstore_halfn");
2390e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstore_halfn_r, "vstore_halfn_r");
2400e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vloada_halfn, "vloada_halfn");
2410e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstorea_halfn, "vstorea_halfn");
2420e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Vstorea_halfn_r, "vstorea_halfn_r");
2430e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Shuffle, "shuffle");
2440e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Shuffle2, "shuffle2");
2450e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Printf, "printf");
2460e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Prefetch, "prefetch");
2470e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Bitselect, "bitselect");
2480e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::Select, "select");
2490e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UAbs, "u_abs");
2500e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UAbs_diff, "u_abs_diff");
2510e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMul_hi, "u_mul_hi");
2520e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  add(OpenCLLIB::UMad_hi, "u_mad_hi");
2530e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
2540e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungSPIRV_DEF_NAMEMAP(OCLExtOpKind, OCLExtOpMap)
2550e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
2560e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline bool
2570e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungisReadImage(SPIRVWord EntryPoint) {
2580e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  return EntryPoint >= OpenCLLIB::Read_imagef &&
2590e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung      EntryPoint <= OpenCLLIB::Read_imageui;
2600e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
2610e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
2620e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline bool
2630e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungisWriteImage(SPIRVWord EntryPoint) {
2640e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  return EntryPoint >= OpenCLLIB::Write_imagef &&
2650e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung      EntryPoint <= OpenCLLIB::Write_imageui;
2660e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
2670e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
2680e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sunginline bool
2690e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) SungisReadOrWriteImage(SPIRVWord EntryPoint) {
2700e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung  return isReadImage(EntryPoint) || isWriteImage(EntryPoint);
2710e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
2720e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
2730e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung}
2740e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung
2750e839d7e9d7e5a096949e39a4c6e00670c8dee64I-Jui (Ray) Sung#endif
276