]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Headers/__clang_cuda_device_functions.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Headers / __clang_cuda_device_functions.h
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__