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