1/*===---- __clang_cuda_device_functions.h - CUDA runtime support -----------===
2 *
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 *
7 *===-----------------------------------------------------------------------===
8 */
9
10#ifndef __CLANG_CUDA_DEVICE_FUNCTIONS_H__
11#define __CLANG_CUDA_DEVICE_FUNCTIONS_H__
12
13#ifndef _OPENMP
14#if CUDA_VERSION < 9000
15#error This file is intended to be used with CUDA-9+ only.
16#endif
17#endif
18
19// __DEVICE__ is a helper macro with common set of attributes for the wrappers
20// we implement in this file. We need static in order to avoid emitting unused
21// functions and __forceinline__ helps inlining these wrappers at -O1.
22#pragma push_macro("__DEVICE__")
23#ifdef _OPENMP
24#define __DEVICE__ static __attribute__((always_inline))
25#else
26#define __DEVICE__ static __device__ __forceinline__
27#endif
28
29// libdevice provides fast low precision and slow full-recision implementations
30// for some functions. Which one gets selected depends on
31// __CLANG_CUDA_APPROX_TRANSCENDENTALS__ which gets defined by clang if
32// -ffast-math or -fcuda-approx-transcendentals are in effect.
33#pragma push_macro("__FAST_OR_SLOW")
34#if defined(__CLANG_CUDA_APPROX_TRANSCENDENTALS__)
35#define __FAST_OR_SLOW(fast, slow) fast
36#else
37#define __FAST_OR_SLOW(fast, slow) slow
38#endif
39
40// For C++ 17 we need to include noexcept attribute to be compatible
41// with the header-defined version. This may be removed once
42// variant is supported.
43#if defined(_OPENMP) && defined(__cplusplus) && __cplusplus >= 201703L
44#define __NOEXCEPT noexcept
45#else
46#define __NOEXCEPT
47#endif
48
49__DEVICE__ int __all(int __a) { return __nvvm_vote_all(__a); }
50__DEVICE__ int __any(int __a) { return __nvvm_vote_any(__a); }
51__DEVICE__ unsigned int __ballot(int __a) { return __nvvm_vote_ballot(__a); }
52__DEVICE__ unsigned int __brev(unsigned int __a) { return __nv_brev(__a); }
53__DEVICE__ unsigned long long __brevll(unsigned long long __a) {
54  return __nv_brevll(__a);
55}
56#if defined(__cplusplus)
57__DEVICE__ void __brkpt() { asm volatile("brkpt;"); }
58__DEVICE__ void __brkpt(int __a) { __brkpt(); }
59#else
60__DEVICE__ void __attribute__((overloadable)) __brkpt(void) { asm volatile("brkpt;"); }
61__DEVICE__ void __attribute__((overloadable)) __brkpt(int __a) { __brkpt(); }
62#endif
63__DEVICE__ unsigned int __byte_perm(unsigned int __a, unsigned int __b,
64                                    unsigned int __c) {
65  return __nv_byte_perm(__a, __b, __c);
66}
67__DEVICE__ int __clz(int __a) { return __nv_clz(__a); }
68__DEVICE__ int __clzll(long long __a) { return __nv_clzll(__a); }
69__DEVICE__ float __cosf(float __a) { return __nv_fast_cosf(__a); }
70__DEVICE__ double __dAtomicAdd(double *__p, double __v) {
71  return __nvvm_atom_add_gen_d(__p, __v);
72}
73__DEVICE__ double __dAtomicAdd_block(double *__p, double __v) {
74  return __nvvm_atom_cta_add_gen_d(__p, __v);
75}
76__DEVICE__ double __dAtomicAdd_system(double *__p, double __v) {
77  return __nvvm_atom_sys_add_gen_d(__p, __v);
78}
79__DEVICE__ double __dadd_rd(double __a, double __b) {
80  return __nv_dadd_rd(__a, __b);
81}
82__DEVICE__ double __dadd_rn(double __a, double __b) {
83  return __nv_dadd_rn(__a, __b);
84}
85__DEVICE__ double __dadd_ru(double __a, double __b) {
86  return __nv_dadd_ru(__a, __b);
87}
88__DEVICE__ double __dadd_rz(double __a, double __b) {
89  return __nv_dadd_rz(__a, __b);
90}
91__DEVICE__ double __ddiv_rd(double __a, double __b) {
92  return __nv_ddiv_rd(__a, __b);
93}
94__DEVICE__ double __ddiv_rn(double __a, double __b) {
95  return __nv_ddiv_rn(__a, __b);
96}
97__DEVICE__ double __ddiv_ru(double __a, double __b) {
98  return __nv_ddiv_ru(__a, __b);
99}
100__DEVICE__ double __ddiv_rz(double __a, double __b) {
101  return __nv_ddiv_rz(__a, __b);
102}
103__DEVICE__ double __dmul_rd(double __a, double __b) {
104  return __nv_dmul_rd(__a, __b);
105}
106__DEVICE__ double __dmul_rn(double __a, double __b) {
107  return __nv_dmul_rn(__a, __b);
108}
109__DEVICE__ double __dmul_ru(double __a, double __b) {
110  return __nv_dmul_ru(__a, __b);
111}
112__DEVICE__ double __dmul_rz(double __a, double __b) {
113  return __nv_dmul_rz(__a, __b);
114}
115__DEVICE__ float __double2float_rd(double __a) {
116  return __nv_double2float_rd(__a);
117}
118__DEVICE__ float __double2float_rn(double __a) {
119  return __nv_double2float_rn(__a);
120}
121__DEVICE__ float __double2float_ru(double __a) {
122  return __nv_double2float_ru(__a);
123}
124__DEVICE__ float __double2float_rz(double __a) {
125  return __nv_double2float_rz(__a);
126}
127__DEVICE__ int __double2hiint(double __a) { return __nv_double2hiint(__a); }
128__DEVICE__ int __double2int_rd(double __a) { return __nv_double2int_rd(__a); }
129__DEVICE__ int __double2int_rn(double __a) { return __nv_double2int_rn(__a); }
130__DEVICE__ int __double2int_ru(double __a) { return __nv_double2int_ru(__a); }
131__DEVICE__ int __double2int_rz(double __a) { return __nv_double2int_rz(__a); }
132__DEVICE__ long long __double2ll_rd(double __a) {
133  return __nv_double2ll_rd(__a);
134}
135__DEVICE__ long long __double2ll_rn(double __a) {
136  return __nv_double2ll_rn(__a);
137}
138__DEVICE__ long long __double2ll_ru(double __a) {
139  return __nv_double2ll_ru(__a);
140}
141__DEVICE__ long long __double2ll_rz(double __a) {
142  return __nv_double2ll_rz(__a);
143}
144__DEVICE__ int __double2loint(double __a) { return __nv_double2loint(__a); }
145__DEVICE__ unsigned int __double2uint_rd(double __a) {
146  return __nv_double2uint_rd(__a);
147}
148__DEVICE__ unsigned int __double2uint_rn(double __a) {
149  return __nv_double2uint_rn(__a);
150}
151__DEVICE__ unsigned int __double2uint_ru(double __a) {
152  return __nv_double2uint_ru(__a);
153}
154__DEVICE__ unsigned int __double2uint_rz(double __a) {
155  return __nv_double2uint_rz(__a);
156}
157__DEVICE__ unsigned long long __double2ull_rd(double __a) {
158  return __nv_double2ull_rd(__a);
159}
160__DEVICE__ unsigned long long __double2ull_rn(double __a) {
161  return __nv_double2ull_rn(__a);
162}
163__DEVICE__ unsigned long long __double2ull_ru(double __a) {
164  return __nv_double2ull_ru(__a);
165}
166__DEVICE__ unsigned long long __double2ull_rz(double __a) {
167  return __nv_double2ull_rz(__a);
168}
169__DEVICE__ long long __double_as_longlong(double __a) {
170  return __nv_double_as_longlong(__a);
171}
172__DEVICE__ double __drcp_rd(double __a) { return __nv_drcp_rd(__a); }
173__DEVICE__ double __drcp_rn(double __a) { return __nv_drcp_rn(__a); }
174__DEVICE__ double __drcp_ru(double __a) { return __nv_drcp_ru(__a); }
175__DEVICE__ double __drcp_rz(double __a) { return __nv_drcp_rz(__a); }
176__DEVICE__ double __dsqrt_rd(double __a) { return __nv_dsqrt_rd(__a); }
177__DEVICE__ double __dsqrt_rn(double __a) { return __nv_dsqrt_rn(__a); }
178__DEVICE__ double __dsqrt_ru(double __a) { return __nv_dsqrt_ru(__a); }
179__DEVICE__ double __dsqrt_rz(double __a) { return __nv_dsqrt_rz(__a); }
180__DEVICE__ double __dsub_rd(double __a, double __b) {
181  return __nv_dsub_rd(__a, __b);
182}
183__DEVICE__ double __dsub_rn(double __a, double __b) {
184  return __nv_dsub_rn(__a, __b);
185}
186__DEVICE__ double __dsub_ru(double __a, double __b) {
187  return __nv_dsub_ru(__a, __b);
188}
189__DEVICE__ double __dsub_rz(double __a, double __b) {
190  return __nv_dsub_rz(__a, __b);
191}
192__DEVICE__ float __exp10f(float __a) { return __nv_fast_exp10f(__a); }
193__DEVICE__ float __expf(float __a) { return __nv_fast_expf(__a); }
194__DEVICE__ float __fAtomicAdd(float *__p, float __v) {
195  return __nvvm_atom_add_gen_f(__p, __v);
196}
197__DEVICE__ float __fAtomicAdd_block(float *__p, float __v) {
198  return __nvvm_atom_cta_add_gen_f(__p, __v);
199}
200__DEVICE__ float __fAtomicAdd_system(float *__p, float __v) {
201  return __nvvm_atom_sys_add_gen_f(__p, __v);
202}
203__DEVICE__ float __fAtomicExch(float *__p, float __v) {
204  return __nv_int_as_float(
205      __nvvm_atom_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
206}
207__DEVICE__ float __fAtomicExch_block(float *__p, float __v) {
208  return __nv_int_as_float(
209      __nvvm_atom_cta_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
210}
211__DEVICE__ float __fAtomicExch_system(float *__p, float __v) {
212  return __nv_int_as_float(
213      __nvvm_atom_sys_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
214}
215__DEVICE__ float __fadd_rd(float __a, float __b) {
216  return __nv_fadd_rd(__a, __b);
217}
218__DEVICE__ float __fadd_rn(float __a, float __b) {
219  return __nv_fadd_rn(__a, __b);
220}
221__DEVICE__ float __fadd_ru(float __a, float __b) {
222  return __nv_fadd_ru(__a, __b);
223}
224__DEVICE__ float __fadd_rz(float __a, float __b) {
225  return __nv_fadd_rz(__a, __b);
226}
227__DEVICE__ float __fdiv_rd(float __a, float __b) {
228  return __nv_fdiv_rd(__a, __b);
229}
230__DEVICE__ float __fdiv_rn(float __a, float __b) {
231  return __nv_fdiv_rn(__a, __b);
232}
233__DEVICE__ float __fdiv_ru(float __a, float __b) {
234  return __nv_fdiv_ru(__a, __b);
235}
236__DEVICE__ float __fdiv_rz(float __a, float __b) {
237  return __nv_fdiv_rz(__a, __b);
238}
239__DEVICE__ float __fdividef(float __a, float __b) {
240  return __nv_fast_fdividef(__a, __b);
241}
242__DEVICE__ int __ffs(int __a) { return __nv_ffs(__a); }
243__DEVICE__ int __ffsll(long long __a) { return __nv_ffsll(__a); }
244__DEVICE__ int __finite(double __a) { return __nv_isfinited(__a); }
245__DEVICE__ int __finitef(float __a) { return __nv_finitef(__a); }
246#ifdef _MSC_VER
247__DEVICE__ int __finitel(long double __a);
248#endif
249__DEVICE__ int __float2int_rd(float __a) { return __nv_float2int_rd(__a); }
250__DEVICE__ int __float2int_rn(float __a) { return __nv_float2int_rn(__a); }
251__DEVICE__ int __float2int_ru(float __a) { return __nv_float2int_ru(__a); }
252__DEVICE__ int __float2int_rz(float __a) { return __nv_float2int_rz(__a); }
253__DEVICE__ long long __float2ll_rd(float __a) { return __nv_float2ll_rd(__a); }
254__DEVICE__ long long __float2ll_rn(float __a) { return __nv_float2ll_rn(__a); }
255__DEVICE__ long long __float2ll_ru(float __a) { return __nv_float2ll_ru(__a); }
256__DEVICE__ long long __float2ll_rz(float __a) { return __nv_float2ll_rz(__a); }
257__DEVICE__ unsigned int __float2uint_rd(float __a) {
258  return __nv_float2uint_rd(__a);
259}
260__DEVICE__ unsigned int __float2uint_rn(float __a) {
261  return __nv_float2uint_rn(__a);
262}
263__DEVICE__ unsigned int __float2uint_ru(float __a) {
264  return __nv_float2uint_ru(__a);
265}
266__DEVICE__ unsigned int __float2uint_rz(float __a) {
267  return __nv_float2uint_rz(__a);
268}
269__DEVICE__ unsigned long long __float2ull_rd(float __a) {
270  return __nv_float2ull_rd(__a);
271}
272__DEVICE__ unsigned long long __float2ull_rn(float __a) {
273  return __nv_float2ull_rn(__a);
274}
275__DEVICE__ unsigned long long __float2ull_ru(float __a) {
276  return __nv_float2ull_ru(__a);
277}
278__DEVICE__ unsigned long long __float2ull_rz(float __a) {
279  return __nv_float2ull_rz(__a);
280}
281__DEVICE__ int __float_as_int(float __a) { return __nv_float_as_int(__a); }
282__DEVICE__ unsigned int __float_as_uint(float __a) {
283  return __nv_float_as_uint(__a);
284}
285__DEVICE__ double __fma_rd(double __a, double __b, double __c) {
286  return __nv_fma_rd(__a, __b, __c);
287}
288__DEVICE__ double __fma_rn(double __a, double __b, double __c) {
289  return __nv_fma_rn(__a, __b, __c);
290}
291__DEVICE__ double __fma_ru(double __a, double __b, double __c) {
292  return __nv_fma_ru(__a, __b, __c);
293}
294__DEVICE__ double __fma_rz(double __a, double __b, double __c) {
295  return __nv_fma_rz(__a, __b, __c);
296}
297__DEVICE__ float __fmaf_ieee_rd(float __a, float __b, float __c) {
298  return __nv_fmaf_ieee_rd(__a, __b, __c);
299}
300__DEVICE__ float __fmaf_ieee_rn(float __a, float __b, float __c) {
301  return __nv_fmaf_ieee_rn(__a, __b, __c);
302}
303__DEVICE__ float __fmaf_ieee_ru(float __a, float __b, float __c) {
304  return __nv_fmaf_ieee_ru(__a, __b, __c);
305}
306__DEVICE__ float __fmaf_ieee_rz(float __a, float __b, float __c) {
307  return __nv_fmaf_ieee_rz(__a, __b, __c);
308}
309__DEVICE__ float __fmaf_rd(float __a, float __b, float __c) {
310  return __nv_fmaf_rd(__a, __b, __c);
311}
312__DEVICE__ float __fmaf_rn(float __a, float __b, float __c) {
313  return __nv_fmaf_rn(__a, __b, __c);
314}
315__DEVICE__ float __fmaf_ru(float __a, float __b, float __c) {
316  return __nv_fmaf_ru(__a, __b, __c);
317}
318__DEVICE__ float __fmaf_rz(float __a, float __b, float __c) {
319  return __nv_fmaf_rz(__a, __b, __c);
320}
321__DEVICE__ float __fmul_rd(float __a, float __b) {
322  return __nv_fmul_rd(__a, __b);
323}
324__DEVICE__ float __fmul_rn(float __a, float __b) {
325  return __nv_fmul_rn(__a, __b);
326}
327__DEVICE__ float __fmul_ru(float __a, float __b) {
328  return __nv_fmul_ru(__a, __b);
329}
330__DEVICE__ float __fmul_rz(float __a, float __b) {
331  return __nv_fmul_rz(__a, __b);
332}
333__DEVICE__ float __frcp_rd(float __a) { return __nv_frcp_rd(__a); }
334__DEVICE__ float __frcp_rn(float __a) { return __nv_frcp_rn(__a); }
335__DEVICE__ float __frcp_ru(float __a) { return __nv_frcp_ru(__a); }
336__DEVICE__ float __frcp_rz(float __a) { return __nv_frcp_rz(__a); }
337__DEVICE__ float __frsqrt_rn(float __a) { return __nv_frsqrt_rn(__a); }
338__DEVICE__ float __fsqrt_rd(float __a) { return __nv_fsqrt_rd(__a); }
339__DEVICE__ float __fsqrt_rn(float __a) { return __nv_fsqrt_rn(__a); }
340__DEVICE__ float __fsqrt_ru(float __a) { return __nv_fsqrt_ru(__a); }
341__DEVICE__ float __fsqrt_rz(float __a) { return __nv_fsqrt_rz(__a); }
342__DEVICE__ float __fsub_rd(float __a, float __b) {
343  return __nv_fsub_rd(__a, __b);
344}
345__DEVICE__ float __fsub_rn(float __a, float __b) {
346  return __nv_fsub_rn(__a, __b);
347}
348__DEVICE__ float __fsub_ru(float __a, float __b) {
349  return __nv_fsub_ru(__a, __b);
350}
351__DEVICE__ float __fsub_rz(float __a, float __b) {
352  return __nv_fsub_rz(__a, __b);
353}
354__DEVICE__ int __hadd(int __a, int __b) { return __nv_hadd(__a, __b); }
355__DEVICE__ double __hiloint2double(int __a, int __b) {
356  return __nv_hiloint2double(__a, __b);
357}
358__DEVICE__ int __iAtomicAdd(int *__p, int __v) {
359  return __nvvm_atom_add_gen_i(__p, __v);
360}
361__DEVICE__ int __iAtomicAdd_block(int *__p, int __v) {
362  __nvvm_atom_cta_add_gen_i(__p, __v);
363}
364__DEVICE__ int __iAtomicAdd_system(int *__p, int __v) {
365  __nvvm_atom_sys_add_gen_i(__p, __v);
366}
367__DEVICE__ int __iAtomicAnd(int *__p, int __v) {
368  return __nvvm_atom_and_gen_i(__p, __v);
369}
370__DEVICE__ int __iAtomicAnd_block(int *__p, int __v) {
371  return __nvvm_atom_cta_and_gen_i(__p, __v);
372}
373__DEVICE__ int __iAtomicAnd_system(int *__p, int __v) {
374  return __nvvm_atom_sys_and_gen_i(__p, __v);
375}
376__DEVICE__ int __iAtomicCAS(int *__p, int __cmp, int __v) {
377  return __nvvm_atom_cas_gen_i(__p, __cmp, __v);
378}
379__DEVICE__ int __iAtomicCAS_block(int *__p, int __cmp, int __v) {
380  return __nvvm_atom_cta_cas_gen_i(__p, __cmp, __v);
381}
382__DEVICE__ int __iAtomicCAS_system(int *__p, int __cmp, int __v) {
383  return __nvvm_atom_sys_cas_gen_i(__p, __cmp, __v);
384}
385__DEVICE__ int __iAtomicExch(int *__p, int __v) {
386  return __nvvm_atom_xchg_gen_i(__p, __v);
387}
388__DEVICE__ int __iAtomicExch_block(int *__p, int __v) {
389  return __nvvm_atom_cta_xchg_gen_i(__p, __v);
390}
391__DEVICE__ int __iAtomicExch_system(int *__p, int __v) {
392  return __nvvm_atom_sys_xchg_gen_i(__p, __v);
393}
394__DEVICE__ int __iAtomicMax(int *__p, int __v) {
395  return __nvvm_atom_max_gen_i(__p, __v);
396}
397__DEVICE__ int __iAtomicMax_block(int *__p, int __v) {
398  return __nvvm_atom_cta_max_gen_i(__p, __v);
399}
400__DEVICE__ int __iAtomicMax_system(int *__p, int __v) {
401  return __nvvm_atom_sys_max_gen_i(__p, __v);
402}
403__DEVICE__ int __iAtomicMin(int *__p, int __v) {
404  return __nvvm_atom_min_gen_i(__p, __v);
405}
406__DEVICE__ int __iAtomicMin_block(int *__p, int __v) {
407  return __nvvm_atom_cta_min_gen_i(__p, __v);
408}
409__DEVICE__ int __iAtomicMin_system(int *__p, int __v) {
410  return __nvvm_atom_sys_min_gen_i(__p, __v);
411}
412__DEVICE__ int __iAtomicOr(int *__p, int __v) {
413  return __nvvm_atom_or_gen_i(__p, __v);
414}
415__DEVICE__ int __iAtomicOr_block(int *__p, int __v) {
416  return __nvvm_atom_cta_or_gen_i(__p, __v);
417}
418__DEVICE__ int __iAtomicOr_system(int *__p, int __v) {
419  return __nvvm_atom_sys_or_gen_i(__p, __v);
420}
421__DEVICE__ int __iAtomicXor(int *__p, int __v) {
422  return __nvvm_atom_xor_gen_i(__p, __v);
423}
424__DEVICE__ int __iAtomicXor_block(int *__p, int __v) {
425  return __nvvm_atom_cta_xor_gen_i(__p, __v);
426}
427__DEVICE__ int __iAtomicXor_system(int *__p, int __v) {
428  return __nvvm_atom_sys_xor_gen_i(__p, __v);
429}
430__DEVICE__ long long __illAtomicMax(long long *__p, long long __v) {
431  return __nvvm_atom_max_gen_ll(__p, __v);
432}
433__DEVICE__ long long __illAtomicMax_block(long long *__p, long long __v) {
434  return __nvvm_atom_cta_max_gen_ll(__p, __v);
435}
436__DEVICE__ long long __illAtomicMax_system(long long *__p, long long __v) {
437  return __nvvm_atom_sys_max_gen_ll(__p, __v);
438}
439__DEVICE__ long long __illAtomicMin(long long *__p, long long __v) {
440  return __nvvm_atom_min_gen_ll(__p, __v);
441}
442__DEVICE__ long long __illAtomicMin_block(long long *__p, long long __v) {
443  return __nvvm_atom_cta_min_gen_ll(__p, __v);
444}
445__DEVICE__ long long __illAtomicMin_system(long long *__p, long long __v) {
446  return __nvvm_atom_sys_min_gen_ll(__p, __v);
447}
448__DEVICE__ double __int2double_rn(int __a) { return __nv_int2double_rn(__a); }
449__DEVICE__ float __int2float_rd(int __a) { return __nv_int2float_rd(__a); }
450__DEVICE__ float __int2float_rn(int __a) { return __nv_int2float_rn(__a); }
451__DEVICE__ float __int2float_ru(int __a) { return __nv_int2float_ru(__a); }
452__DEVICE__ float __int2float_rz(int __a) { return __nv_int2float_rz(__a); }
453__DEVICE__ float __int_as_float(int __a) { return __nv_int_as_float(__a); }
454__DEVICE__ int __isfinited(double __a) { return __nv_isfinited(__a); }
455__DEVICE__ int __isinf(double __a) { return __nv_isinfd(__a); }
456__DEVICE__ int __isinff(float __a) { return __nv_isinff(__a); }
457#ifdef _MSC_VER
458__DEVICE__ int __isinfl(long double __a);
459#endif
460__DEVICE__ int __isnan(double __a) { return __nv_isnand(__a); }
461__DEVICE__ int __isnanf(float __a) { return __nv_isnanf(__a); }
462#ifdef _MSC_VER
463__DEVICE__ int __isnanl(long double __a);
464#endif
465__DEVICE__ double __ll2double_rd(long long __a) {
466  return __nv_ll2double_rd(__a);
467}
468__DEVICE__ double __ll2double_rn(long long __a) {
469  return __nv_ll2double_rn(__a);
470}
471__DEVICE__ double __ll2double_ru(long long __a) {
472  return __nv_ll2double_ru(__a);
473}
474__DEVICE__ double __ll2double_rz(long long __a) {
475  return __nv_ll2double_rz(__a);
476}
477__DEVICE__ float __ll2float_rd(long long __a) { return __nv_ll2float_rd(__a); }
478__DEVICE__ float __ll2float_rn(long long __a) { return __nv_ll2float_rn(__a); }
479__DEVICE__ float __ll2float_ru(long long __a) { return __nv_ll2float_ru(__a); }
480__DEVICE__ float __ll2float_rz(long long __a) { return __nv_ll2float_rz(__a); }
481__DEVICE__ long long __llAtomicAnd(long long *__p, long long __v) {
482  return __nvvm_atom_and_gen_ll(__p, __v);
483}
484__DEVICE__ long long __llAtomicAnd_block(long long *__p, long long __v) {
485  return __nvvm_atom_cta_and_gen_ll(__p, __v);
486}
487__DEVICE__ long long __llAtomicAnd_system(long long *__p, long long __v) {
488  return __nvvm_atom_sys_and_gen_ll(__p, __v);
489}
490__DEVICE__ long long __llAtomicOr(long long *__p, long long __v) {
491  return __nvvm_atom_or_gen_ll(__p, __v);
492}
493__DEVICE__ long long __llAtomicOr_block(long long *__p, long long __v) {
494  return __nvvm_atom_cta_or_gen_ll(__p, __v);
495}
496__DEVICE__ long long __llAtomicOr_system(long long *__p, long long __v) {
497  return __nvvm_atom_sys_or_gen_ll(__p, __v);
498}
499__DEVICE__ long long __llAtomicXor(long long *__p, long long __v) {
500  return __nvvm_atom_xor_gen_ll(__p, __v);
501}
502__DEVICE__ long long __llAtomicXor_block(long long *__p, long long __v) {
503  return __nvvm_atom_cta_xor_gen_ll(__p, __v);
504}
505__DEVICE__ long long __llAtomicXor_system(long long *__p, long long __v) {
506  return __nvvm_atom_sys_xor_gen_ll(__p, __v);
507}
508__DEVICE__ float __log10f(float __a) { return __nv_fast_log10f(__a); }
509__DEVICE__ float __log2f(float __a) { return __nv_fast_log2f(__a); }
510__DEVICE__ float __logf(float __a) { return __nv_fast_logf(__a); }
511__DEVICE__ double __longlong_as_double(long long __a) {
512  return __nv_longlong_as_double(__a);
513}
514__DEVICE__ int __mul24(int __a, int __b) { return __nv_mul24(__a, __b); }
515__DEVICE__ long long __mul64hi(long long __a, long long __b) {
516  return __nv_mul64hi(__a, __b);
517}
518__DEVICE__ int __mulhi(int __a, int __b) { return __nv_mulhi(__a, __b); }
519__DEVICE__ unsigned int __pm0(void) { return __nvvm_read_ptx_sreg_pm0(); }
520__DEVICE__ unsigned int __pm1(void) { return __nvvm_read_ptx_sreg_pm1(); }
521__DEVICE__ unsigned int __pm2(void) { return __nvvm_read_ptx_sreg_pm2(); }
522__DEVICE__ unsigned int __pm3(void) { return __nvvm_read_ptx_sreg_pm3(); }
523__DEVICE__ int __popc(int __a) { return __nv_popc(__a); }
524__DEVICE__ int __popcll(long long __a) { return __nv_popcll(__a); }
525__DEVICE__ float __powf(float __a, float __b) {
526  return __nv_fast_powf(__a, __b);
527}
528
529// Parameter must have a known integer value.
530#define __prof_trigger(__a) asm __volatile__("pmevent \t%0;" ::"i"(__a))
531__DEVICE__ int __rhadd(int __a, int __b) { return __nv_rhadd(__a, __b); }
532__DEVICE__ unsigned int __sad(int __a, int __b, unsigned int __c) {
533  return __nv_sad(__a, __b, __c);
534}
535__DEVICE__ float __saturatef(float __a) { return __nv_saturatef(__a); }
536__DEVICE__ int __signbitd(double __a) { return __nv_signbitd(__a); }
537__DEVICE__ int __signbitf(float __a) { return __nv_signbitf(__a); }
538__DEVICE__ void __sincosf(float __a, float *__s, float *__c) {
539  return __nv_fast_sincosf(__a, __s, __c);
540}
541__DEVICE__ float __sinf(float __a) { return __nv_fast_sinf(__a); }
542__DEVICE__ int __syncthreads_and(int __a) { return __nvvm_bar0_and(__a); }
543__DEVICE__ int __syncthreads_count(int __a) { return __nvvm_bar0_popc(__a); }
544__DEVICE__ int __syncthreads_or(int __a) { return __nvvm_bar0_or(__a); }
545__DEVICE__ float __tanf(float __a) { return __nv_fast_tanf(__a); }
546__DEVICE__ void __threadfence(void) { __nvvm_membar_gl(); }
547__DEVICE__ void __threadfence_block(void) { __nvvm_membar_cta(); };
548__DEVICE__ void __threadfence_system(void) { __nvvm_membar_sys(); };
549__DEVICE__ void __trap(void) { asm volatile("trap;"); }
550__DEVICE__ unsigned int __uAtomicAdd(unsigned int *__p, unsigned int __v) {
551  return __nvvm_atom_add_gen_i((int *)__p, __v);
552}
553__DEVICE__ unsigned int __uAtomicAdd_block(unsigned int *__p,
554                                           unsigned int __v) {
555  return __nvvm_atom_cta_add_gen_i((int *)__p, __v);
556}
557__DEVICE__ unsigned int __uAtomicAdd_system(unsigned int *__p,
558                                            unsigned int __v) {
559  return __nvvm_atom_sys_add_gen_i((int *)__p, __v);
560}
561__DEVICE__ unsigned int __uAtomicAnd(unsigned int *__p, unsigned int __v) {
562  return __nvvm_atom_and_gen_i((int *)__p, __v);
563}
564__DEVICE__ unsigned int __uAtomicAnd_block(unsigned int *__p,
565                                           unsigned int __v) {
566  return __nvvm_atom_cta_and_gen_i((int *)__p, __v);
567}
568__DEVICE__ unsigned int __uAtomicAnd_system(unsigned int *__p,
569                                            unsigned int __v) {
570  return __nvvm_atom_sys_and_gen_i((int *)__p, __v);
571}
572__DEVICE__ unsigned int __uAtomicCAS(unsigned int *__p, unsigned int __cmp,
573                                     unsigned int __v) {
574  return __nvvm_atom_cas_gen_i((int *)__p, __cmp, __v);
575}
576__DEVICE__ unsigned int
577__uAtomicCAS_block(unsigned int *__p, unsigned int __cmp, unsigned int __v) {
578  return __nvvm_atom_cta_cas_gen_i((int *)__p, __cmp, __v);
579}
580__DEVICE__ unsigned int
581__uAtomicCAS_system(unsigned int *__p, unsigned int __cmp, unsigned int __v) {
582  return __nvvm_atom_sys_cas_gen_i((int *)__p, __cmp, __v);
583}
584__DEVICE__ unsigned int __uAtomicDec(unsigned int *__p, unsigned int __v) {
585  return __nvvm_atom_dec_gen_ui(__p, __v);
586}
587__DEVICE__ unsigned int __uAtomicDec_block(unsigned int *__p,
588                                           unsigned int __v) {
589  return __nvvm_atom_cta_dec_gen_ui(__p, __v);
590}
591__DEVICE__ unsigned int __uAtomicDec_system(unsigned int *__p,
592                                            unsigned int __v) {
593  return __nvvm_atom_sys_dec_gen_ui(__p, __v);
594}
595__DEVICE__ unsigned int __uAtomicExch(unsigned int *__p, unsigned int __v) {
596  return __nvvm_atom_xchg_gen_i((int *)__p, __v);
597}
598__DEVICE__ unsigned int __uAtomicExch_block(unsigned int *__p,
599                                            unsigned int __v) {
600  return __nvvm_atom_cta_xchg_gen_i((int *)__p, __v);
601}
602__DEVICE__ unsigned int __uAtomicExch_system(unsigned int *__p,
603                                             unsigned int __v) {
604  return __nvvm_atom_sys_xchg_gen_i((int *)__p, __v);
605}
606__DEVICE__ unsigned int __uAtomicInc(unsigned int *__p, unsigned int __v) {
607  return __nvvm_atom_inc_gen_ui(__p, __v);
608}
609__DEVICE__ unsigned int __uAtomicInc_block(unsigned int *__p,
610                                           unsigned int __v) {
611  return __nvvm_atom_cta_inc_gen_ui(__p, __v);
612}
613__DEVICE__ unsigned int __uAtomicInc_system(unsigned int *__p,
614                                            unsigned int __v) {
615  return __nvvm_atom_sys_inc_gen_ui(__p, __v);
616}
617__DEVICE__ unsigned int __uAtomicMax(unsigned int *__p, unsigned int __v) {
618  return __nvvm_atom_max_gen_ui(__p, __v);
619}
620__DEVICE__ unsigned int __uAtomicMax_block(unsigned int *__p,
621                                           unsigned int __v) {
622  return __nvvm_atom_cta_max_gen_ui(__p, __v);
623}
624__DEVICE__ unsigned int __uAtomicMax_system(unsigned int *__p,
625                                            unsigned int __v) {
626  return __nvvm_atom_sys_max_gen_ui(__p, __v);
627}
628__DEVICE__ unsigned int __uAtomicMin(unsigned int *__p, unsigned int __v) {
629  return __nvvm_atom_min_gen_ui(__p, __v);
630}
631__DEVICE__ unsigned int __uAtomicMin_block(unsigned int *__p,
632                                           unsigned int __v) {
633  return __nvvm_atom_cta_min_gen_ui(__p, __v);
634}
635__DEVICE__ unsigned int __uAtomicMin_system(unsigned int *__p,
636                                            unsigned int __v) {
637  return __nvvm_atom_sys_min_gen_ui(__p, __v);
638}
639__DEVICE__ unsigned int __uAtomicOr(unsigned int *__p, unsigned int __v) {
640  return __nvvm_atom_or_gen_i((int *)__p, __v);
641}
642__DEVICE__ unsigned int __uAtomicOr_block(unsigned int *__p, unsigned int __v) {
643  return __nvvm_atom_cta_or_gen_i((int *)__p, __v);
644}
645__DEVICE__ unsigned int __uAtomicOr_system(unsigned int *__p,
646                                           unsigned int __v) {
647  return __nvvm_atom_sys_or_gen_i((int *)__p, __v);
648}
649__DEVICE__ unsigned int __uAtomicXor(unsigned int *__p, unsigned int __v) {
650  return __nvvm_atom_xor_gen_i((int *)__p, __v);
651}
652__DEVICE__ unsigned int __uAtomicXor_block(unsigned int *__p,
653                                           unsigned int __v) {
654  return __nvvm_atom_cta_xor_gen_i((int *)__p, __v);
655}
656__DEVICE__ unsigned int __uAtomicXor_system(unsigned int *__p,
657                                            unsigned int __v) {
658  return __nvvm_atom_sys_xor_gen_i((int *)__p, __v);
659}
660__DEVICE__ unsigned int __uhadd(unsigned int __a, unsigned int __b) {
661  return __nv_uhadd(__a, __b);
662}
663__DEVICE__ double __uint2double_rn(unsigned int __a) {
664  return __nv_uint2double_rn(__a);
665}
666__DEVICE__ float __uint2float_rd(unsigned int __a) {
667  return __nv_uint2float_rd(__a);
668}
669__DEVICE__ float __uint2float_rn(unsigned int __a) {
670  return __nv_uint2float_rn(__a);
671}
672__DEVICE__ float __uint2float_ru(unsigned int __a) {
673  return __nv_uint2float_ru(__a);
674}
675__DEVICE__ float __uint2float_rz(unsigned int __a) {
676  return __nv_uint2float_rz(__a);
677}
678__DEVICE__ float __uint_as_float(unsigned int __a) {
679  return __nv_uint_as_float(__a);
680} //
681__DEVICE__ double __ull2double_rd(unsigned long long __a) {
682  return __nv_ull2double_rd(__a);
683}
684__DEVICE__ double __ull2double_rn(unsigned long long __a) {
685  return __nv_ull2double_rn(__a);
686}
687__DEVICE__ double __ull2double_ru(unsigned long long __a) {
688  return __nv_ull2double_ru(__a);
689}
690__DEVICE__ double __ull2double_rz(unsigned long long __a) {
691  return __nv_ull2double_rz(__a);
692}
693__DEVICE__ float __ull2float_rd(unsigned long long __a) {
694  return __nv_ull2float_rd(__a);
695}
696__DEVICE__ float __ull2float_rn(unsigned long long __a) {
697  return __nv_ull2float_rn(__a);
698}
699__DEVICE__ float __ull2float_ru(unsigned long long __a) {
700  return __nv_ull2float_ru(__a);
701}
702__DEVICE__ float __ull2float_rz(unsigned long long __a) {
703  return __nv_ull2float_rz(__a);
704}
705__DEVICE__ unsigned long long __ullAtomicAdd(unsigned long long *__p,
706                                             unsigned long long __v) {
707  return __nvvm_atom_add_gen_ll((long long *)__p, __v);
708}
709__DEVICE__ unsigned long long __ullAtomicAdd_block(unsigned long long *__p,
710                                                   unsigned long long __v) {
711  return __nvvm_atom_cta_add_gen_ll((long long *)__p, __v);
712}
713__DEVICE__ unsigned long long __ullAtomicAdd_system(unsigned long long *__p,
714                                                    unsigned long long __v) {
715  return __nvvm_atom_sys_add_gen_ll((long long *)__p, __v);
716}
717__DEVICE__ unsigned long long __ullAtomicAnd(unsigned long long *__p,
718                                             unsigned long long __v) {
719  return __nvvm_atom_and_gen_ll((long long *)__p, __v);
720}
721__DEVICE__ unsigned long long __ullAtomicAnd_block(unsigned long long *__p,
722                                                   unsigned long long __v) {
723  return __nvvm_atom_cta_and_gen_ll((long long *)__p, __v);
724}
725__DEVICE__ unsigned long long __ullAtomicAnd_system(unsigned long long *__p,
726                                                    unsigned long long __v) {
727  return __nvvm_atom_sys_and_gen_ll((long long *)__p, __v);
728}
729__DEVICE__ unsigned long long __ullAtomicCAS(unsigned long long *__p,
730                                             unsigned long long __cmp,
731                                             unsigned long long __v) {
732  return __nvvm_atom_cas_gen_ll((long long *)__p, __cmp, __v);
733}
734__DEVICE__ unsigned long long __ullAtomicCAS_block(unsigned long long *__p,
735                                                   unsigned long long __cmp,
736                                                   unsigned long long __v) {
737  return __nvvm_atom_cta_cas_gen_ll((long long *)__p, __cmp, __v);
738}
739__DEVICE__ unsigned long long __ullAtomicCAS_system(unsigned long long *__p,
740                                                    unsigned long long __cmp,
741                                                    unsigned long long __v) {
742  return __nvvm_atom_sys_cas_gen_ll((long long *)__p, __cmp, __v);
743}
744__DEVICE__ unsigned long long __ullAtomicExch(unsigned long long *__p,
745                                              unsigned long long __v) {
746  return __nvvm_atom_xchg_gen_ll((long long *)__p, __v);
747}
748__DEVICE__ unsigned long long __ullAtomicExch_block(unsigned long long *__p,
749                                                    unsigned long long __v) {
750  return __nvvm_atom_cta_xchg_gen_ll((long long *)__p, __v);
751}
752__DEVICE__ unsigned long long __ullAtomicExch_system(unsigned long long *__p,
753                                                     unsigned long long __v) {
754  return __nvvm_atom_sys_xchg_gen_ll((long long *)__p, __v);
755}
756__DEVICE__ unsigned long long __ullAtomicMax(unsigned long long *__p,
757                                             unsigned long long __v) {
758  return __nvvm_atom_max_gen_ull(__p, __v);
759}
760__DEVICE__ unsigned long long __ullAtomicMax_block(unsigned long long *__p,
761                                                   unsigned long long __v) {
762  return __nvvm_atom_cta_max_gen_ull(__p, __v);
763}
764__DEVICE__ unsigned long long __ullAtomicMax_system(unsigned long long *__p,
765                                                    unsigned long long __v) {
766  return __nvvm_atom_sys_max_gen_ull(__p, __v);
767}
768__DEVICE__ unsigned long long __ullAtomicMin(unsigned long long *__p,
769                                             unsigned long long __v) {
770  return __nvvm_atom_min_gen_ull(__p, __v);
771}
772__DEVICE__ unsigned long long __ullAtomicMin_block(unsigned long long *__p,
773                                                   unsigned long long __v) {
774  return __nvvm_atom_cta_min_gen_ull(__p, __v);
775}
776__DEVICE__ unsigned long long __ullAtomicMin_system(unsigned long long *__p,
777                                                    unsigned long long __v) {
778  return __nvvm_atom_sys_min_gen_ull(__p, __v);
779}
780__DEVICE__ unsigned long long __ullAtomicOr(unsigned long long *__p,
781                                            unsigned long long __v) {
782  return __nvvm_atom_or_gen_ll((long long *)__p, __v);
783}
784__DEVICE__ unsigned long long __ullAtomicOr_block(unsigned long long *__p,
785                                                  unsigned long long __v) {
786  return __nvvm_atom_cta_or_gen_ll((long long *)__p, __v);
787}
788__DEVICE__ unsigned long long __ullAtomicOr_system(unsigned long long *__p,
789                                                   unsigned long long __v) {
790  return __nvvm_atom_sys_or_gen_ll((long long *)__p, __v);
791}
792__DEVICE__ unsigned long long __ullAtomicXor(unsigned long long *__p,
793                                             unsigned long long __v) {
794  return __nvvm_atom_xor_gen_ll((long long *)__p, __v);
795}
796__DEVICE__ unsigned long long __ullAtomicXor_block(unsigned long long *__p,
797                                                   unsigned long long __v) {
798  return __nvvm_atom_cta_xor_gen_ll((long long *)__p, __v);
799}
800__DEVICE__ unsigned long long __ullAtomicXor_system(unsigned long long *__p,
801                                                    unsigned long long __v) {
802  return __nvvm_atom_sys_xor_gen_ll((long long *)__p, __v);
803}
804__DEVICE__ unsigned int __umul24(unsigned int __a, unsigned int __b) {
805  return __nv_umul24(__a, __b);
806}
807__DEVICE__ unsigned long long __umul64hi(unsigned long long __a,
808                                         unsigned long long __b) {
809  return __nv_umul64hi(__a, __b);
810}
811__DEVICE__ unsigned int __umulhi(unsigned int __a, unsigned int __b) {
812  return __nv_umulhi(__a, __b);
813}
814__DEVICE__ unsigned int __urhadd(unsigned int __a, unsigned int __b) {
815  return __nv_urhadd(__a, __b);
816}
817__DEVICE__ unsigned int __usad(unsigned int __a, unsigned int __b,
818                               unsigned int __c) {
819  return __nv_usad(__a, __b, __c);
820}
821
822#if CUDA_VERSION >= 9000 && CUDA_VERSION < 9020
823__DEVICE__ unsigned int __vabs2(unsigned int __a) { return __nv_vabs2(__a); }
824__DEVICE__ unsigned int __vabs4(unsigned int __a) { return __nv_vabs4(__a); }
825__DEVICE__ unsigned int __vabsdiffs2(unsigned int __a, unsigned int __b) {
826  return __nv_vabsdiffs2(__a, __b);
827}
828__DEVICE__ unsigned int __vabsdiffs4(unsigned int __a, unsigned int __b) {
829  return __nv_vabsdiffs4(__a, __b);
830}
831__DEVICE__ unsigned int __vabsdiffu2(unsigned int __a, unsigned int __b) {
832  return __nv_vabsdiffu2(__a, __b);
833}
834__DEVICE__ unsigned int __vabsdiffu4(unsigned int __a, unsigned int __b) {
835  return __nv_vabsdiffu4(__a, __b);
836}
837__DEVICE__ unsigned int __vabsss2(unsigned int __a) {
838  return __nv_vabsss2(__a);
839}
840__DEVICE__ unsigned int __vabsss4(unsigned int __a) {
841  return __nv_vabsss4(__a);
842}
843__DEVICE__ unsigned int __vadd2(unsigned int __a, unsigned int __b) {
844  return __nv_vadd2(__a, __b);
845}
846__DEVICE__ unsigned int __vadd4(unsigned int __a, unsigned int __b) {
847  return __nv_vadd4(__a, __b);
848}
849__DEVICE__ unsigned int __vaddss2(unsigned int __a, unsigned int __b) {
850  return __nv_vaddss2(__a, __b);
851}
852__DEVICE__ unsigned int __vaddss4(unsigned int __a, unsigned int __b) {
853  return __nv_vaddss4(__a, __b);
854}
855__DEVICE__ unsigned int __vaddus2(unsigned int __a, unsigned int __b) {
856  return __nv_vaddus2(__a, __b);
857}
858__DEVICE__ unsigned int __vaddus4(unsigned int __a, unsigned int __b) {
859  return __nv_vaddus4(__a, __b);
860}
861__DEVICE__ unsigned int __vavgs2(unsigned int __a, unsigned int __b) {
862  return __nv_vavgs2(__a, __b);
863}
864__DEVICE__ unsigned int __vavgs4(unsigned int __a, unsigned int __b) {
865  return __nv_vavgs4(__a, __b);
866}
867__DEVICE__ unsigned int __vavgu2(unsigned int __a, unsigned int __b) {
868  return __nv_vavgu2(__a, __b);
869}
870__DEVICE__ unsigned int __vavgu4(unsigned int __a, unsigned int __b) {
871  return __nv_vavgu4(__a, __b);
872}
873__DEVICE__ unsigned int __vcmpeq2(unsigned int __a, unsigned int __b) {
874  return __nv_vcmpeq2(__a, __b);
875}
876__DEVICE__ unsigned int __vcmpeq4(unsigned int __a, unsigned int __b) {
877  return __nv_vcmpeq4(__a, __b);
878}
879__DEVICE__ unsigned int __vcmpges2(unsigned int __a, unsigned int __b) {
880  return __nv_vcmpges2(__a, __b);
881}
882__DEVICE__ unsigned int __vcmpges4(unsigned int __a, unsigned int __b) {
883  return __nv_vcmpges4(__a, __b);
884}
885__DEVICE__ unsigned int __vcmpgeu2(unsigned int __a, unsigned int __b) {
886  return __nv_vcmpgeu2(__a, __b);
887}
888__DEVICE__ unsigned int __vcmpgeu4(unsigned int __a, unsigned int __b) {
889  return __nv_vcmpgeu4(__a, __b);
890}
891__DEVICE__ unsigned int __vcmpgts2(unsigned int __a, unsigned int __b) {
892  return __nv_vcmpgts2(__a, __b);
893}
894__DEVICE__ unsigned int __vcmpgts4(unsigned int __a, unsigned int __b) {
895  return __nv_vcmpgts4(__a, __b);
896}
897__DEVICE__ unsigned int __vcmpgtu2(unsigned int __a, unsigned int __b) {
898  return __nv_vcmpgtu2(__a, __b);
899}
900__DEVICE__ unsigned int __vcmpgtu4(unsigned int __a, unsigned int __b) {
901  return __nv_vcmpgtu4(__a, __b);
902}
903__DEVICE__ unsigned int __vcmples2(unsigned int __a, unsigned int __b) {
904  return __nv_vcmples2(__a, __b);
905}
906__DEVICE__ unsigned int __vcmples4(unsigned int __a, unsigned int __b) {
907  return __nv_vcmples4(__a, __b);
908}
909__DEVICE__ unsigned int __vcmpleu2(unsigned int __a, unsigned int __b) {
910  return __nv_vcmpleu2(__a, __b);
911}
912__DEVICE__ unsigned int __vcmpleu4(unsigned int __a, unsigned int __b) {
913  return __nv_vcmpleu4(__a, __b);
914}
915__DEVICE__ unsigned int __vcmplts2(unsigned int __a, unsigned int __b) {
916  return __nv_vcmplts2(__a, __b);
917}
918__DEVICE__ unsigned int __vcmplts4(unsigned int __a, unsigned int __b) {
919  return __nv_vcmplts4(__a, __b);
920}
921__DEVICE__ unsigned int __vcmpltu2(unsigned int __a, unsigned int __b) {
922  return __nv_vcmpltu2(__a, __b);
923}
924__DEVICE__ unsigned int __vcmpltu4(unsigned int __a, unsigned int __b) {
925  return __nv_vcmpltu4(__a, __b);
926}
927__DEVICE__ unsigned int __vcmpne2(unsigned int __a, unsigned int __b) {
928  return __nv_vcmpne2(__a, __b);
929}
930__DEVICE__ unsigned int __vcmpne4(unsigned int __a, unsigned int __b) {
931  return __nv_vcmpne4(__a, __b);
932}
933__DEVICE__ unsigned int __vhaddu2(unsigned int __a, unsigned int __b) {
934  return __nv_vhaddu2(__a, __b);
935}
936__DEVICE__ unsigned int __vhaddu4(unsigned int __a, unsigned int __b) {
937  return __nv_vhaddu4(__a, __b);
938}
939__DEVICE__ unsigned int __vmaxs2(unsigned int __a, unsigned int __b) {
940  return __nv_vmaxs2(__a, __b);
941}
942__DEVICE__ unsigned int __vmaxs4(unsigned int __a, unsigned int __b) {
943  return __nv_vmaxs4(__a, __b);
944}
945__DEVICE__ unsigned int __vmaxu2(unsigned int __a, unsigned int __b) {
946  return __nv_vmaxu2(__a, __b);
947}
948__DEVICE__ unsigned int __vmaxu4(unsigned int __a, unsigned int __b) {
949  return __nv_vmaxu4(__a, __b);
950}
951__DEVICE__ unsigned int __vmins2(unsigned int __a, unsigned int __b) {
952  return __nv_vmins2(__a, __b);
953}
954__DEVICE__ unsigned int __vmins4(unsigned int __a, unsigned int __b) {
955  return __nv_vmins4(__a, __b);
956}
957__DEVICE__ unsigned int __vminu2(unsigned int __a, unsigned int __b) {
958  return __nv_vminu2(__a, __b);
959}
960__DEVICE__ unsigned int __vminu4(unsigned int __a, unsigned int __b) {
961  return __nv_vminu4(__a, __b);
962}
963__DEVICE__ unsigned int __vneg2(unsigned int __a) { return __nv_vneg2(__a); }
964__DEVICE__ unsigned int __vneg4(unsigned int __a) { return __nv_vneg4(__a); }
965__DEVICE__ unsigned int __vnegss2(unsigned int __a) {
966  return __nv_vnegss2(__a);
967}
968__DEVICE__ unsigned int __vnegss4(unsigned int __a) {
969  return __nv_vnegss4(__a);
970}
971__DEVICE__ unsigned int __vsads2(unsigned int __a, unsigned int __b) {
972  return __nv_vsads2(__a, __b);
973}
974__DEVICE__ unsigned int __vsads4(unsigned int __a, unsigned int __b) {
975  return __nv_vsads4(__a, __b);
976}
977__DEVICE__ unsigned int __vsadu2(unsigned int __a, unsigned int __b) {
978  return __nv_vsadu2(__a, __b);
979}
980__DEVICE__ unsigned int __vsadu4(unsigned int __a, unsigned int __b) {
981  return __nv_vsadu4(__a, __b);
982}
983__DEVICE__ unsigned int __vseteq2(unsigned int __a, unsigned int __b) {
984  return __nv_vseteq2(__a, __b);
985}
986__DEVICE__ unsigned int __vseteq4(unsigned int __a, unsigned int __b) {
987  return __nv_vseteq4(__a, __b);
988}
989__DEVICE__ unsigned int __vsetges2(unsigned int __a, unsigned int __b) {
990  return __nv_vsetges2(__a, __b);
991}
992__DEVICE__ unsigned int __vsetges4(unsigned int __a, unsigned int __b) {
993  return __nv_vsetges4(__a, __b);
994}
995__DEVICE__ unsigned int __vsetgeu2(unsigned int __a, unsigned int __b) {
996  return __nv_vsetgeu2(__a, __b);
997}
998__DEVICE__ unsigned int __vsetgeu4(unsigned int __a, unsigned int __b) {
999  return __nv_vsetgeu4(__a, __b);
1000}
1001__DEVICE__ unsigned int __vsetgts2(unsigned int __a, unsigned int __b) {
1002  return __nv_vsetgts2(__a, __b);
1003}
1004__DEVICE__ unsigned int __vsetgts4(unsigned int __a, unsigned int __b) {
1005  return __nv_vsetgts4(__a, __b);
1006}
1007__DEVICE__ unsigned int __vsetgtu2(unsigned int __a, unsigned int __b) {
1008  return __nv_vsetgtu2(__a, __b);
1009}
1010__DEVICE__ unsigned int __vsetgtu4(unsigned int __a, unsigned int __b) {
1011  return __nv_vsetgtu4(__a, __b);
1012}
1013__DEVICE__ unsigned int __vsetles2(unsigned int __a, unsigned int __b) {
1014  return __nv_vsetles2(__a, __b);
1015}
1016__DEVICE__ unsigned int __vsetles4(unsigned int __a, unsigned int __b) {
1017  return __nv_vsetles4(__a, __b);
1018}
1019__DEVICE__ unsigned int __vsetleu2(unsigned int __a, unsigned int __b) {
1020  return __nv_vsetleu2(__a, __b);
1021}
1022__DEVICE__ unsigned int __vsetleu4(unsigned int __a, unsigned int __b) {
1023  return __nv_vsetleu4(__a, __b);
1024}
1025__DEVICE__ unsigned int __vsetlts2(unsigned int __a, unsigned int __b) {
1026  return __nv_vsetlts2(__a, __b);
1027}
1028__DEVICE__ unsigned int __vsetlts4(unsigned int __a, unsigned int __b) {
1029  return __nv_vsetlts4(__a, __b);
1030}
1031__DEVICE__ unsigned int __vsetltu2(unsigned int __a, unsigned int __b) {
1032  return __nv_vsetltu2(__a, __b);
1033}
1034__DEVICE__ unsigned int __vsetltu4(unsigned int __a, unsigned int __b) {
1035  return __nv_vsetltu4(__a, __b);
1036}
1037__DEVICE__ unsigned int __vsetne2(unsigned int __a, unsigned int __b) {
1038  return __nv_vsetne2(__a, __b);
1039}
1040__DEVICE__ unsigned int __vsetne4(unsigned int __a, unsigned int __b) {
1041  return __nv_vsetne4(__a, __b);
1042}
1043__DEVICE__ unsigned int __vsub2(unsigned int __a, unsigned int __b) {
1044  return __nv_vsub2(__a, __b);
1045}
1046__DEVICE__ unsigned int __vsub4(unsigned int __a, unsigned int __b) {
1047  return __nv_vsub4(__a, __b);
1048}
1049__DEVICE__ unsigned int __vsubss2(unsigned int __a, unsigned int __b) {
1050  return __nv_vsubss2(__a, __b);
1051}
1052__DEVICE__ unsigned int __vsubss4(unsigned int __a, unsigned int __b) {
1053  return __nv_vsubss4(__a, __b);
1054}
1055__DEVICE__ unsigned int __vsubus2(unsigned int __a, unsigned int __b) {
1056  return __nv_vsubus2(__a, __b);
1057}
1058__DEVICE__ unsigned int __vsubus4(unsigned int __a, unsigned int __b) {
1059  return __nv_vsubus4(__a, __b);
1060}
1061#else // CUDA_VERSION >= 9020
1062// CUDA no longer provides inline assembly (or bitcode) implementation of these
1063// functions, so we have to reimplment them. The implementation is naive and is
1064// not optimized for performance.
1065
1066// Helper function to convert N-bit boolean subfields into all-0 or all-1.
1067// E.g. __bool2mask(0x01000100,8) -> 0xff00ff00
1068//      __bool2mask(0x00010000,16) -> 0xffff0000
1069__DEVICE__ unsigned int __bool2mask(unsigned int __a, int shift) {
1070  return (__a << shift) - __a;
1071}
1072__DEVICE__ unsigned int __vabs2(unsigned int __a) {
1073  unsigned int r;
1074  asm("vabsdiff2.s32.s32.s32 %0,%1,%2,%3;"
1075      : "=r"(r)
1076      : "r"(__a), "r"(0), "r"(0));
1077  return r;
1078}
1079__DEVICE__ unsigned int __vabs4(unsigned int __a) {
1080  unsigned int r;
1081  asm("vabsdiff4.s32.s32.s32 %0,%1,%2,%3;"
1082      : "=r"(r)
1083      : "r"(__a), "r"(0), "r"(0));
1084  return r;
1085}
1086__DEVICE__ unsigned int __vabsdiffs2(unsigned int __a, unsigned int __b) {
1087  unsigned int r;
1088  asm("vabsdiff2.s32.s32.s32 %0,%1,%2,%3;"
1089      : "=r"(r)
1090      : "r"(__a), "r"(__b), "r"(0));
1091  return r;
1092}
1093
1094__DEVICE__ unsigned int __vabsdiffs4(unsigned int __a, unsigned int __b) {
1095  unsigned int r;
1096  asm("vabsdiff4.s32.s32.s32 %0,%1,%2,%3;"
1097      : "=r"(r)
1098      : "r"(__a), "r"(__b), "r"(0));
1099  return r;
1100}
1101__DEVICE__ unsigned int __vabsdiffu2(unsigned int __a, unsigned int __b) {
1102  unsigned int r;
1103  asm("vabsdiff2.u32.u32.u32 %0,%1,%2,%3;"
1104      : "=r"(r)
1105      : "r"(__a), "r"(__b), "r"(0));
1106  return r;
1107}
1108__DEVICE__ unsigned int __vabsdiffu4(unsigned int __a, unsigned int __b) {
1109  unsigned int r;
1110  asm("vabsdiff4.u32.u32.u32 %0,%1,%2,%3;"
1111      : "=r"(r)
1112      : "r"(__a), "r"(__b), "r"(0));
1113  return r;
1114}
1115__DEVICE__ unsigned int __vabsss2(unsigned int __a) {
1116  unsigned int r;
1117  asm("vabsdiff2.s32.s32.s32.sat %0,%1,%2,%3;"
1118      : "=r"(r)
1119      : "r"(__a), "r"(0), "r"(0));
1120  return r;
1121}
1122__DEVICE__ unsigned int __vabsss4(unsigned int __a) {
1123  unsigned int r;
1124  asm("vabsdiff4.s32.s32.s32.sat %0,%1,%2,%3;"
1125      : "=r"(r)
1126      : "r"(__a), "r"(0), "r"(0));
1127  return r;
1128}
1129__DEVICE__ unsigned int __vadd2(unsigned int __a, unsigned int __b) {
1130  unsigned int r;
1131  asm("vadd2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1132  return r;
1133}
1134__DEVICE__ unsigned int __vadd4(unsigned int __a, unsigned int __b) {
1135  unsigned int r;
1136  asm("vadd4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1137  return r;
1138}
1139__DEVICE__ unsigned int __vaddss2(unsigned int __a, unsigned int __b) {
1140  unsigned int r;
1141  asm("vadd2.s32.s32.s32.sat %0,%1,%2,%3;"
1142      : "=r"(r)
1143      : "r"(__a), "r"(__b), "r"(0));
1144  return r;
1145}
1146__DEVICE__ unsigned int __vaddss4(unsigned int __a, unsigned int __b) {
1147  unsigned int r;
1148  asm("vadd4.s32.s32.s32.sat %0,%1,%2,%3;"
1149      : "=r"(r)
1150      : "r"(__a), "r"(__b), "r"(0));
1151  return r;
1152}
1153__DEVICE__ unsigned int __vaddus2(unsigned int __a, unsigned int __b) {
1154  unsigned int r;
1155  asm("vadd2.u32.u32.u32.sat %0,%1,%2,%3;"
1156      : "=r"(r)
1157      : "r"(__a), "r"(__b), "r"(0));
1158  return r;
1159}
1160__DEVICE__ unsigned int __vaddus4(unsigned int __a, unsigned int __b) {
1161  unsigned int r;
1162  asm("vadd4.u32.u32.u32.sat %0,%1,%2,%3;"
1163      : "=r"(r)
1164      : "r"(__a), "r"(__b), "r"(0));
1165  return r;
1166}
1167__DEVICE__ unsigned int __vavgs2(unsigned int __a, unsigned int __b) {
1168  unsigned int r;
1169  asm("vavrg2.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1170  return r;
1171}
1172__DEVICE__ unsigned int __vavgs4(unsigned int __a, unsigned int __b) {
1173  unsigned int r;
1174  asm("vavrg4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1175  return r;
1176}
1177__DEVICE__ unsigned int __vavgu2(unsigned int __a, unsigned int __b) {
1178  unsigned int r;
1179  asm("vavrg2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1180  return r;
1181}
1182__DEVICE__ unsigned int __vavgu4(unsigned int __a, unsigned int __b) {
1183  unsigned int r;
1184  asm("vavrg4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1185  return r;
1186}
1187__DEVICE__ unsigned int __vseteq2(unsigned int __a, unsigned int __b) {
1188  unsigned int r;
1189  asm("vset2.u32.u32.eq %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1190  return r;
1191}
1192__DEVICE__ unsigned int __vcmpeq2(unsigned int __a, unsigned int __b) {
1193  return __bool2mask(__vseteq2(__a, __b), 16);
1194}
1195__DEVICE__ unsigned int __vseteq4(unsigned int __a, unsigned int __b) {
1196  unsigned int r;
1197  asm("vset4.u32.u32.eq %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1198  return r;
1199}
1200__DEVICE__ unsigned int __vcmpeq4(unsigned int __a, unsigned int __b) {
1201  return __bool2mask(__vseteq4(__a, __b), 8);
1202}
1203__DEVICE__ unsigned int __vsetges2(unsigned int __a, unsigned int __b) {
1204  unsigned int r;
1205  asm("vset2.s32.s32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1206  return r;
1207}
1208__DEVICE__ unsigned int __vcmpges2(unsigned int __a, unsigned int __b) {
1209  return __bool2mask(__vsetges2(__a, __b), 16);
1210}
1211__DEVICE__ unsigned int __vsetges4(unsigned int __a, unsigned int __b) {
1212  unsigned int r;
1213  asm("vset4.s32.s32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1214  return r;
1215}
1216__DEVICE__ unsigned int __vcmpges4(unsigned int __a, unsigned int __b) {
1217  return __bool2mask(__vsetges4(__a, __b), 8);
1218}
1219__DEVICE__ unsigned int __vsetgeu2(unsigned int __a, unsigned int __b) {
1220  unsigned int r;
1221  asm("vset2.u32.u32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1222  return r;
1223}
1224__DEVICE__ unsigned int __vcmpgeu2(unsigned int __a, unsigned int __b) {
1225  return __bool2mask(__vsetgeu2(__a, __b), 16);
1226}
1227__DEVICE__ unsigned int __vsetgeu4(unsigned int __a, unsigned int __b) {
1228  unsigned int r;
1229  asm("vset4.u32.u32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1230  return r;
1231}
1232__DEVICE__ unsigned int __vcmpgeu4(unsigned int __a, unsigned int __b) {
1233  return __bool2mask(__vsetgeu4(__a, __b), 8);
1234}
1235__DEVICE__ unsigned int __vsetgts2(unsigned int __a, unsigned int __b) {
1236  unsigned int r;
1237  asm("vset2.s32.s32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1238  return r;
1239}
1240__DEVICE__ unsigned int __vcmpgts2(unsigned int __a, unsigned int __b) {
1241  return __bool2mask(__vsetgts2(__a, __b), 16);
1242}
1243__DEVICE__ unsigned int __vsetgts4(unsigned int __a, unsigned int __b) {
1244  unsigned int r;
1245  asm("vset4.s32.s32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1246  return r;
1247}
1248__DEVICE__ unsigned int __vcmpgts4(unsigned int __a, unsigned int __b) {
1249  return __bool2mask(__vsetgts4(__a, __b), 8);
1250}
1251__DEVICE__ unsigned int __vsetgtu2(unsigned int __a, unsigned int __b) {
1252  unsigned int r;
1253  asm("vset2.u32.u32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1254  return r;
1255}
1256__DEVICE__ unsigned int __vcmpgtu2(unsigned int __a, unsigned int __b) {
1257  return __bool2mask(__vsetgtu2(__a, __b), 16);
1258}
1259__DEVICE__ unsigned int __vsetgtu4(unsigned int __a, unsigned int __b) {
1260  unsigned int r;
1261  asm("vset4.u32.u32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1262  return r;
1263}
1264__DEVICE__ unsigned int __vcmpgtu4(unsigned int __a, unsigned int __b) {
1265  return __bool2mask(__vsetgtu4(__a, __b), 8);
1266}
1267__DEVICE__ unsigned int __vsetles2(unsigned int __a, unsigned int __b) {
1268  unsigned int r;
1269  asm("vset2.s32.s32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1270  return r;
1271}
1272__DEVICE__ unsigned int __vcmples2(unsigned int __a, unsigned int __b) {
1273  return __bool2mask(__vsetles2(__a, __b), 16);
1274}
1275__DEVICE__ unsigned int __vsetles4(unsigned int __a, unsigned int __b) {
1276  unsigned int r;
1277  asm("vset4.s32.s32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1278  return r;
1279}
1280__DEVICE__ unsigned int __vcmples4(unsigned int __a, unsigned int __b) {
1281  return __bool2mask(__vsetles4(__a, __b), 8);
1282}
1283__DEVICE__ unsigned int __vsetleu2(unsigned int __a, unsigned int __b) {
1284  unsigned int r;
1285  asm("vset2.u32.u32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1286  return r;
1287}
1288__DEVICE__ unsigned int __vcmpleu2(unsigned int __a, unsigned int __b) {
1289  return __bool2mask(__vsetleu2(__a, __b), 16);
1290}
1291__DEVICE__ unsigned int __vsetleu4(unsigned int __a, unsigned int __b) {
1292  unsigned int r;
1293  asm("vset4.u32.u32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1294  return r;
1295}
1296__DEVICE__ unsigned int __vcmpleu4(unsigned int __a, unsigned int __b) {
1297  return __bool2mask(__vsetleu4(__a, __b), 8);
1298}
1299__DEVICE__ unsigned int __vsetlts2(unsigned int __a, unsigned int __b) {
1300  unsigned int r;
1301  asm("vset2.s32.s32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1302  return r;
1303}
1304__DEVICE__ unsigned int __vcmplts2(unsigned int __a, unsigned int __b) {
1305  return __bool2mask(__vsetlts2(__a, __b), 16);
1306}
1307__DEVICE__ unsigned int __vsetlts4(unsigned int __a, unsigned int __b) {
1308  unsigned int r;
1309  asm("vset4.s32.s32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1310  return r;
1311}
1312__DEVICE__ unsigned int __vcmplts4(unsigned int __a, unsigned int __b) {
1313  return __bool2mask(__vsetlts4(__a, __b), 8);
1314}
1315__DEVICE__ unsigned int __vsetltu2(unsigned int __a, unsigned int __b) {
1316  unsigned int r;
1317  asm("vset2.u32.u32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1318  return r;
1319}
1320__DEVICE__ unsigned int __vcmpltu2(unsigned int __a, unsigned int __b) {
1321  return __bool2mask(__vsetltu2(__a, __b), 16);
1322}
1323__DEVICE__ unsigned int __vsetltu4(unsigned int __a, unsigned int __b) {
1324  unsigned int r;
1325  asm("vset4.u32.u32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1326  return r;
1327}
1328__DEVICE__ unsigned int __vcmpltu4(unsigned int __a, unsigned int __b) {
1329  return __bool2mask(__vsetltu4(__a, __b), 8);
1330}
1331__DEVICE__ unsigned int __vsetne2(unsigned int __a, unsigned int __b) {
1332  unsigned int r;
1333  asm("vset2.u32.u32.ne %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1334  return r;
1335}
1336__DEVICE__ unsigned int __vcmpne2(unsigned int __a, unsigned int __b) {
1337  return __bool2mask(__vsetne2(__a, __b), 16);
1338}
1339__DEVICE__ unsigned int __vsetne4(unsigned int __a, unsigned int __b) {
1340  unsigned int r;
1341  asm("vset4.u32.u32.ne %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1342  return r;
1343}
1344__DEVICE__ unsigned int __vcmpne4(unsigned int __a, unsigned int __b) {
1345  return __bool2mask(__vsetne4(__a, __b), 8);
1346}
1347
1348// Based on ITEM 23 in AIM-239: http://dspace.mit.edu/handle/1721.1/6086
1349// (a & b) + (a | b) = a + b = (a ^ b) + 2 * (a & b) =>
1350// (a + b) / 2 = ((a ^ b) >> 1) + (a & b)
1351// To operate on multiple sub-elements we need to make sure to mask out bits
1352// that crossed over into adjacent elements during the shift.
1353__DEVICE__ unsigned int __vhaddu2(unsigned int __a, unsigned int __b) {
1354  return (((__a ^ __b) >> 1) & ~0x80008000u) + (__a & __b);
1355}
1356__DEVICE__ unsigned int __vhaddu4(unsigned int __a, unsigned int __b) {
1357  return (((__a ^ __b) >> 1) & ~0x80808080u) + (__a & __b);
1358}
1359
1360__DEVICE__ unsigned int __vmaxs2(unsigned int __a, unsigned int __b) {
1361  unsigned int r;
1362  if ((__a & 0x8000) && (__b & 0x8000)) {
1363    // Work around a bug in ptxas which produces invalid result if low element
1364    // is negative.
1365    unsigned mask = __vcmpgts2(__a, __b);
1366    r = (__a & mask) | (__b & ~mask);
1367  } else {
1368    asm("vmax2.s32.s32.s32 %0,%1,%2,%3;"
1369        : "=r"(r)
1370        : "r"(__a), "r"(__b), "r"(0));
1371  }
1372  return r;
1373}
1374__DEVICE__ unsigned int __vmaxs4(unsigned int __a, unsigned int __b) {
1375  unsigned int r;
1376  asm("vmax4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1377  return r;
1378}
1379__DEVICE__ unsigned int __vmaxu2(unsigned int __a, unsigned int __b) {
1380  unsigned int r;
1381  asm("vmax2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1382  return r;
1383}
1384__DEVICE__ unsigned int __vmaxu4(unsigned int __a, unsigned int __b) {
1385  unsigned int r;
1386  asm("vmax4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1387  return r;
1388}
1389__DEVICE__ unsigned int __vmins2(unsigned int __a, unsigned int __b) {
1390  unsigned int r;
1391  asm("vmin2.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1392  return r;
1393}
1394__DEVICE__ unsigned int __vmins4(unsigned int __a, unsigned int __b) {
1395  unsigned int r;
1396  asm("vmin4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1397  return r;
1398}
1399__DEVICE__ unsigned int __vminu2(unsigned int __a, unsigned int __b) {
1400  unsigned int r;
1401  asm("vmin2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1402  return r;
1403}
1404__DEVICE__ unsigned int __vminu4(unsigned int __a, unsigned int __b) {
1405  unsigned int r;
1406  asm("vmin4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1407  return r;
1408}
1409__DEVICE__ unsigned int __vsads2(unsigned int __a, unsigned int __b) {
1410  unsigned int r;
1411  asm("vabsdiff2.s32.s32.s32.add %0,%1,%2,%3;"
1412      : "=r"(r)
1413      : "r"(__a), "r"(__b), "r"(0));
1414  return r;
1415}
1416__DEVICE__ unsigned int __vsads4(unsigned int __a, unsigned int __b) {
1417  unsigned int r;
1418  asm("vabsdiff4.s32.s32.s32.add %0,%1,%2,%3;"
1419      : "=r"(r)
1420      : "r"(__a), "r"(__b), "r"(0));
1421  return r;
1422}
1423__DEVICE__ unsigned int __vsadu2(unsigned int __a, unsigned int __b) {
1424  unsigned int r;
1425  asm("vabsdiff2.u32.u32.u32.add %0,%1,%2,%3;"
1426      : "=r"(r)
1427      : "r"(__a), "r"(__b), "r"(0));
1428  return r;
1429}
1430__DEVICE__ unsigned int __vsadu4(unsigned int __a, unsigned int __b) {
1431  unsigned int r;
1432  asm("vabsdiff4.u32.u32.u32.add %0,%1,%2,%3;"
1433      : "=r"(r)
1434      : "r"(__a), "r"(__b), "r"(0));
1435  return r;
1436}
1437
1438__DEVICE__ unsigned int __vsub2(unsigned int __a, unsigned int __b) {
1439  unsigned int r;
1440  asm("vsub2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1441  return r;
1442}
1443__DEVICE__ unsigned int __vneg2(unsigned int __a) { return __vsub2(0, __a); }
1444
1445__DEVICE__ unsigned int __vsub4(unsigned int __a, unsigned int __b) {
1446  unsigned int r;
1447  asm("vsub4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1448  return r;
1449}
1450__DEVICE__ unsigned int __vneg4(unsigned int __a) { return __vsub4(0, __a); }
1451__DEVICE__ unsigned int __vsubss2(unsigned int __a, unsigned int __b) {
1452  unsigned int r;
1453  asm("vsub2.s32.s32.s32.sat %0,%1,%2,%3;"
1454      : "=r"(r)
1455      : "r"(__a), "r"(__b), "r"(0));
1456  return r;
1457}
1458__DEVICE__ unsigned int __vnegss2(unsigned int __a) {
1459  return __vsubss2(0, __a);
1460}
1461__DEVICE__ unsigned int __vsubss4(unsigned int __a, unsigned int __b) {
1462  unsigned int r;
1463  asm("vsub4.s32.s32.s32.sat %0,%1,%2,%3;"
1464      : "=r"(r)
1465      : "r"(__a), "r"(__b), "r"(0));
1466  return r;
1467}
1468__DEVICE__ unsigned int __vnegss4(unsigned int __a) {
1469  return __vsubss4(0, __a);
1470}
1471__DEVICE__ unsigned int __vsubus2(unsigned int __a, unsigned int __b) {
1472  unsigned int r;
1473  asm("vsub2.u32.u32.u32.sat %0,%1,%2,%3;"
1474      : "=r"(r)
1475      : "r"(__a), "r"(__b), "r"(0));
1476  return r;
1477}
1478__DEVICE__ unsigned int __vsubus4(unsigned int __a, unsigned int __b) {
1479  unsigned int r;
1480  asm("vsub4.u32.u32.u32.sat %0,%1,%2,%3;"
1481      : "=r"(r)
1482      : "r"(__a), "r"(__b), "r"(0));
1483  return r;
1484}
1485#endif // CUDA_VERSION >= 9020
1486__DEVICE__ int abs(int __a) __NOEXCEPT { return __nv_abs(__a); }
1487__DEVICE__ double fabs(double __a) __NOEXCEPT { return __nv_fabs(__a); }
1488__DEVICE__ double acos(double __a) { return __nv_acos(__a); }
1489__DEVICE__ float acosf(float __a) { return __nv_acosf(__a); }
1490__DEVICE__ double acosh(double __a) { return __nv_acosh(__a); }
1491__DEVICE__ float acoshf(float __a) { return __nv_acoshf(__a); }
1492__DEVICE__ double asin(double __a) { return __nv_asin(__a); }
1493__DEVICE__ float asinf(float __a) { return __nv_asinf(__a); }
1494__DEVICE__ double asinh(double __a) { return __nv_asinh(__a); }
1495__DEVICE__ float asinhf(float __a) { return __nv_asinhf(__a); }
1496__DEVICE__ double atan(double __a) { return __nv_atan(__a); }
1497__DEVICE__ double atan2(double __a, double __b) { return __nv_atan2(__a, __b); }
1498__DEVICE__ float atan2f(float __a, float __b) { return __nv_atan2f(__a, __b); }
1499__DEVICE__ float atanf(float __a) { return __nv_atanf(__a); }
1500__DEVICE__ double atanh(double __a) { return __nv_atanh(__a); }
1501__DEVICE__ float atanhf(float __a) { return __nv_atanhf(__a); }
1502__DEVICE__ double cbrt(double __a) { return __nv_cbrt(__a); }
1503__DEVICE__ float cbrtf(float __a) { return __nv_cbrtf(__a); }
1504__DEVICE__ double ceil(double __a) { return __nv_ceil(__a); }
1505__DEVICE__ float ceilf(float __a) { return __nv_ceilf(__a); }
1506#ifndef _OPENMP
1507__DEVICE__ int clock() { return __nvvm_read_ptx_sreg_clock(); }
1508__DEVICE__ long long clock64() { return __nvvm_read_ptx_sreg_clock64(); }
1509#endif
1510__DEVICE__ double copysign(double __a, double __b) {
1511  return __nv_copysign(__a, __b);
1512}
1513__DEVICE__ float copysignf(float __a, float __b) {
1514  return __nv_copysignf(__a, __b);
1515}
1516__DEVICE__ double cos(double __a) { return __nv_cos(__a); }
1517__DEVICE__ float cosf(float __a) {
1518  return __FAST_OR_SLOW(__nv_fast_cosf, __nv_cosf)(__a);
1519}
1520__DEVICE__ double cosh(double __a) { return __nv_cosh(__a); }
1521__DEVICE__ float coshf(float __a) { return __nv_coshf(__a); }
1522__DEVICE__ double cospi(double __a) { return __nv_cospi(__a); }
1523__DEVICE__ float cospif(float __a) { return __nv_cospif(__a); }
1524__DEVICE__ double cyl_bessel_i0(double __a) { return __nv_cyl_bessel_i0(__a); }
1525__DEVICE__ float cyl_bessel_i0f(float __a) { return __nv_cyl_bessel_i0f(__a); }
1526__DEVICE__ double cyl_bessel_i1(double __a) { return __nv_cyl_bessel_i1(__a); }
1527__DEVICE__ float cyl_bessel_i1f(float __a) { return __nv_cyl_bessel_i1f(__a); }
1528__DEVICE__ double erf(double __a) { return __nv_erf(__a); }
1529__DEVICE__ double erfc(double __a) { return __nv_erfc(__a); }
1530__DEVICE__ float erfcf(float __a) { return __nv_erfcf(__a); }
1531__DEVICE__ double erfcinv(double __a) { return __nv_erfcinv(__a); }
1532__DEVICE__ float erfcinvf(float __a) { return __nv_erfcinvf(__a); }
1533__DEVICE__ double erfcx(double __a) { return __nv_erfcx(__a); }
1534__DEVICE__ float erfcxf(float __a) { return __nv_erfcxf(__a); }
1535__DEVICE__ float erff(float __a) { return __nv_erff(__a); }
1536__DEVICE__ double erfinv(double __a) { return __nv_erfinv(__a); }
1537__DEVICE__ float erfinvf(float __a) { return __nv_erfinvf(__a); }
1538__DEVICE__ double exp(double __a) { return __nv_exp(__a); }
1539__DEVICE__ double exp10(double __a) { return __nv_exp10(__a); }
1540__DEVICE__ float exp10f(float __a) { return __nv_exp10f(__a); }
1541__DEVICE__ double exp2(double __a) { return __nv_exp2(__a); }
1542__DEVICE__ float exp2f(float __a) { return __nv_exp2f(__a); }
1543__DEVICE__ float expf(float __a) { return __nv_expf(__a); }
1544__DEVICE__ double expm1(double __a) { return __nv_expm1(__a); }
1545__DEVICE__ float expm1f(float __a) { return __nv_expm1f(__a); }
1546__DEVICE__ float fabsf(float __a) { return __nv_fabsf(__a); }
1547__DEVICE__ double fdim(double __a, double __b) { return __nv_fdim(__a, __b); }
1548__DEVICE__ float fdimf(float __a, float __b) { return __nv_fdimf(__a, __b); }
1549__DEVICE__ double fdivide(double __a, double __b) { return __a / __b; }
1550__DEVICE__ float fdividef(float __a, float __b) {
1551#if __FAST_MATH__ && !__CUDA_PREC_DIV
1552  return __nv_fast_fdividef(__a, __b);
1553#else
1554  return __a / __b;
1555#endif
1556}
1557__DEVICE__ double floor(double __f) { return __nv_floor(__f); }
1558__DEVICE__ float floorf(float __f) { return __nv_floorf(__f); }
1559__DEVICE__ double fma(double __a, double __b, double __c) {
1560  return __nv_fma(__a, __b, __c);
1561}
1562__DEVICE__ float fmaf(float __a, float __b, float __c) {
1563  return __nv_fmaf(__a, __b, __c);
1564}
1565__DEVICE__ double fmax(double __a, double __b) { return __nv_fmax(__a, __b); }
1566__DEVICE__ float fmaxf(float __a, float __b) { return __nv_fmaxf(__a, __b); }
1567__DEVICE__ double fmin(double __a, double __b) { return __nv_fmin(__a, __b); }
1568__DEVICE__ float fminf(float __a, float __b) { return __nv_fminf(__a, __b); }
1569__DEVICE__ double fmod(double __a, double __b) { return __nv_fmod(__a, __b); }
1570__DEVICE__ float fmodf(float __a, float __b) { return __nv_fmodf(__a, __b); }
1571__DEVICE__ double frexp(double __a, int *__b) { return __nv_frexp(__a, __b); }
1572__DEVICE__ float frexpf(float __a, int *__b) { return __nv_frexpf(__a, __b); }
1573__DEVICE__ double hypot(double __a, double __b) { return __nv_hypot(__a, __b); }
1574__DEVICE__ float hypotf(float __a, float __b) { return __nv_hypotf(__a, __b); }
1575__DEVICE__ int ilogb(double __a) { return __nv_ilogb(__a); }
1576__DEVICE__ int ilogbf(float __a) { return __nv_ilogbf(__a); }
1577__DEVICE__ double j0(double __a) { return __nv_j0(__a); }
1578__DEVICE__ float j0f(float __a) { return __nv_j0f(__a); }
1579__DEVICE__ double j1(double __a) { return __nv_j1(__a); }
1580__DEVICE__ float j1f(float __a) { return __nv_j1f(__a); }
1581__DEVICE__ double jn(int __n, double __a) { return __nv_jn(__n, __a); }
1582__DEVICE__ float jnf(int __n, float __a) { return __nv_jnf(__n, __a); }
1583#if defined(__LP64__) || defined(_WIN64)
1584__DEVICE__ long labs(long __a) __NOEXCEPT { return __nv_llabs(__a); };
1585#else
1586__DEVICE__ long labs(long __a) __NOEXCEPT { return __nv_abs(__a); };
1587#endif
1588__DEVICE__ double ldexp(double __a, int __b) { return __nv_ldexp(__a, __b); }
1589__DEVICE__ float ldexpf(float __a, int __b) { return __nv_ldexpf(__a, __b); }
1590__DEVICE__ double lgamma(double __a) { return __nv_lgamma(__a); }
1591__DEVICE__ float lgammaf(float __a) { return __nv_lgammaf(__a); }
1592__DEVICE__ long long llabs(long long __a) __NOEXCEPT { return __nv_llabs(__a); }
1593__DEVICE__ long long llmax(long long __a, long long __b) {
1594  return __nv_llmax(__a, __b);
1595}
1596__DEVICE__ long long llmin(long long __a, long long __b) {
1597  return __nv_llmin(__a, __b);
1598}
1599__DEVICE__ long long llrint(double __a) { return __nv_llrint(__a); }
1600__DEVICE__ long long llrintf(float __a) { return __nv_llrintf(__a); }
1601__DEVICE__ long long llround(double __a) { return __nv_llround(__a); }
1602__DEVICE__ long long llroundf(float __a) { return __nv_llroundf(__a); }
1603__DEVICE__ double log(double __a) { return __nv_log(__a); }
1604__DEVICE__ double log10(double __a) { return __nv_log10(__a); }
1605__DEVICE__ float log10f(float __a) { return __nv_log10f(__a); }
1606__DEVICE__ double log1p(double __a) { return __nv_log1p(__a); }
1607__DEVICE__ float log1pf(float __a) { return __nv_log1pf(__a); }
1608__DEVICE__ double log2(double __a) { return __nv_log2(__a); }
1609__DEVICE__ float log2f(float __a) {
1610  return __FAST_OR_SLOW(__nv_fast_log2f, __nv_log2f)(__a);
1611}
1612__DEVICE__ double logb(double __a) { return __nv_logb(__a); }
1613__DEVICE__ float logbf(float __a) { return __nv_logbf(__a); }
1614__DEVICE__ float logf(float __a) {
1615  return __FAST_OR_SLOW(__nv_fast_logf, __nv_logf)(__a);
1616}
1617#if defined(__LP64__) || defined(_WIN64)
1618__DEVICE__ long lrint(double __a) { return llrint(__a); }
1619__DEVICE__ long lrintf(float __a) { return __float2ll_rn(__a); }
1620__DEVICE__ long lround(double __a) { return llround(__a); }
1621__DEVICE__ long lroundf(float __a) { return llroundf(__a); }
1622#else
1623__DEVICE__ long lrint(double __a) { return (long)rint(__a); }
1624__DEVICE__ long lrintf(float __a) { return __float2int_rn(__a); }
1625__DEVICE__ long lround(double __a) { return round(__a); }
1626__DEVICE__ long lroundf(float __a) { return roundf(__a); }
1627#endif
1628__DEVICE__ int max(int __a, int __b) { return __nv_max(__a, __b); }
1629// These functions shouldn't be declared when including this header
1630// for math function resolution purposes.
1631#ifndef _OPENMP
1632__DEVICE__ void *memcpy(void *__a, const void *__b, size_t __c) {
1633  return __builtin_memcpy(__a, __b, __c);
1634}
1635__DEVICE__ void *memset(void *__a, int __b, size_t __c) {
1636  return __builtin_memset(__a, __b, __c);
1637}
1638#endif
1639__DEVICE__ int min(int __a, int __b) { return __nv_min(__a, __b); }
1640__DEVICE__ double modf(double __a, double *__b) { return __nv_modf(__a, __b); }
1641__DEVICE__ float modff(float __a, float *__b) { return __nv_modff(__a, __b); }
1642__DEVICE__ double nearbyint(double __a) { return __nv_nearbyint(__a); }
1643__DEVICE__ float nearbyintf(float __a) { return __nv_nearbyintf(__a); }
1644__DEVICE__ double nextafter(double __a, double __b) {
1645  return __nv_nextafter(__a, __b);
1646}
1647__DEVICE__ float nextafterf(float __a, float __b) {
1648  return __nv_nextafterf(__a, __b);
1649}
1650__DEVICE__ double norm(int __dim, const double *__t) {
1651  return __nv_norm(__dim, __t);
1652}
1653__DEVICE__ double norm3d(double __a, double __b, double __c) {
1654  return __nv_norm3d(__a, __b, __c);
1655}
1656__DEVICE__ float norm3df(float __a, float __b, float __c) {
1657  return __nv_norm3df(__a, __b, __c);
1658}
1659__DEVICE__ double norm4d(double __a, double __b, double __c, double __d) {
1660  return __nv_norm4d(__a, __b, __c, __d);
1661}
1662__DEVICE__ float norm4df(float __a, float __b, float __c, float __d) {
1663  return __nv_norm4df(__a, __b, __c, __d);
1664}
1665__DEVICE__ double normcdf(double __a) { return __nv_normcdf(__a); }
1666__DEVICE__ float normcdff(float __a) { return __nv_normcdff(__a); }
1667__DEVICE__ double normcdfinv(double __a) { return __nv_normcdfinv(__a); }
1668__DEVICE__ float normcdfinvf(float __a) { return __nv_normcdfinvf(__a); }
1669__DEVICE__ float normf(int __dim, const float *__t) {
1670  return __nv_normf(__dim, __t);
1671}
1672__DEVICE__ double pow(double __a, double __b) { return __nv_pow(__a, __b); }
1673__DEVICE__ float powf(float __a, float __b) { return __nv_powf(__a, __b); }
1674__DEVICE__ double powi(double __a, int __b) { return __nv_powi(__a, __b); }
1675__DEVICE__ float powif(float __a, int __b) { return __nv_powif(__a, __b); }
1676__DEVICE__ double rcbrt(double __a) { return __nv_rcbrt(__a); }
1677__DEVICE__ float rcbrtf(float __a) { return __nv_rcbrtf(__a); }
1678__DEVICE__ double remainder(double __a, double __b) {
1679  return __nv_remainder(__a, __b);
1680}
1681__DEVICE__ float remainderf(float __a, float __b) {
1682  return __nv_remainderf(__a, __b);
1683}
1684__DEVICE__ double remquo(double __a, double __b, int *__c) {
1685  return __nv_remquo(__a, __b, __c);
1686}
1687__DEVICE__ float remquof(float __a, float __b, int *__c) {
1688  return __nv_remquof(__a, __b, __c);
1689}
1690__DEVICE__ double rhypot(double __a, double __b) {
1691  return __nv_rhypot(__a, __b);
1692}
1693__DEVICE__ float rhypotf(float __a, float __b) {
1694  return __nv_rhypotf(__a, __b);
1695}
1696__DEVICE__ double rint(double __a) { return __nv_rint(__a); }
1697__DEVICE__ float rintf(float __a) { return __nv_rintf(__a); }
1698__DEVICE__ double rnorm(int __a, const double *__b) {
1699  return __nv_rnorm(__a, __b);
1700}
1701__DEVICE__ double rnorm3d(double __a, double __b, double __c) {
1702  return __nv_rnorm3d(__a, __b, __c);
1703}
1704__DEVICE__ float rnorm3df(float __a, float __b, float __c) {
1705  return __nv_rnorm3df(__a, __b, __c);
1706}
1707__DEVICE__ double rnorm4d(double __a, double __b, double __c, double __d) {
1708  return __nv_rnorm4d(__a, __b, __c, __d);
1709}
1710__DEVICE__ float rnorm4df(float __a, float __b, float __c, float __d) {
1711  return __nv_rnorm4df(__a, __b, __c, __d);
1712}
1713__DEVICE__ float rnormf(int __dim, const float *__t) {
1714  return __nv_rnormf(__dim, __t);
1715}
1716__DEVICE__ double round(double __a) { return __nv_round(__a); }
1717__DEVICE__ float roundf(float __a) { return __nv_roundf(__a); }
1718__DEVICE__ double rsqrt(double __a) { return __nv_rsqrt(__a); }
1719__DEVICE__ float rsqrtf(float __a) { return __nv_rsqrtf(__a); }
1720__DEVICE__ double scalbn(double __a, int __b) { return __nv_scalbn(__a, __b); }
1721__DEVICE__ float scalbnf(float __a, int __b) { return __nv_scalbnf(__a, __b); }
1722// TODO: remove once variant is supported
1723#ifndef _OPENMP
1724__DEVICE__ double scalbln(double __a, long __b) {
1725  if (__b > INT_MAX)
1726    return __a > 0 ? HUGE_VAL : -HUGE_VAL;
1727  if (__b < INT_MIN)
1728    return __a > 0 ? 0.0 : -0.0;
1729  return scalbn(__a, (int)__b);
1730}
1731__DEVICE__ float scalblnf(float __a, long __b) {
1732  if (__b > INT_MAX)
1733    return __a > 0 ? HUGE_VALF : -HUGE_VALF;
1734  if (__b < INT_MIN)
1735    return __a > 0 ? 0.f : -0.f;
1736  return scalbnf(__a, (int)__b);
1737}
1738#endif
1739__DEVICE__ double sin(double __a) { return __nv_sin(__a); }
1740__DEVICE__ void sincos(double __a, double *__s, double *__c) {
1741  return __nv_sincos(__a, __s, __c);
1742}
1743__DEVICE__ void sincosf(float __a, float *__s, float *__c) {
1744  return __FAST_OR_SLOW(__nv_fast_sincosf, __nv_sincosf)(__a, __s, __c);
1745}
1746__DEVICE__ void sincospi(double __a, double *__s, double *__c) {
1747  return __nv_sincospi(__a, __s, __c);
1748}
1749__DEVICE__ void sincospif(float __a, float *__s, float *__c) {
1750  return __nv_sincospif(__a, __s, __c);
1751}
1752__DEVICE__ float sinf(float __a) {
1753  return __FAST_OR_SLOW(__nv_fast_sinf, __nv_sinf)(__a);
1754}
1755__DEVICE__ double sinh(double __a) { return __nv_sinh(__a); }
1756__DEVICE__ float sinhf(float __a) { return __nv_sinhf(__a); }
1757__DEVICE__ double sinpi(double __a) { return __nv_sinpi(__a); }
1758__DEVICE__ float sinpif(float __a) { return __nv_sinpif(__a); }
1759__DEVICE__ double sqrt(double __a) { return __nv_sqrt(__a); }
1760__DEVICE__ float sqrtf(float __a) { return __nv_sqrtf(__a); }
1761__DEVICE__ double tan(double __a) { return __nv_tan(__a); }
1762__DEVICE__ float tanf(float __a) { return __nv_tanf(__a); }
1763__DEVICE__ double tanh(double __a) { return __nv_tanh(__a); }
1764__DEVICE__ float tanhf(float __a) { return __nv_tanhf(__a); }
1765__DEVICE__ double tgamma(double __a) { return __nv_tgamma(__a); }
1766__DEVICE__ float tgammaf(float __a) { return __nv_tgammaf(__a); }
1767__DEVICE__ double trunc(double __a) { return __nv_trunc(__a); }
1768__DEVICE__ float truncf(float __a) { return __nv_truncf(__a); }
1769__DEVICE__ unsigned long long ullmax(unsigned long long __a,
1770                                     unsigned long long __b) {
1771  return __nv_ullmax(__a, __b);
1772}
1773__DEVICE__ unsigned long long ullmin(unsigned long long __a,
1774                                     unsigned long long __b) {
1775  return __nv_ullmin(__a, __b);
1776}
1777__DEVICE__ unsigned int umax(unsigned int __a, unsigned int __b) {
1778  return __nv_umax(__a, __b);
1779}
1780__DEVICE__ unsigned int umin(unsigned int __a, unsigned int __b) {
1781  return __nv_umin(__a, __b);
1782}
1783__DEVICE__ double y0(double __a) { return __nv_y0(__a); }
1784__DEVICE__ float y0f(float __a) { return __nv_y0f(__a); }
1785__DEVICE__ double y1(double __a) { return __nv_y1(__a); }
1786__DEVICE__ float y1f(float __a) { return __nv_y1f(__a); }
1787__DEVICE__ double yn(int __a, double __b) { return __nv_yn(__a, __b); }
1788__DEVICE__ float ynf(int __a, float __b) { return __nv_ynf(__a, __b); }
1789
1790#undef __NOEXCEPT
1791#pragma pop_macro("__DEVICE__")
1792#pragma pop_macro("__FAST_OR_SLOW")
1793#endif // __CLANG_CUDA_DEVICE_FUNCTIONS_H__
1794