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