1/*
2** Copyright (c) 2015-2019 The Khronos Group Inc.
3**
4** Permission is hereby granted, free of charge, to any person obtaining a copy
5** of this software and/or associated documentation files (the "Materials"),
6** to deal in the Materials without restriction, including without limitation
7** the rights to use, copy, modify, merge, publish, distribute, sublicense,
8** and/or sell copies of the Materials, and to permit persons to whom the
9** Materials are furnished to do so, subject to the following conditions:
10**
11** The above copyright notice and this permission notice shall be included in
12** all copies or substantial portions of the Materials.
13**
14** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
15** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
16** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
17**
18** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
24** IN THE MATERIALS.
25*/
26
27#ifndef OPENCLstd_H
28#define OPENCLstd_H
29
30#ifdef __cplusplus
31namespace OpenCLLIB {
32
33enum Entrypoints {
34
35 // Section 2.1: Math extended instructions
36 Acos = 0,
37 Acosh = 1,
38 Acospi = 2,
39 Asin = 3,
40 Asinh = 4,
41 Asinpi = 5,
42 Atan = 6,
43 Atan2 = 7,
44 Atanh = 8,
45 Atanpi = 9,
46 Atan2pi = 10,
47 Cbrt = 11,
48 Ceil = 12,
49 Copysign = 13,
50 Cos = 14,
51 Cosh = 15,
52 Cospi = 16,
53 Erfc = 17,
54 Erf = 18,
55 Exp = 19,
56 Exp2 = 20,
57 Exp10 = 21,
58 Expm1 = 22,
59 Fabs = 23,
60 Fdim = 24,
61 Floor = 25,
62 Fma = 26,
63 Fmax = 27,
64 Fmin = 28,
65 Fmod = 29,
66 Fract = 30,
67 Frexp = 31,
68 Hypot = 32,
69 Ilogb = 33,
70 Ldexp = 34,
71 Lgamma = 35,
72 Lgamma_r = 36,
73 Log = 37,
74 Log2 = 38,
75 Log10 = 39,
76 Log1p = 40,
77 Logb = 41,
78 Mad = 42,
79 Maxmag = 43,
80 Minmag = 44,
81 Modf = 45,
82 Nan = 46,
83 Nextafter = 47,
84 Pow = 48,
85 Pown = 49,
86 Powr = 50,
87 Remainder = 51,
88 Remquo = 52,
89 Rint = 53,
90 Rootn = 54,
91 Round = 55,
92 Rsqrt = 56,
93 Sin = 57,
94 Sincos = 58,
95 Sinh = 59,
96 Sinpi = 60,
97 Sqrt = 61,
98 Tan = 62,
99 Tanh = 63,
100 Tanpi = 64,
101 Tgamma = 65,
102 Trunc = 66,
103 Half_cos = 67,
104 Half_divide = 68,
105 Half_exp = 69,
106 Half_exp2 = 70,
107 Half_exp10 = 71,
108 Half_log = 72,
109 Half_log2 = 73,
110 Half_log10 = 74,
111 Half_powr = 75,
112 Half_recip = 76,
113 Half_rsqrt = 77,
114 Half_sin = 78,
115 Half_sqrt = 79,
116 Half_tan = 80,
117 Native_cos = 81,
118 Native_divide = 82,
119 Native_exp = 83,
120 Native_exp2 = 84,
121 Native_exp10 = 85,
122 Native_log = 86,
123 Native_log2 = 87,
124 Native_log10 = 88,
125 Native_powr = 89,
126 Native_recip = 90,
127 Native_rsqrt = 91,
128 Native_sin = 92,
129 Native_sqrt = 93,
130 Native_tan = 94,
131
132 // Section 2.2: Integer instructions
133 SAbs = 141,
134 SAbs_diff = 142,
135 SAdd_sat = 143,
136 UAdd_sat = 144,
137 SHadd = 145,
138 UHadd = 146,
139 SRhadd = 147,
140 URhadd = 148,
141 SClamp = 149,
142 UClamp = 150,
143 Clz = 151,
144 Ctz = 152,
145 SMad_hi = 153,
146 UMad_sat = 154,
147 SMad_sat = 155,
148 SMax = 156,
149 UMax = 157,
150 SMin = 158,
151 UMin = 159,
152 SMul_hi = 160,
153 Rotate = 161,
154 SSub_sat = 162,
155 USub_sat = 163,
156 U_Upsample = 164,
157 S_Upsample = 165,
158 Popcount = 166,
159 SMad24 = 167,
160 UMad24 = 168,
161 SMul24 = 169,
162 UMul24 = 170,
163 UAbs = 201,
164 UAbs_diff = 202,
165 UMul_hi = 203,
166 UMad_hi = 204,
167
168 // Section 2.3: Common instructions
169 FClamp = 95,
170 Degrees = 96,
171 FMax_common = 97,
172 FMin_common = 98,
173 Mix = 99,
174 Radians = 100,
175 Step = 101,
176 Smoothstep = 102,
177 Sign = 103,
178
179 // Section 2.4: Geometric instructions
180 Cross = 104,
181 Distance = 105,
182 Length = 106,
183 Normalize = 107,
184 Fast_distance = 108,
185 Fast_length = 109,
186 Fast_normalize = 110,
187
188 // Section 2.5: Relational instructions
189 Bitselect = 186,
190 Select = 187,
191
192 // Section 2.6: Vector Data Load and Store instructions
193 Vloadn = 171,
194 Vstoren = 172,
195 Vload_half = 173,
196 Vload_halfn = 174,
197 Vstore_half = 175,
198 Vstore_half_r = 176,
199 Vstore_halfn = 177,
200 Vstore_halfn_r = 178,
201 Vloada_halfn = 179,
202 Vstorea_halfn = 180,
203 Vstorea_halfn_r = 181,
204
205 // Section 2.7: Miscellaneous Vector instructions
206 Shuffle = 182,
207 Shuffle2 = 183,
208
209 // Section 2.8: Misc instructions
210 Printf = 184,
211 Prefetch = 185,
212};
213
214} // end namespace OpenCLLIB
215
216#else
217
218enum OpenCLstd_Entrypoints {
219
220 // Section 2.1: Math extended instructions
221 OpenCLstd_Acos = 0,
222 OpenCLstd_Acosh = 1,
223 OpenCLstd_Acospi = 2,
224 OpenCLstd_Asin = 3,
225 OpenCLstd_Asinh = 4,
226 OpenCLstd_Asinpi = 5,
227 OpenCLstd_Atan = 6,
228 OpenCLstd_Atan2 = 7,
229 OpenCLstd_Atanh = 8,
230 OpenCLstd_Atanpi = 9,
231 OpenCLstd_Atan2pi = 10,
232 OpenCLstd_Cbrt = 11,
233 OpenCLstd_Ceil = 12,
234 OpenCLstd_Copysign = 13,
235 OpenCLstd_Cos = 14,
236 OpenCLstd_Cosh = 15,
237 OpenCLstd_Cospi = 16,
238 OpenCLstd_Erfc = 17,
239 OpenCLstd_Erf = 18,
240 OpenCLstd_Exp = 19,
241 OpenCLstd_Exp2 = 20,
242 OpenCLstd_Exp10 = 21,
243 OpenCLstd_Expm1 = 22,
244 OpenCLstd_Fabs = 23,
245 OpenCLstd_Fdim = 24,
246 OpenCLstd_Floor = 25,
247 OpenCLstd_Fma = 26,
248 OpenCLstd_Fmax = 27,
249 OpenCLstd_Fmin = 28,
250 OpenCLstd_Fmod = 29,
251 OpenCLstd_Fract = 30,
252 OpenCLstd_Frexp = 31,
253 OpenCLstd_Hypot = 32,
254 OpenCLstd_Ilogb = 33,
255 OpenCLstd_Ldexp = 34,
256 OpenCLstd_Lgamma = 35,
257 OpenCLstd_Lgamma_r = 36,
258 OpenCLstd_Log = 37,
259 OpenCLstd_Log2 = 38,
260 OpenCLstd_Log10 = 39,
261 OpenCLstd_Log1p = 40,
262 OpenCLstd_Logb = 41,
263 OpenCLstd_Mad = 42,
264 OpenCLstd_Maxmag = 43,
265 OpenCLstd_Minmag = 44,
266 OpenCLstd_Modf = 45,
267 OpenCLstd_Nan = 46,
268 OpenCLstd_Nextafter = 47,
269 OpenCLstd_Pow = 48,
270 OpenCLstd_Pown = 49,
271 OpenCLstd_Powr = 50,
272 OpenCLstd_Remainder = 51,
273 OpenCLstd_Remquo = 52,
274 OpenCLstd_Rint = 53,
275 OpenCLstd_Rootn = 54,
276 OpenCLstd_Round = 55,
277 OpenCLstd_Rsqrt = 56,
278 OpenCLstd_Sin = 57,
279 OpenCLstd_Sincos = 58,
280 OpenCLstd_Sinh = 59,
281 OpenCLstd_Sinpi = 60,
282 OpenCLstd_Sqrt = 61,
283 OpenCLstd_Tan = 62,
284 OpenCLstd_Tanh = 63,
285 OpenCLstd_Tanpi = 64,
286 OpenCLstd_Tgamma = 65,
287 OpenCLstd_Trunc = 66,
288 OpenCLstd_Half_cos = 67,
289 OpenCLstd_Half_divide = 68,
290 OpenCLstd_Half_exp = 69,
291 OpenCLstd_Half_exp2 = 70,
292 OpenCLstd_Half_exp10 = 71,
293 OpenCLstd_Half_log = 72,
294 OpenCLstd_Half_log2 = 73,
295 OpenCLstd_Half_log10 = 74,
296 OpenCLstd_Half_powr = 75,
297 OpenCLstd_Half_recip = 76,
298 OpenCLstd_Half_rsqrt = 77,
299 OpenCLstd_Half_sin = 78,
300 OpenCLstd_Half_sqrt = 79,
301 OpenCLstd_Half_tan = 80,
302 OpenCLstd_Native_cos = 81,
303 OpenCLstd_Native_divide = 82,
304 OpenCLstd_Native_exp = 83,
305 OpenCLstd_Native_exp2 = 84,
306 OpenCLstd_Native_exp10 = 85,
307 OpenCLstd_Native_log = 86,
308 OpenCLstd_Native_log2 = 87,
309 OpenCLstd_Native_log10 = 88,
310 OpenCLstd_Native_powr = 89,
311 OpenCLstd_Native_recip = 90,
312 OpenCLstd_Native_rsqrt = 91,
313 OpenCLstd_Native_sin = 92,
314 OpenCLstd_Native_sqrt = 93,
315 OpenCLstd_Native_tan = 94,
316
317 // Section 2.2: Integer instructions
318 OpenCLstd_SAbs = 141,
319 OpenCLstd_SAbs_diff = 142,
320 OpenCLstd_SAdd_sat = 143,
321 OpenCLstd_UAdd_sat = 144,
322 OpenCLstd_SHadd = 145,
323 OpenCLstd_UHadd = 146,
324 OpenCLstd_SRhadd = 147,
325 OpenCLstd_URhadd = 148,
326 OpenCLstd_SClamp = 149,
327 OpenCLstd_UClamp = 150,
328 OpenCLstd_Clz = 151,
329 OpenCLstd_Ctz = 152,
330 OpenCLstd_SMad_hi = 153,
331 OpenCLstd_UMad_sat = 154,
332 OpenCLstd_SMad_sat = 155,
333 OpenCLstd_SMax = 156,
334 OpenCLstd_UMax = 157,
335 OpenCLstd_SMin = 158,
336 OpenCLstd_UMin = 159,
337 OpenCLstd_SMul_hi = 160,
338 OpenCLstd_Rotate = 161,
339 OpenCLstd_SSub_sat = 162,
340 OpenCLstd_USub_sat = 163,
341 OpenCLstd_U_Upsample = 164,
342 OpenCLstd_S_Upsample = 165,
343 OpenCLstd_Popcount = 166,
344 OpenCLstd_SMad24 = 167,
345 OpenCLstd_UMad24 = 168,
346 OpenCLstd_SMul24 = 169,
347 OpenCLstd_UMul24 = 170,
348 OpenCLstd_UAbs = 201,
349 OpenCLstd_UAbs_diff = 202,
350 OpenCLstd_UMul_hi = 203,
351 OpenCLstd_UMad_hi = 204,
352
353 // Section 2.3: Common instructions
354 OpenCLstd_FClamp = 95,
355 OpenCLstd_Degrees = 96,
356 OpenCLstd_FMax_common = 97,
357 OpenCLstd_FMin_common = 98,
358 OpenCLstd_Mix = 99,
359 OpenCLstd_Radians = 100,
360 OpenCLstd_Step = 101,
361 OpenCLstd_Smoothstep = 102,
362 OpenCLstd_Sign = 103,
363
364 // Section 2.4: Geometric instructions
365 OpenCLstd_Cross = 104,
366 OpenCLstd_Distance = 105,
367 OpenCLstd_Length = 106,
368 OpenCLstd_Normalize = 107,
369 OpenCLstd_Fast_distance = 108,
370 OpenCLstd_Fast_length = 109,
371 OpenCLstd_Fast_normalize = 110,
372
373 // Section 2.5: Relational instructions
374 OpenCLstd_Bitselect = 186,
375 OpenCLstd_Select = 187,
376
377 // Section 2.6: Vector Data Load and Store instructions
378 OpenCLstd_Vloadn = 171,
379 OpenCLstd_Vstoren = 172,
380 OpenCLstd_Vload_half = 173,
381 OpenCLstd_Vload_halfn = 174,
382 OpenCLstd_Vstore_half = 175,
383 OpenCLstd_Vstore_half_r = 176,
384 OpenCLstd_Vstore_halfn = 177,
385 OpenCLstd_Vstore_halfn_r = 178,
386 OpenCLstd_Vloada_halfn = 179,
387 OpenCLstd_Vstorea_halfn = 180,
388 OpenCLstd_Vstorea_halfn_r = 181,
389
390 // Section 2.7: Miscellaneous Vector instructions
391 OpenCLstd_Shuffle = 182,
392 OpenCLstd_Shuffle2 = 183,
393
394 // Section 2.8: Misc instructions
395 OpenCLstd_Printf = 184,
396 OpenCLstd_Prefetch = 185,
397};
398
399#endif
400
401#endif // #ifndef OPENCLstd_H
402