1 /*===---- __clang_cuda_device_functions.h - CUDA runtime support -----------===
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 *===-----------------------------------------------------------------------===
24 #ifndef __CLANG_CUDA_DEVICE_FUNCTIONS_H__
25 #define __CLANG_CUDA_DEVICE_FUNCTIONS_H__
27 #if CUDA_VERSION < 9000
28 #error This file is intended to be used with CUDA-9+ only.
31 // __DEVICE__ is a helper macro with common set of attributes for the wrappers
32 // we implement in this file. We need static in order to avoid emitting unused
33 // functions and __forceinline__ helps inlining these wrappers at -O1.
34 #pragma push_macro("__DEVICE__")
35 #define __DEVICE__ static __device__ __forceinline__
37 // libdevice provides fast low precision and slow full-recision implementations
38 // for some functions. Which one gets selected depends on
39 // __CLANG_CUDA_APPROX_TRANSCENDENTALS__ which gets defined by clang if
40 // -ffast-math or -fcuda-approx-transcendentals are in effect.
41 #pragma push_macro("__FAST_OR_SLOW")
42 #if defined(__CLANG_CUDA_APPROX_TRANSCENDENTALS__)
43 #define __FAST_OR_SLOW(fast, slow) fast
45 #define __FAST_OR_SLOW(fast, slow) slow
48 __DEVICE__ int __all(int __a) { return __nvvm_vote_all(__a); }
49 __DEVICE__ int __any(int __a) { return __nvvm_vote_any(__a); }
50 __DEVICE__ unsigned int __ballot(int __a) { return __nvvm_vote_ballot(__a); }
51 __DEVICE__ unsigned int __brev(unsigned int __a) { return __nv_brev(__a); }
52 __DEVICE__ unsigned long long __brevll(unsigned long long __a) {
53 return __nv_brevll(__a);
55 __DEVICE__ void __brkpt() { asm volatile("brkpt;"); }
56 __DEVICE__ void __brkpt(int __a) { __brkpt(); }
57 __DEVICE__ unsigned int __byte_perm(unsigned int __a, unsigned int __b,
59 return __nv_byte_perm(__a, __b, __c);
61 __DEVICE__ int __clz(int __a) { return __nv_clz(__a); }
62 __DEVICE__ int __clzll(long long __a) { return __nv_clzll(__a); }
63 __DEVICE__ float __cosf(float __a) { return __nv_fast_cosf(__a); }
64 __DEVICE__ double __dAtomicAdd(double *__p, double __v) {
65 return __nvvm_atom_add_gen_d(__p, __v);
67 __DEVICE__ double __dAtomicAdd_block(double *__p, double __v) {
68 return __nvvm_atom_cta_add_gen_d(__p, __v);
70 __DEVICE__ double __dAtomicAdd_system(double *__p, double __v) {
71 return __nvvm_atom_sys_add_gen_d(__p, __v);
73 __DEVICE__ double __dadd_rd(double __a, double __b) {
74 return __nv_dadd_rd(__a, __b);
76 __DEVICE__ double __dadd_rn(double __a, double __b) {
77 return __nv_dadd_rn(__a, __b);
79 __DEVICE__ double __dadd_ru(double __a, double __b) {
80 return __nv_dadd_ru(__a, __b);
82 __DEVICE__ double __dadd_rz(double __a, double __b) {
83 return __nv_dadd_rz(__a, __b);
85 __DEVICE__ double __ddiv_rd(double __a, double __b) {
86 return __nv_ddiv_rd(__a, __b);
88 __DEVICE__ double __ddiv_rn(double __a, double __b) {
89 return __nv_ddiv_rn(__a, __b);
91 __DEVICE__ double __ddiv_ru(double __a, double __b) {
92 return __nv_ddiv_ru(__a, __b);
94 __DEVICE__ double __ddiv_rz(double __a, double __b) {
95 return __nv_ddiv_rz(__a, __b);
97 __DEVICE__ double __dmul_rd(double __a, double __b) {
98 return __nv_dmul_rd(__a, __b);
100 __DEVICE__ double __dmul_rn(double __a, double __b) {
101 return __nv_dmul_rn(__a, __b);
103 __DEVICE__ double __dmul_ru(double __a, double __b) {
104 return __nv_dmul_ru(__a, __b);
106 __DEVICE__ double __dmul_rz(double __a, double __b) {
107 return __nv_dmul_rz(__a, __b);
109 __DEVICE__ float __double2float_rd(double __a) {
110 return __nv_double2float_rd(__a);
112 __DEVICE__ float __double2float_rn(double __a) {
113 return __nv_double2float_rn(__a);
115 __DEVICE__ float __double2float_ru(double __a) {
116 return __nv_double2float_ru(__a);
118 __DEVICE__ float __double2float_rz(double __a) {
119 return __nv_double2float_rz(__a);
121 __DEVICE__ int __double2hiint(double __a) { return __nv_double2hiint(__a); }
122 __DEVICE__ int __double2int_rd(double __a) { return __nv_double2int_rd(__a); }
123 __DEVICE__ int __double2int_rn(double __a) { return __nv_double2int_rn(__a); }
124 __DEVICE__ int __double2int_ru(double __a) { return __nv_double2int_ru(__a); }
125 __DEVICE__ int __double2int_rz(double __a) { return __nv_double2int_rz(__a); }
126 __DEVICE__ long long __double2ll_rd(double __a) {
127 return __nv_double2ll_rd(__a);
129 __DEVICE__ long long __double2ll_rn(double __a) {
130 return __nv_double2ll_rn(__a);
132 __DEVICE__ long long __double2ll_ru(double __a) {
133 return __nv_double2ll_ru(__a);
135 __DEVICE__ long long __double2ll_rz(double __a) {
136 return __nv_double2ll_rz(__a);
138 __DEVICE__ int __double2loint(double __a) { return __nv_double2loint(__a); }
139 __DEVICE__ unsigned int __double2uint_rd(double __a) {
140 return __nv_double2uint_rd(__a);
142 __DEVICE__ unsigned int __double2uint_rn(double __a) {
143 return __nv_double2uint_rn(__a);
145 __DEVICE__ unsigned int __double2uint_ru(double __a) {
146 return __nv_double2uint_ru(__a);
148 __DEVICE__ unsigned int __double2uint_rz(double __a) {
149 return __nv_double2uint_rz(__a);
151 __DEVICE__ unsigned long long __double2ull_rd(double __a) {
152 return __nv_double2ull_rd(__a);
154 __DEVICE__ unsigned long long __double2ull_rn(double __a) {
155 return __nv_double2ull_rn(__a);
157 __DEVICE__ unsigned long long __double2ull_ru(double __a) {
158 return __nv_double2ull_ru(__a);
160 __DEVICE__ unsigned long long __double2ull_rz(double __a) {
161 return __nv_double2ull_rz(__a);
163 __DEVICE__ long long __double_as_longlong(double __a) {
164 return __nv_double_as_longlong(__a);
166 __DEVICE__ double __drcp_rd(double __a) { return __nv_drcp_rd(__a); }
167 __DEVICE__ double __drcp_rn(double __a) { return __nv_drcp_rn(__a); }
168 __DEVICE__ double __drcp_ru(double __a) { return __nv_drcp_ru(__a); }
169 __DEVICE__ double __drcp_rz(double __a) { return __nv_drcp_rz(__a); }
170 __DEVICE__ double __dsqrt_rd(double __a) { return __nv_dsqrt_rd(__a); }
171 __DEVICE__ double __dsqrt_rn(double __a) { return __nv_dsqrt_rn(__a); }
172 __DEVICE__ double __dsqrt_ru(double __a) { return __nv_dsqrt_ru(__a); }
173 __DEVICE__ double __dsqrt_rz(double __a) { return __nv_dsqrt_rz(__a); }
174 __DEVICE__ double __dsub_rd(double __a, double __b) {
175 return __nv_dsub_rd(__a, __b);
177 __DEVICE__ double __dsub_rn(double __a, double __b) {
178 return __nv_dsub_rn(__a, __b);
180 __DEVICE__ double __dsub_ru(double __a, double __b) {
181 return __nv_dsub_ru(__a, __b);
183 __DEVICE__ double __dsub_rz(double __a, double __b) {
184 return __nv_dsub_rz(__a, __b);
186 __DEVICE__ float __exp10f(float __a) { return __nv_fast_exp10f(__a); }
187 __DEVICE__ float __expf(float __a) { return __nv_fast_expf(__a); }
188 __DEVICE__ float __fAtomicAdd(float *__p, float __v) {
189 return __nvvm_atom_add_gen_f(__p, __v);
191 __DEVICE__ float __fAtomicAdd_block(float *__p, float __v) {
192 return __nvvm_atom_cta_add_gen_f(__p, __v);
194 __DEVICE__ float __fAtomicAdd_system(float *__p, float __v) {
195 return __nvvm_atom_sys_add_gen_f(__p, __v);
197 __DEVICE__ float __fAtomicExch(float *__p, float __v) {
198 return __nv_int_as_float(
199 __nvvm_atom_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
201 __DEVICE__ float __fAtomicExch_block(float *__p, float __v) {
202 return __nv_int_as_float(
203 __nvvm_atom_cta_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
205 __DEVICE__ float __fAtomicExch_system(float *__p, float __v) {
206 return __nv_int_as_float(
207 __nvvm_atom_sys_xchg_gen_i((int *)__p, __nv_float_as_int(__v)));
209 __DEVICE__ float __fadd_rd(float __a, float __b) {
210 return __nv_fadd_rd(__a, __b);
212 __DEVICE__ float __fadd_rn(float __a, float __b) {
213 return __nv_fadd_rn(__a, __b);
215 __DEVICE__ float __fadd_ru(float __a, float __b) {
216 return __nv_fadd_ru(__a, __b);
218 __DEVICE__ float __fadd_rz(float __a, float __b) {
219 return __nv_fadd_rz(__a, __b);
221 __DEVICE__ float __fdiv_rd(float __a, float __b) {
222 return __nv_fdiv_rd(__a, __b);
224 __DEVICE__ float __fdiv_rn(float __a, float __b) {
225 return __nv_fdiv_rn(__a, __b);
227 __DEVICE__ float __fdiv_ru(float __a, float __b) {
228 return __nv_fdiv_ru(__a, __b);
230 __DEVICE__ float __fdiv_rz(float __a, float __b) {
231 return __nv_fdiv_rz(__a, __b);
233 __DEVICE__ float __fdividef(float __a, float __b) {
234 return __nv_fast_fdividef(__a, __b);
236 __DEVICE__ int __ffs(int __a) { return __nv_ffs(__a); }
237 __DEVICE__ int __ffsll(long long __a) { return __nv_ffsll(__a); }
238 __DEVICE__ int __finite(double __a) { return __nv_isfinited(__a); }
239 __DEVICE__ int __finitef(float __a) { return __nv_finitef(__a); }
240 __DEVICE__ int __float2int_rd(float __a) { return __nv_float2int_rd(__a); }
241 __DEVICE__ int __float2int_rn(float __a) { return __nv_float2int_rn(__a); }
242 __DEVICE__ int __float2int_ru(float __a) { return __nv_float2int_ru(__a); }
243 __DEVICE__ int __float2int_rz(float __a) { return __nv_float2int_rz(__a); }
244 __DEVICE__ long long __float2ll_rd(float __a) { return __nv_float2ll_rd(__a); }
245 __DEVICE__ long long __float2ll_rn(float __a) { return __nv_float2ll_rn(__a); }
246 __DEVICE__ long long __float2ll_ru(float __a) { return __nv_float2ll_ru(__a); }
247 __DEVICE__ long long __float2ll_rz(float __a) { return __nv_float2ll_rz(__a); }
248 __DEVICE__ unsigned int __float2uint_rd(float __a) {
249 return __nv_float2uint_rd(__a);
251 __DEVICE__ unsigned int __float2uint_rn(float __a) {
252 return __nv_float2uint_rn(__a);
254 __DEVICE__ unsigned int __float2uint_ru(float __a) {
255 return __nv_float2uint_ru(__a);
257 __DEVICE__ unsigned int __float2uint_rz(float __a) {
258 return __nv_float2uint_rz(__a);
260 __DEVICE__ unsigned long long __float2ull_rd(float __a) {
261 return __nv_float2ull_rd(__a);
263 __DEVICE__ unsigned long long __float2ull_rn(float __a) {
264 return __nv_float2ull_rn(__a);
266 __DEVICE__ unsigned long long __float2ull_ru(float __a) {
267 return __nv_float2ull_ru(__a);
269 __DEVICE__ unsigned long long __float2ull_rz(float __a) {
270 return __nv_float2ull_rz(__a);
272 __DEVICE__ int __float_as_int(float __a) { return __nv_float_as_int(__a); }
273 __DEVICE__ unsigned int __float_as_uint(float __a) {
274 return __nv_float_as_uint(__a);
276 __DEVICE__ double __fma_rd(double __a, double __b, double __c) {
277 return __nv_fma_rd(__a, __b, __c);
279 __DEVICE__ double __fma_rn(double __a, double __b, double __c) {
280 return __nv_fma_rn(__a, __b, __c);
282 __DEVICE__ double __fma_ru(double __a, double __b, double __c) {
283 return __nv_fma_ru(__a, __b, __c);
285 __DEVICE__ double __fma_rz(double __a, double __b, double __c) {
286 return __nv_fma_rz(__a, __b, __c);
288 __DEVICE__ float __fmaf_ieee_rd(float __a, float __b, float __c) {
289 return __nv_fmaf_ieee_rd(__a, __b, __c);
291 __DEVICE__ float __fmaf_ieee_rn(float __a, float __b, float __c) {
292 return __nv_fmaf_ieee_rn(__a, __b, __c);
294 __DEVICE__ float __fmaf_ieee_ru(float __a, float __b, float __c) {
295 return __nv_fmaf_ieee_ru(__a, __b, __c);
297 __DEVICE__ float __fmaf_ieee_rz(float __a, float __b, float __c) {
298 return __nv_fmaf_ieee_rz(__a, __b, __c);
300 __DEVICE__ float __fmaf_rd(float __a, float __b, float __c) {
301 return __nv_fmaf_rd(__a, __b, __c);
303 __DEVICE__ float __fmaf_rn(float __a, float __b, float __c) {
304 return __nv_fmaf_rn(__a, __b, __c);
306 __DEVICE__ float __fmaf_ru(float __a, float __b, float __c) {
307 return __nv_fmaf_ru(__a, __b, __c);
309 __DEVICE__ float __fmaf_rz(float __a, float __b, float __c) {
310 return __nv_fmaf_rz(__a, __b, __c);
312 __DEVICE__ float __fmul_rd(float __a, float __b) {
313 return __nv_fmul_rd(__a, __b);
315 __DEVICE__ float __fmul_rn(float __a, float __b) {
316 return __nv_fmul_rn(__a, __b);
318 __DEVICE__ float __fmul_ru(float __a, float __b) {
319 return __nv_fmul_ru(__a, __b);
321 __DEVICE__ float __fmul_rz(float __a, float __b) {
322 return __nv_fmul_rz(__a, __b);
324 __DEVICE__ float __frcp_rd(float __a) { return __nv_frcp_rd(__a); }
325 __DEVICE__ float __frcp_rn(float __a) { return __nv_frcp_rn(__a); }
326 __DEVICE__ float __frcp_ru(float __a) { return __nv_frcp_ru(__a); }
327 __DEVICE__ float __frcp_rz(float __a) { return __nv_frcp_rz(__a); }
328 __DEVICE__ float __frsqrt_rn(float __a) { return __nv_frsqrt_rn(__a); }
329 __DEVICE__ float __fsqrt_rd(float __a) { return __nv_fsqrt_rd(__a); }
330 __DEVICE__ float __fsqrt_rn(float __a) { return __nv_fsqrt_rn(__a); }
331 __DEVICE__ float __fsqrt_ru(float __a) { return __nv_fsqrt_ru(__a); }
332 __DEVICE__ float __fsqrt_rz(float __a) { return __nv_fsqrt_rz(__a); }
333 __DEVICE__ float __fsub_rd(float __a, float __b) {
334 return __nv_fsub_rd(__a, __b);
336 __DEVICE__ float __fsub_rn(float __a, float __b) {
337 return __nv_fsub_rn(__a, __b);
339 __DEVICE__ float __fsub_ru(float __a, float __b) {
340 return __nv_fsub_ru(__a, __b);
342 __DEVICE__ float __fsub_rz(float __a, float __b) {
343 return __nv_fsub_rz(__a, __b);
345 __DEVICE__ int __hadd(int __a, int __b) { return __nv_hadd(__a, __b); }
346 __DEVICE__ double __hiloint2double(int __a, int __b) {
347 return __nv_hiloint2double(__a, __b);
349 __DEVICE__ int __iAtomicAdd(int *__p, int __v) {
350 return __nvvm_atom_add_gen_i(__p, __v);
352 __DEVICE__ int __iAtomicAdd_block(int *__p, int __v) {
353 __nvvm_atom_cta_add_gen_i(__p, __v);
355 __DEVICE__ int __iAtomicAdd_system(int *__p, int __v) {
356 __nvvm_atom_sys_add_gen_i(__p, __v);
358 __DEVICE__ int __iAtomicAnd(int *__p, int __v) {
359 return __nvvm_atom_and_gen_i(__p, __v);
361 __DEVICE__ int __iAtomicAnd_block(int *__p, int __v) {
362 return __nvvm_atom_cta_and_gen_i(__p, __v);
364 __DEVICE__ int __iAtomicAnd_system(int *__p, int __v) {
365 return __nvvm_atom_sys_and_gen_i(__p, __v);
367 __DEVICE__ int __iAtomicCAS(int *__p, int __cmp, int __v) {
368 return __nvvm_atom_cas_gen_i(__p, __cmp, __v);
370 __DEVICE__ int __iAtomicCAS_block(int *__p, int __cmp, int __v) {
371 return __nvvm_atom_cta_cas_gen_i(__p, __cmp, __v);
373 __DEVICE__ int __iAtomicCAS_system(int *__p, int __cmp, int __v) {
374 return __nvvm_atom_sys_cas_gen_i(__p, __cmp, __v);
376 __DEVICE__ int __iAtomicExch(int *__p, int __v) {
377 return __nvvm_atom_xchg_gen_i(__p, __v);
379 __DEVICE__ int __iAtomicExch_block(int *__p, int __v) {
380 return __nvvm_atom_cta_xchg_gen_i(__p, __v);
382 __DEVICE__ int __iAtomicExch_system(int *__p, int __v) {
383 return __nvvm_atom_sys_xchg_gen_i(__p, __v);
385 __DEVICE__ int __iAtomicMax(int *__p, int __v) {
386 return __nvvm_atom_max_gen_i(__p, __v);
388 __DEVICE__ int __iAtomicMax_block(int *__p, int __v) {
389 return __nvvm_atom_cta_max_gen_i(__p, __v);
391 __DEVICE__ int __iAtomicMax_system(int *__p, int __v) {
392 return __nvvm_atom_sys_max_gen_i(__p, __v);
394 __DEVICE__ int __iAtomicMin(int *__p, int __v) {
395 return __nvvm_atom_min_gen_i(__p, __v);
397 __DEVICE__ int __iAtomicMin_block(int *__p, int __v) {
398 return __nvvm_atom_cta_min_gen_i(__p, __v);
400 __DEVICE__ int __iAtomicMin_system(int *__p, int __v) {
401 return __nvvm_atom_sys_min_gen_i(__p, __v);
403 __DEVICE__ int __iAtomicOr(int *__p, int __v) {
404 return __nvvm_atom_or_gen_i(__p, __v);
406 __DEVICE__ int __iAtomicOr_block(int *__p, int __v) {
407 return __nvvm_atom_cta_or_gen_i(__p, __v);
409 __DEVICE__ int __iAtomicOr_system(int *__p, int __v) {
410 return __nvvm_atom_sys_or_gen_i(__p, __v);
412 __DEVICE__ int __iAtomicXor(int *__p, int __v) {
413 return __nvvm_atom_xor_gen_i(__p, __v);
415 __DEVICE__ int __iAtomicXor_block(int *__p, int __v) {
416 return __nvvm_atom_cta_xor_gen_i(__p, __v);
418 __DEVICE__ int __iAtomicXor_system(int *__p, int __v) {
419 return __nvvm_atom_sys_xor_gen_i(__p, __v);
421 __DEVICE__ long long __illAtomicMax(long long *__p, long long __v) {
422 return __nvvm_atom_max_gen_ll(__p, __v);
424 __DEVICE__ long long __illAtomicMax_block(long long *__p, long long __v) {
425 return __nvvm_atom_cta_max_gen_ll(__p, __v);
427 __DEVICE__ long long __illAtomicMax_system(long long *__p, long long __v) {
428 return __nvvm_atom_sys_max_gen_ll(__p, __v);
430 __DEVICE__ long long __illAtomicMin(long long *__p, long long __v) {
431 return __nvvm_atom_min_gen_ll(__p, __v);
433 __DEVICE__ long long __illAtomicMin_block(long long *__p, long long __v) {
434 return __nvvm_atom_cta_min_gen_ll(__p, __v);
436 __DEVICE__ long long __illAtomicMin_system(long long *__p, long long __v) {
437 return __nvvm_atom_sys_min_gen_ll(__p, __v);
439 __DEVICE__ double __int2double_rn(int __a) { return __nv_int2double_rn(__a); }
440 __DEVICE__ float __int2float_rd(int __a) { return __nv_int2float_rd(__a); }
441 __DEVICE__ float __int2float_rn(int __a) { return __nv_int2float_rn(__a); }
442 __DEVICE__ float __int2float_ru(int __a) { return __nv_int2float_ru(__a); }
443 __DEVICE__ float __int2float_rz(int __a) { return __nv_int2float_rz(__a); }
444 __DEVICE__ float __int_as_float(int __a) { return __nv_int_as_float(__a); }
445 __DEVICE__ int __isfinited(double __a) { return __nv_isfinited(__a); }
446 __DEVICE__ int __isinf(double __a) { return __nv_isinfd(__a); }
447 __DEVICE__ int __isinff(float __a) { return __nv_isinff(__a); }
448 __DEVICE__ int __isnan(double __a) { return __nv_isnand(__a); }
449 __DEVICE__ int __isnanf(float __a) { return __nv_isnanf(__a); }
450 __DEVICE__ double __ll2double_rd(long long __a) {
451 return __nv_ll2double_rd(__a);
453 __DEVICE__ double __ll2double_rn(long long __a) {
454 return __nv_ll2double_rn(__a);
456 __DEVICE__ double __ll2double_ru(long long __a) {
457 return __nv_ll2double_ru(__a);
459 __DEVICE__ double __ll2double_rz(long long __a) {
460 return __nv_ll2double_rz(__a);
462 __DEVICE__ float __ll2float_rd(long long __a) { return __nv_ll2float_rd(__a); }
463 __DEVICE__ float __ll2float_rn(long long __a) { return __nv_ll2float_rn(__a); }
464 __DEVICE__ float __ll2float_ru(long long __a) { return __nv_ll2float_ru(__a); }
465 __DEVICE__ float __ll2float_rz(long long __a) { return __nv_ll2float_rz(__a); }
466 __DEVICE__ long long __llAtomicAnd(long long *__p, long long __v) {
467 return __nvvm_atom_and_gen_ll(__p, __v);
469 __DEVICE__ long long __llAtomicAnd_block(long long *__p, long long __v) {
470 return __nvvm_atom_cta_and_gen_ll(__p, __v);
472 __DEVICE__ long long __llAtomicAnd_system(long long *__p, long long __v) {
473 return __nvvm_atom_sys_and_gen_ll(__p, __v);
475 __DEVICE__ long long __llAtomicOr(long long *__p, long long __v) {
476 return __nvvm_atom_or_gen_ll(__p, __v);
478 __DEVICE__ long long __llAtomicOr_block(long long *__p, long long __v) {
479 return __nvvm_atom_cta_or_gen_ll(__p, __v);
481 __DEVICE__ long long __llAtomicOr_system(long long *__p, long long __v) {
482 return __nvvm_atom_sys_or_gen_ll(__p, __v);
484 __DEVICE__ long long __llAtomicXor(long long *__p, long long __v) {
485 return __nvvm_atom_xor_gen_ll(__p, __v);
487 __DEVICE__ long long __llAtomicXor_block(long long *__p, long long __v) {
488 return __nvvm_atom_cta_xor_gen_ll(__p, __v);
490 __DEVICE__ long long __llAtomicXor_system(long long *__p, long long __v) {
491 return __nvvm_atom_sys_xor_gen_ll(__p, __v);
493 __DEVICE__ float __log10f(float __a) { return __nv_fast_log10f(__a); }
494 __DEVICE__ float __log2f(float __a) { return __nv_fast_log2f(__a); }
495 __DEVICE__ float __logf(float __a) { return __nv_fast_logf(__a); }
496 __DEVICE__ double __longlong_as_double(long long __a) {
497 return __nv_longlong_as_double(__a);
499 __DEVICE__ int __mul24(int __a, int __b) { return __nv_mul24(__a, __b); }
500 __DEVICE__ long long __mul64hi(long long __a, long long __b) {
501 return __nv_mul64hi(__a, __b);
503 __DEVICE__ int __mulhi(int __a, int __b) { return __nv_mulhi(__a, __b); }
504 __DEVICE__ unsigned int __pm0(void) { return __nvvm_read_ptx_sreg_pm0(); }
505 __DEVICE__ unsigned int __pm1(void) { return __nvvm_read_ptx_sreg_pm1(); }
506 __DEVICE__ unsigned int __pm2(void) { return __nvvm_read_ptx_sreg_pm2(); }
507 __DEVICE__ unsigned int __pm3(void) { return __nvvm_read_ptx_sreg_pm3(); }
508 __DEVICE__ int __popc(int __a) { return __nv_popc(__a); }
509 __DEVICE__ int __popcll(long long __a) { return __nv_popcll(__a); }
510 __DEVICE__ float __powf(float __a, float __b) {
511 return __nv_fast_powf(__a, __b);
514 // Parameter must have a known integer value.
515 #define __prof_trigger(__a) asm __volatile__("pmevent \t%0;" ::"i"(__a))
516 __DEVICE__ int __rhadd(int __a, int __b) { return __nv_rhadd(__a, __b); }
517 __DEVICE__ unsigned int __sad(int __a, int __b, unsigned int __c) {
518 return __nv_sad(__a, __b, __c);
520 __DEVICE__ float __saturatef(float __a) { return __nv_saturatef(__a); }
521 __DEVICE__ int __signbitd(double __a) { return __nv_signbitd(__a); }
522 __DEVICE__ int __signbitf(float __a) { return __nv_signbitf(__a); }
523 __DEVICE__ void __sincosf(float __a, float *__sptr, float *__cptr) {
524 return __nv_fast_sincosf(__a, __sptr, __cptr);
526 __DEVICE__ float __sinf(float __a) { return __nv_fast_sinf(__a); }
527 __DEVICE__ int __syncthreads_and(int __a) { return __nvvm_bar0_and(__a); }
528 __DEVICE__ int __syncthreads_count(int __a) { return __nvvm_bar0_popc(__a); }
529 __DEVICE__ int __syncthreads_or(int __a) { return __nvvm_bar0_or(__a); }
530 __DEVICE__ float __tanf(float __a) { return __nv_fast_tanf(__a); }
531 __DEVICE__ void __threadfence(void) { __nvvm_membar_gl(); }
532 __DEVICE__ void __threadfence_block(void) { __nvvm_membar_cta(); };
533 __DEVICE__ void __threadfence_system(void) { __nvvm_membar_sys(); };
534 __DEVICE__ void __trap(void) { asm volatile("trap;"); }
535 __DEVICE__ unsigned int __uAtomicAdd(unsigned int *__p, unsigned int __v) {
536 return __nvvm_atom_add_gen_i((int *)__p, __v);
538 __DEVICE__ unsigned int __uAtomicAdd_block(unsigned int *__p,
540 return __nvvm_atom_cta_add_gen_i((int *)__p, __v);
542 __DEVICE__ unsigned int __uAtomicAdd_system(unsigned int *__p,
544 return __nvvm_atom_sys_add_gen_i((int *)__p, __v);
546 __DEVICE__ unsigned int __uAtomicAnd(unsigned int *__p, unsigned int __v) {
547 return __nvvm_atom_and_gen_i((int *)__p, __v);
549 __DEVICE__ unsigned int __uAtomicAnd_block(unsigned int *__p,
551 return __nvvm_atom_cta_and_gen_i((int *)__p, __v);
553 __DEVICE__ unsigned int __uAtomicAnd_system(unsigned int *__p,
555 return __nvvm_atom_sys_and_gen_i((int *)__p, __v);
557 __DEVICE__ unsigned int __uAtomicCAS(unsigned int *__p, unsigned int __cmp,
559 return __nvvm_atom_cas_gen_i((int *)__p, __cmp, __v);
561 __DEVICE__ unsigned int
562 __uAtomicCAS_block(unsigned int *__p, unsigned int __cmp, unsigned int __v) {
563 return __nvvm_atom_cta_cas_gen_i((int *)__p, __cmp, __v);
565 __DEVICE__ unsigned int
566 __uAtomicCAS_system(unsigned int *__p, unsigned int __cmp, unsigned int __v) {
567 return __nvvm_atom_sys_cas_gen_i((int *)__p, __cmp, __v);
569 __DEVICE__ unsigned int __uAtomicDec(unsigned int *__p, unsigned int __v) {
570 return __nvvm_atom_dec_gen_ui(__p, __v);
572 __DEVICE__ unsigned int __uAtomicDec_block(unsigned int *__p,
574 return __nvvm_atom_cta_dec_gen_ui(__p, __v);
576 __DEVICE__ unsigned int __uAtomicDec_system(unsigned int *__p,
578 return __nvvm_atom_sys_dec_gen_ui(__p, __v);
580 __DEVICE__ unsigned int __uAtomicExch(unsigned int *__p, unsigned int __v) {
581 return __nvvm_atom_xchg_gen_i((int *)__p, __v);
583 __DEVICE__ unsigned int __uAtomicExch_block(unsigned int *__p,
585 return __nvvm_atom_cta_xchg_gen_i((int *)__p, __v);
587 __DEVICE__ unsigned int __uAtomicExch_system(unsigned int *__p,
589 return __nvvm_atom_sys_xchg_gen_i((int *)__p, __v);
591 __DEVICE__ unsigned int __uAtomicInc(unsigned int *__p, unsigned int __v) {
592 return __nvvm_atom_inc_gen_ui(__p, __v);
594 __DEVICE__ unsigned int __uAtomicInc_block(unsigned int *__p,
596 return __nvvm_atom_cta_inc_gen_ui(__p, __v);
598 __DEVICE__ unsigned int __uAtomicInc_system(unsigned int *__p,
600 return __nvvm_atom_sys_inc_gen_ui(__p, __v);
602 __DEVICE__ unsigned int __uAtomicMax(unsigned int *__p, unsigned int __v) {
603 return __nvvm_atom_max_gen_ui(__p, __v);
605 __DEVICE__ unsigned int __uAtomicMax_block(unsigned int *__p,
607 return __nvvm_atom_cta_max_gen_ui(__p, __v);
609 __DEVICE__ unsigned int __uAtomicMax_system(unsigned int *__p,
611 return __nvvm_atom_sys_max_gen_ui(__p, __v);
613 __DEVICE__ unsigned int __uAtomicMin(unsigned int *__p, unsigned int __v) {
614 return __nvvm_atom_min_gen_ui(__p, __v);
616 __DEVICE__ unsigned int __uAtomicMin_block(unsigned int *__p,
618 return __nvvm_atom_cta_min_gen_ui(__p, __v);
620 __DEVICE__ unsigned int __uAtomicMin_system(unsigned int *__p,
622 return __nvvm_atom_sys_min_gen_ui(__p, __v);
624 __DEVICE__ unsigned int __uAtomicOr(unsigned int *__p, unsigned int __v) {
625 return __nvvm_atom_or_gen_i((int *)__p, __v);
627 __DEVICE__ unsigned int __uAtomicOr_block(unsigned int *__p, unsigned int __v) {
628 return __nvvm_atom_cta_or_gen_i((int *)__p, __v);
630 __DEVICE__ unsigned int __uAtomicOr_system(unsigned int *__p,
632 return __nvvm_atom_sys_or_gen_i((int *)__p, __v);
634 __DEVICE__ unsigned int __uAtomicXor(unsigned int *__p, unsigned int __v) {
635 return __nvvm_atom_xor_gen_i((int *)__p, __v);
637 __DEVICE__ unsigned int __uAtomicXor_block(unsigned int *__p,
639 return __nvvm_atom_cta_xor_gen_i((int *)__p, __v);
641 __DEVICE__ unsigned int __uAtomicXor_system(unsigned int *__p,
643 return __nvvm_atom_sys_xor_gen_i((int *)__p, __v);
645 __DEVICE__ unsigned int __uhadd(unsigned int __a, unsigned int __b) {
646 return __nv_uhadd(__a, __b);
648 __DEVICE__ double __uint2double_rn(unsigned int __a) {
649 return __nv_uint2double_rn(__a);
651 __DEVICE__ float __uint2float_rd(unsigned int __a) {
652 return __nv_uint2float_rd(__a);
654 __DEVICE__ float __uint2float_rn(unsigned int __a) {
655 return __nv_uint2float_rn(__a);
657 __DEVICE__ float __uint2float_ru(unsigned int __a) {
658 return __nv_uint2float_ru(__a);
660 __DEVICE__ float __uint2float_rz(unsigned int __a) {
661 return __nv_uint2float_rz(__a);
663 __DEVICE__ float __uint_as_float(unsigned int __a) {
664 return __nv_uint_as_float(__a);
666 __DEVICE__ double __ull2double_rd(unsigned long long __a) {
667 return __nv_ull2double_rd(__a);
669 __DEVICE__ double __ull2double_rn(unsigned long long __a) {
670 return __nv_ull2double_rn(__a);
672 __DEVICE__ double __ull2double_ru(unsigned long long __a) {
673 return __nv_ull2double_ru(__a);
675 __DEVICE__ double __ull2double_rz(unsigned long long __a) {
676 return __nv_ull2double_rz(__a);
678 __DEVICE__ float __ull2float_rd(unsigned long long __a) {
679 return __nv_ull2float_rd(__a);
681 __DEVICE__ float __ull2float_rn(unsigned long long __a) {
682 return __nv_ull2float_rn(__a);
684 __DEVICE__ float __ull2float_ru(unsigned long long __a) {
685 return __nv_ull2float_ru(__a);
687 __DEVICE__ float __ull2float_rz(unsigned long long __a) {
688 return __nv_ull2float_rz(__a);
690 __DEVICE__ unsigned long long __ullAtomicAdd(unsigned long long *__p,
691 unsigned long long __v) {
692 return __nvvm_atom_add_gen_ll((long long *)__p, __v);
694 __DEVICE__ unsigned long long __ullAtomicAdd_block(unsigned long long *__p,
695 unsigned long long __v) {
696 return __nvvm_atom_cta_add_gen_ll((long long *)__p, __v);
698 __DEVICE__ unsigned long long __ullAtomicAdd_system(unsigned long long *__p,
699 unsigned long long __v) {
700 return __nvvm_atom_sys_add_gen_ll((long long *)__p, __v);
702 __DEVICE__ unsigned long long __ullAtomicAnd(unsigned long long *__p,
703 unsigned long long __v) {
704 return __nvvm_atom_and_gen_ll((long long *)__p, __v);
706 __DEVICE__ unsigned long long __ullAtomicAnd_block(unsigned long long *__p,
707 unsigned long long __v) {
708 return __nvvm_atom_cta_and_gen_ll((long long *)__p, __v);
710 __DEVICE__ unsigned long long __ullAtomicAnd_system(unsigned long long *__p,
711 unsigned long long __v) {
712 return __nvvm_atom_sys_and_gen_ll((long long *)__p, __v);
714 __DEVICE__ unsigned long long __ullAtomicCAS(unsigned long long *__p,
715 unsigned long long __cmp,
716 unsigned long long __v) {
717 return __nvvm_atom_cas_gen_ll((long long *)__p, __cmp, __v);
719 __DEVICE__ unsigned long long __ullAtomicCAS_block(unsigned long long *__p,
720 unsigned long long __cmp,
721 unsigned long long __v) {
722 return __nvvm_atom_cta_cas_gen_ll((long long *)__p, __cmp, __v);
724 __DEVICE__ unsigned long long __ullAtomicCAS_system(unsigned long long *__p,
725 unsigned long long __cmp,
726 unsigned long long __v) {
727 return __nvvm_atom_sys_cas_gen_ll((long long *)__p, __cmp, __v);
729 __DEVICE__ unsigned long long __ullAtomicExch(unsigned long long *__p,
730 unsigned long long __v) {
731 return __nvvm_atom_xchg_gen_ll((long long *)__p, __v);
733 __DEVICE__ unsigned long long __ullAtomicExch_block(unsigned long long *__p,
734 unsigned long long __v) {
735 return __nvvm_atom_cta_xchg_gen_ll((long long *)__p, __v);
737 __DEVICE__ unsigned long long __ullAtomicExch_system(unsigned long long *__p,
738 unsigned long long __v) {
739 return __nvvm_atom_sys_xchg_gen_ll((long long *)__p, __v);
741 __DEVICE__ unsigned long long __ullAtomicMax(unsigned long long *__p,
742 unsigned long long __v) {
743 return __nvvm_atom_max_gen_ull(__p, __v);
745 __DEVICE__ unsigned long long __ullAtomicMax_block(unsigned long long *__p,
746 unsigned long long __v) {
747 return __nvvm_atom_cta_max_gen_ull(__p, __v);
749 __DEVICE__ unsigned long long __ullAtomicMax_system(unsigned long long *__p,
750 unsigned long long __v) {
751 return __nvvm_atom_sys_max_gen_ull(__p, __v);
753 __DEVICE__ unsigned long long __ullAtomicMin(unsigned long long *__p,
754 unsigned long long __v) {
755 return __nvvm_atom_min_gen_ull(__p, __v);
757 __DEVICE__ unsigned long long __ullAtomicMin_block(unsigned long long *__p,
758 unsigned long long __v) {
759 return __nvvm_atom_cta_min_gen_ull(__p, __v);
761 __DEVICE__ unsigned long long __ullAtomicMin_system(unsigned long long *__p,
762 unsigned long long __v) {
763 return __nvvm_atom_sys_min_gen_ull(__p, __v);
765 __DEVICE__ unsigned long long __ullAtomicOr(unsigned long long *__p,
766 unsigned long long __v) {
767 return __nvvm_atom_or_gen_ll((long long *)__p, __v);
769 __DEVICE__ unsigned long long __ullAtomicOr_block(unsigned long long *__p,
770 unsigned long long __v) {
771 return __nvvm_atom_cta_or_gen_ll((long long *)__p, __v);
773 __DEVICE__ unsigned long long __ullAtomicOr_system(unsigned long long *__p,
774 unsigned long long __v) {
775 return __nvvm_atom_sys_or_gen_ll((long long *)__p, __v);
777 __DEVICE__ unsigned long long __ullAtomicXor(unsigned long long *__p,
778 unsigned long long __v) {
779 return __nvvm_atom_xor_gen_ll((long long *)__p, __v);
781 __DEVICE__ unsigned long long __ullAtomicXor_block(unsigned long long *__p,
782 unsigned long long __v) {
783 return __nvvm_atom_cta_xor_gen_ll((long long *)__p, __v);
785 __DEVICE__ unsigned long long __ullAtomicXor_system(unsigned long long *__p,
786 unsigned long long __v) {
787 return __nvvm_atom_sys_xor_gen_ll((long long *)__p, __v);
789 __DEVICE__ unsigned int __umul24(unsigned int __a, unsigned int __b) {
790 return __nv_umul24(__a, __b);
792 __DEVICE__ unsigned long long __umul64hi(unsigned long long __a,
793 unsigned long long __b) {
794 return __nv_umul64hi(__a, __b);
796 __DEVICE__ unsigned int __umulhi(unsigned int __a, unsigned int __b) {
797 return __nv_umulhi(__a, __b);
799 __DEVICE__ unsigned int __urhadd(unsigned int __a, unsigned int __b) {
800 return __nv_urhadd(__a, __b);
802 __DEVICE__ unsigned int __usad(unsigned int __a, unsigned int __b,
804 return __nv_usad(__a, __b, __c);
807 #if CUDA_VERSION >= 9000 && CUDA_VERSION < 9020
808 __DEVICE__ unsigned int __vabs2(unsigned int __a) { return __nv_vabs2(__a); }
809 __DEVICE__ unsigned int __vabs4(unsigned int __a) { return __nv_vabs4(__a); }
810 __DEVICE__ unsigned int __vabsdiffs2(unsigned int __a, unsigned int __b) {
811 return __nv_vabsdiffs2(__a, __b);
813 __DEVICE__ unsigned int __vabsdiffs4(unsigned int __a, unsigned int __b) {
814 return __nv_vabsdiffs4(__a, __b);
816 __DEVICE__ unsigned int __vabsdiffu2(unsigned int __a, unsigned int __b) {
817 return __nv_vabsdiffu2(__a, __b);
819 __DEVICE__ unsigned int __vabsdiffu4(unsigned int __a, unsigned int __b) {
820 return __nv_vabsdiffu4(__a, __b);
822 __DEVICE__ unsigned int __vabsss2(unsigned int __a) {
823 return __nv_vabsss2(__a);
825 __DEVICE__ unsigned int __vabsss4(unsigned int __a) {
826 return __nv_vabsss4(__a);
828 __DEVICE__ unsigned int __vadd2(unsigned int __a, unsigned int __b) {
829 return __nv_vadd2(__a, __b);
831 __DEVICE__ unsigned int __vadd4(unsigned int __a, unsigned int __b) {
832 return __nv_vadd4(__a, __b);
834 __DEVICE__ unsigned int __vaddss2(unsigned int __a, unsigned int __b) {
835 return __nv_vaddss2(__a, __b);
837 __DEVICE__ unsigned int __vaddss4(unsigned int __a, unsigned int __b) {
838 return __nv_vaddss4(__a, __b);
840 __DEVICE__ unsigned int __vaddus2(unsigned int __a, unsigned int __b) {
841 return __nv_vaddus2(__a, __b);
843 __DEVICE__ unsigned int __vaddus4(unsigned int __a, unsigned int __b) {
844 return __nv_vaddus4(__a, __b);
846 __DEVICE__ unsigned int __vavgs2(unsigned int __a, unsigned int __b) {
847 return __nv_vavgs2(__a, __b);
849 __DEVICE__ unsigned int __vavgs4(unsigned int __a, unsigned int __b) {
850 return __nv_vavgs4(__a, __b);
852 __DEVICE__ unsigned int __vavgu2(unsigned int __a, unsigned int __b) {
853 return __nv_vavgu2(__a, __b);
855 __DEVICE__ unsigned int __vavgu4(unsigned int __a, unsigned int __b) {
856 return __nv_vavgu4(__a, __b);
858 __DEVICE__ unsigned int __vcmpeq2(unsigned int __a, unsigned int __b) {
859 return __nv_vcmpeq2(__a, __b);
861 __DEVICE__ unsigned int __vcmpeq4(unsigned int __a, unsigned int __b) {
862 return __nv_vcmpeq4(__a, __b);
864 __DEVICE__ unsigned int __vcmpges2(unsigned int __a, unsigned int __b) {
865 return __nv_vcmpges2(__a, __b);
867 __DEVICE__ unsigned int __vcmpges4(unsigned int __a, unsigned int __b) {
868 return __nv_vcmpges4(__a, __b);
870 __DEVICE__ unsigned int __vcmpgeu2(unsigned int __a, unsigned int __b) {
871 return __nv_vcmpgeu2(__a, __b);
873 __DEVICE__ unsigned int __vcmpgeu4(unsigned int __a, unsigned int __b) {
874 return __nv_vcmpgeu4(__a, __b);
876 __DEVICE__ unsigned int __vcmpgts2(unsigned int __a, unsigned int __b) {
877 return __nv_vcmpgts2(__a, __b);
879 __DEVICE__ unsigned int __vcmpgts4(unsigned int __a, unsigned int __b) {
880 return __nv_vcmpgts4(__a, __b);
882 __DEVICE__ unsigned int __vcmpgtu2(unsigned int __a, unsigned int __b) {
883 return __nv_vcmpgtu2(__a, __b);
885 __DEVICE__ unsigned int __vcmpgtu4(unsigned int __a, unsigned int __b) {
886 return __nv_vcmpgtu4(__a, __b);
888 __DEVICE__ unsigned int __vcmples2(unsigned int __a, unsigned int __b) {
889 return __nv_vcmples2(__a, __b);
891 __DEVICE__ unsigned int __vcmples4(unsigned int __a, unsigned int __b) {
892 return __nv_vcmples4(__a, __b);
894 __DEVICE__ unsigned int __vcmpleu2(unsigned int __a, unsigned int __b) {
895 return __nv_vcmpleu2(__a, __b);
897 __DEVICE__ unsigned int __vcmpleu4(unsigned int __a, unsigned int __b) {
898 return __nv_vcmpleu4(__a, __b);
900 __DEVICE__ unsigned int __vcmplts2(unsigned int __a, unsigned int __b) {
901 return __nv_vcmplts2(__a, __b);
903 __DEVICE__ unsigned int __vcmplts4(unsigned int __a, unsigned int __b) {
904 return __nv_vcmplts4(__a, __b);
906 __DEVICE__ unsigned int __vcmpltu2(unsigned int __a, unsigned int __b) {
907 return __nv_vcmpltu2(__a, __b);
909 __DEVICE__ unsigned int __vcmpltu4(unsigned int __a, unsigned int __b) {
910 return __nv_vcmpltu4(__a, __b);
912 __DEVICE__ unsigned int __vcmpne2(unsigned int __a, unsigned int __b) {
913 return __nv_vcmpne2(__a, __b);
915 __DEVICE__ unsigned int __vcmpne4(unsigned int __a, unsigned int __b) {
916 return __nv_vcmpne4(__a, __b);
918 __DEVICE__ unsigned int __vhaddu2(unsigned int __a, unsigned int __b) {
919 return __nv_vhaddu2(__a, __b);
921 __DEVICE__ unsigned int __vhaddu4(unsigned int __a, unsigned int __b) {
922 return __nv_vhaddu4(__a, __b);
924 __DEVICE__ unsigned int __vmaxs2(unsigned int __a, unsigned int __b) {
925 return __nv_vmaxs2(__a, __b);
927 __DEVICE__ unsigned int __vmaxs4(unsigned int __a, unsigned int __b) {
928 return __nv_vmaxs4(__a, __b);
930 __DEVICE__ unsigned int __vmaxu2(unsigned int __a, unsigned int __b) {
931 return __nv_vmaxu2(__a, __b);
933 __DEVICE__ unsigned int __vmaxu4(unsigned int __a, unsigned int __b) {
934 return __nv_vmaxu4(__a, __b);
936 __DEVICE__ unsigned int __vmins2(unsigned int __a, unsigned int __b) {
937 return __nv_vmins2(__a, __b);
939 __DEVICE__ unsigned int __vmins4(unsigned int __a, unsigned int __b) {
940 return __nv_vmins4(__a, __b);
942 __DEVICE__ unsigned int __vminu2(unsigned int __a, unsigned int __b) {
943 return __nv_vminu2(__a, __b);
945 __DEVICE__ unsigned int __vminu4(unsigned int __a, unsigned int __b) {
946 return __nv_vminu4(__a, __b);
948 __DEVICE__ unsigned int __vneg2(unsigned int __a) { return __nv_vneg2(__a); }
949 __DEVICE__ unsigned int __vneg4(unsigned int __a) { return __nv_vneg4(__a); }
950 __DEVICE__ unsigned int __vnegss2(unsigned int __a) {
951 return __nv_vnegss2(__a);
953 __DEVICE__ unsigned int __vnegss4(unsigned int __a) {
954 return __nv_vnegss4(__a);
956 __DEVICE__ unsigned int __vsads2(unsigned int __a, unsigned int __b) {
957 return __nv_vsads2(__a, __b);
959 __DEVICE__ unsigned int __vsads4(unsigned int __a, unsigned int __b) {
960 return __nv_vsads4(__a, __b);
962 __DEVICE__ unsigned int __vsadu2(unsigned int __a, unsigned int __b) {
963 return __nv_vsadu2(__a, __b);
965 __DEVICE__ unsigned int __vsadu4(unsigned int __a, unsigned int __b) {
966 return __nv_vsadu4(__a, __b);
968 __DEVICE__ unsigned int __vseteq2(unsigned int __a, unsigned int __b) {
969 return __nv_vseteq2(__a, __b);
971 __DEVICE__ unsigned int __vseteq4(unsigned int __a, unsigned int __b) {
972 return __nv_vseteq4(__a, __b);
974 __DEVICE__ unsigned int __vsetges2(unsigned int __a, unsigned int __b) {
975 return __nv_vsetges2(__a, __b);
977 __DEVICE__ unsigned int __vsetges4(unsigned int __a, unsigned int __b) {
978 return __nv_vsetges4(__a, __b);
980 __DEVICE__ unsigned int __vsetgeu2(unsigned int __a, unsigned int __b) {
981 return __nv_vsetgeu2(__a, __b);
983 __DEVICE__ unsigned int __vsetgeu4(unsigned int __a, unsigned int __b) {
984 return __nv_vsetgeu4(__a, __b);
986 __DEVICE__ unsigned int __vsetgts2(unsigned int __a, unsigned int __b) {
987 return __nv_vsetgts2(__a, __b);
989 __DEVICE__ unsigned int __vsetgts4(unsigned int __a, unsigned int __b) {
990 return __nv_vsetgts4(__a, __b);
992 __DEVICE__ unsigned int __vsetgtu2(unsigned int __a, unsigned int __b) {
993 return __nv_vsetgtu2(__a, __b);
995 __DEVICE__ unsigned int __vsetgtu4(unsigned int __a, unsigned int __b) {
996 return __nv_vsetgtu4(__a, __b);
998 __DEVICE__ unsigned int __vsetles2(unsigned int __a, unsigned int __b) {
999 return __nv_vsetles2(__a, __b);
1001 __DEVICE__ unsigned int __vsetles4(unsigned int __a, unsigned int __b) {
1002 return __nv_vsetles4(__a, __b);
1004 __DEVICE__ unsigned int __vsetleu2(unsigned int __a, unsigned int __b) {
1005 return __nv_vsetleu2(__a, __b);
1007 __DEVICE__ unsigned int __vsetleu4(unsigned int __a, unsigned int __b) {
1008 return __nv_vsetleu4(__a, __b);
1010 __DEVICE__ unsigned int __vsetlts2(unsigned int __a, unsigned int __b) {
1011 return __nv_vsetlts2(__a, __b);
1013 __DEVICE__ unsigned int __vsetlts4(unsigned int __a, unsigned int __b) {
1014 return __nv_vsetlts4(__a, __b);
1016 __DEVICE__ unsigned int __vsetltu2(unsigned int __a, unsigned int __b) {
1017 return __nv_vsetltu2(__a, __b);
1019 __DEVICE__ unsigned int __vsetltu4(unsigned int __a, unsigned int __b) {
1020 return __nv_vsetltu4(__a, __b);
1022 __DEVICE__ unsigned int __vsetne2(unsigned int __a, unsigned int __b) {
1023 return __nv_vsetne2(__a, __b);
1025 __DEVICE__ unsigned int __vsetne4(unsigned int __a, unsigned int __b) {
1026 return __nv_vsetne4(__a, __b);
1028 __DEVICE__ unsigned int __vsub2(unsigned int __a, unsigned int __b) {
1029 return __nv_vsub2(__a, __b);
1031 __DEVICE__ unsigned int __vsub4(unsigned int __a, unsigned int __b) {
1032 return __nv_vsub4(__a, __b);
1034 __DEVICE__ unsigned int __vsubss2(unsigned int __a, unsigned int __b) {
1035 return __nv_vsubss2(__a, __b);
1037 __DEVICE__ unsigned int __vsubss4(unsigned int __a, unsigned int __b) {
1038 return __nv_vsubss4(__a, __b);
1040 __DEVICE__ unsigned int __vsubus2(unsigned int __a, unsigned int __b) {
1041 return __nv_vsubus2(__a, __b);
1043 __DEVICE__ unsigned int __vsubus4(unsigned int __a, unsigned int __b) {
1044 return __nv_vsubus4(__a, __b);
1046 #else // CUDA_VERSION >= 9020
1047 // CUDA no longer provides inline assembly (or bitcode) implementation of these
1048 // functions, so we have to reimplment them. The implementation is naive and is
1049 // not optimized for performance.
1051 // Helper function to convert N-bit boolean subfields into all-0 or all-1.
1052 // E.g. __bool2mask(0x01000100,8) -> 0xff00ff00
1053 // __bool2mask(0x00010000,16) -> 0xffff0000
1054 __DEVICE__ unsigned int __bool2mask(unsigned int __a, int shift) {
1055 return (__a << shift) - __a;
1057 __DEVICE__ unsigned int __vabs2(unsigned int __a) {
1059 asm("vabsdiff2.s32.s32.s32 %0,%1,%2,%3;"
1061 : "r"(__a), "r"(0), "r"(0));
1064 __DEVICE__ unsigned int __vabs4(unsigned int __a) {
1066 asm("vabsdiff4.s32.s32.s32 %0,%1,%2,%3;"
1068 : "r"(__a), "r"(0), "r"(0));
1071 __DEVICE__ unsigned int __vabsdiffs2(unsigned int __a, unsigned int __b) {
1073 asm("vabsdiff2.s32.s32.s32 %0,%1,%2,%3;"
1075 : "r"(__a), "r"(__b), "r"(0));
1079 __DEVICE__ unsigned int __vabsdiffs4(unsigned int __a, unsigned int __b) {
1081 asm("vabsdiff4.s32.s32.s32 %0,%1,%2,%3;"
1083 : "r"(__a), "r"(__b), "r"(0));
1086 __DEVICE__ unsigned int __vabsdiffu2(unsigned int __a, unsigned int __b) {
1088 asm("vabsdiff2.u32.u32.u32 %0,%1,%2,%3;"
1090 : "r"(__a), "r"(__b), "r"(0));
1093 __DEVICE__ unsigned int __vabsdiffu4(unsigned int __a, unsigned int __b) {
1095 asm("vabsdiff4.u32.u32.u32 %0,%1,%2,%3;"
1097 : "r"(__a), "r"(__b), "r"(0));
1100 __DEVICE__ unsigned int __vabsss2(unsigned int __a) {
1102 asm("vabsdiff2.s32.s32.s32.sat %0,%1,%2,%3;"
1104 : "r"(__a), "r"(0), "r"(0));
1107 __DEVICE__ unsigned int __vabsss4(unsigned int __a) {
1109 asm("vabsdiff4.s32.s32.s32.sat %0,%1,%2,%3;"
1111 : "r"(__a), "r"(0), "r"(0));
1114 __DEVICE__ unsigned int __vadd2(unsigned int __a, unsigned int __b) {
1116 asm("vadd2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1119 __DEVICE__ unsigned int __vadd4(unsigned int __a, unsigned int __b) {
1121 asm("vadd4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1124 __DEVICE__ unsigned int __vaddss2(unsigned int __a, unsigned int __b) {
1126 asm("vadd2.s32.s32.s32.sat %0,%1,%2,%3;"
1128 : "r"(__a), "r"(__b), "r"(0));
1131 __DEVICE__ unsigned int __vaddss4(unsigned int __a, unsigned int __b) {
1133 asm("vadd4.s32.s32.s32.sat %0,%1,%2,%3;"
1135 : "r"(__a), "r"(__b), "r"(0));
1138 __DEVICE__ unsigned int __vaddus2(unsigned int __a, unsigned int __b) {
1140 asm("vadd2.u32.u32.u32.sat %0,%1,%2,%3;"
1142 : "r"(__a), "r"(__b), "r"(0));
1145 __DEVICE__ unsigned int __vaddus4(unsigned int __a, unsigned int __b) {
1147 asm("vadd4.u32.u32.u32.sat %0,%1,%2,%3;"
1149 : "r"(__a), "r"(__b), "r"(0));
1152 __DEVICE__ unsigned int __vavgs2(unsigned int __a, unsigned int __b) {
1154 asm("vavrg2.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1157 __DEVICE__ unsigned int __vavgs4(unsigned int __a, unsigned int __b) {
1159 asm("vavrg4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1162 __DEVICE__ unsigned int __vavgu2(unsigned int __a, unsigned int __b) {
1164 asm("vavrg2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1167 __DEVICE__ unsigned int __vavgu4(unsigned int __a, unsigned int __b) {
1169 asm("vavrg4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1172 __DEVICE__ unsigned int __vseteq2(unsigned int __a, unsigned int __b) {
1174 asm("vset2.u32.u32.eq %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1177 __DEVICE__ unsigned int __vcmpeq2(unsigned int __a, unsigned int __b) {
1178 return __bool2mask(__vseteq2(__a, __b), 16);
1180 __DEVICE__ unsigned int __vseteq4(unsigned int __a, unsigned int __b) {
1182 asm("vset4.u32.u32.eq %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1185 __DEVICE__ unsigned int __vcmpeq4(unsigned int __a, unsigned int __b) {
1186 return __bool2mask(__vseteq4(__a, __b), 8);
1188 __DEVICE__ unsigned int __vsetges2(unsigned int __a, unsigned int __b) {
1190 asm("vset2.s32.s32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1193 __DEVICE__ unsigned int __vcmpges2(unsigned int __a, unsigned int __b) {
1194 return __bool2mask(__vsetges2(__a, __b), 16);
1196 __DEVICE__ unsigned int __vsetges4(unsigned int __a, unsigned int __b) {
1198 asm("vset4.s32.s32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1201 __DEVICE__ unsigned int __vcmpges4(unsigned int __a, unsigned int __b) {
1202 return __bool2mask(__vsetges4(__a, __b), 8);
1204 __DEVICE__ unsigned int __vsetgeu2(unsigned int __a, unsigned int __b) {
1206 asm("vset2.u32.u32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1209 __DEVICE__ unsigned int __vcmpgeu2(unsigned int __a, unsigned int __b) {
1210 return __bool2mask(__vsetgeu2(__a, __b), 16);
1212 __DEVICE__ unsigned int __vsetgeu4(unsigned int __a, unsigned int __b) {
1214 asm("vset4.u32.u32.ge %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1217 __DEVICE__ unsigned int __vcmpgeu4(unsigned int __a, unsigned int __b) {
1218 return __bool2mask(__vsetgeu4(__a, __b), 8);
1220 __DEVICE__ unsigned int __vsetgts2(unsigned int __a, unsigned int __b) {
1222 asm("vset2.s32.s32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1225 __DEVICE__ unsigned int __vcmpgts2(unsigned int __a, unsigned int __b) {
1226 return __bool2mask(__vsetgts2(__a, __b), 16);
1228 __DEVICE__ unsigned int __vsetgts4(unsigned int __a, unsigned int __b) {
1230 asm("vset4.s32.s32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1233 __DEVICE__ unsigned int __vcmpgts4(unsigned int __a, unsigned int __b) {
1234 return __bool2mask(__vsetgts4(__a, __b), 8);
1236 __DEVICE__ unsigned int __vsetgtu2(unsigned int __a, unsigned int __b) {
1238 asm("vset2.u32.u32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1241 __DEVICE__ unsigned int __vcmpgtu2(unsigned int __a, unsigned int __b) {
1242 return __bool2mask(__vsetgtu2(__a, __b), 16);
1244 __DEVICE__ unsigned int __vsetgtu4(unsigned int __a, unsigned int __b) {
1246 asm("vset4.u32.u32.gt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1249 __DEVICE__ unsigned int __vcmpgtu4(unsigned int __a, unsigned int __b) {
1250 return __bool2mask(__vsetgtu4(__a, __b), 8);
1252 __DEVICE__ unsigned int __vsetles2(unsigned int __a, unsigned int __b) {
1254 asm("vset2.s32.s32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1257 __DEVICE__ unsigned int __vcmples2(unsigned int __a, unsigned int __b) {
1258 return __bool2mask(__vsetles2(__a, __b), 16);
1260 __DEVICE__ unsigned int __vsetles4(unsigned int __a, unsigned int __b) {
1262 asm("vset4.s32.s32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1265 __DEVICE__ unsigned int __vcmples4(unsigned int __a, unsigned int __b) {
1266 return __bool2mask(__vsetles4(__a, __b), 8);
1268 __DEVICE__ unsigned int __vsetleu2(unsigned int __a, unsigned int __b) {
1270 asm("vset2.u32.u32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1273 __DEVICE__ unsigned int __vcmpleu2(unsigned int __a, unsigned int __b) {
1274 return __bool2mask(__vsetleu2(__a, __b), 16);
1276 __DEVICE__ unsigned int __vsetleu4(unsigned int __a, unsigned int __b) {
1278 asm("vset4.u32.u32.le %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1281 __DEVICE__ unsigned int __vcmpleu4(unsigned int __a, unsigned int __b) {
1282 return __bool2mask(__vsetleu4(__a, __b), 8);
1284 __DEVICE__ unsigned int __vsetlts2(unsigned int __a, unsigned int __b) {
1286 asm("vset2.s32.s32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1289 __DEVICE__ unsigned int __vcmplts2(unsigned int __a, unsigned int __b) {
1290 return __bool2mask(__vsetlts2(__a, __b), 16);
1292 __DEVICE__ unsigned int __vsetlts4(unsigned int __a, unsigned int __b) {
1294 asm("vset4.s32.s32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1297 __DEVICE__ unsigned int __vcmplts4(unsigned int __a, unsigned int __b) {
1298 return __bool2mask(__vsetlts4(__a, __b), 8);
1300 __DEVICE__ unsigned int __vsetltu2(unsigned int __a, unsigned int __b) {
1302 asm("vset2.u32.u32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1305 __DEVICE__ unsigned int __vcmpltu2(unsigned int __a, unsigned int __b) {
1306 return __bool2mask(__vsetltu2(__a, __b), 16);
1308 __DEVICE__ unsigned int __vsetltu4(unsigned int __a, unsigned int __b) {
1310 asm("vset4.u32.u32.lt %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1313 __DEVICE__ unsigned int __vcmpltu4(unsigned int __a, unsigned int __b) {
1314 return __bool2mask(__vsetltu4(__a, __b), 8);
1316 __DEVICE__ unsigned int __vsetne2(unsigned int __a, unsigned int __b) {
1318 asm("vset2.u32.u32.ne %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1321 __DEVICE__ unsigned int __vcmpne2(unsigned int __a, unsigned int __b) {
1322 return __bool2mask(__vsetne2(__a, __b), 16);
1324 __DEVICE__ unsigned int __vsetne4(unsigned int __a, unsigned int __b) {
1326 asm("vset4.u32.u32.ne %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1329 __DEVICE__ unsigned int __vcmpne4(unsigned int __a, unsigned int __b) {
1330 return __bool2mask(__vsetne4(__a, __b), 8);
1333 // Based on ITEM 23 in AIM-239: http://dspace.mit.edu/handle/1721.1/6086
1334 // (a & b) + (a | b) = a + b = (a ^ b) + 2 * (a & b) =>
1335 // (a + b) / 2 = ((a ^ b) >> 1) + (a & b)
1336 // To operate on multiple sub-elements we need to make sure to mask out bits
1337 // that crossed over into adjacent elements during the shift.
1338 __DEVICE__ unsigned int __vhaddu2(unsigned int __a, unsigned int __b) {
1339 return (((__a ^ __b) >> 1) & ~0x80008000u) + (__a & __b);
1341 __DEVICE__ unsigned int __vhaddu4(unsigned int __a, unsigned int __b) {
1342 return (((__a ^ __b) >> 1) & ~0x80808080u) + (__a & __b);
1345 __DEVICE__ unsigned int __vmaxs2(unsigned int __a, unsigned int __b) {
1347 if ((__a & 0x8000) && (__b & 0x8000)) {
1348 // Work around a bug in ptxas which produces invalid result if low element
1350 unsigned mask = __vcmpgts2(__a, __b);
1351 r = (__a & mask) | (__b & ~mask);
1353 asm("vmax2.s32.s32.s32 %0,%1,%2,%3;"
1355 : "r"(__a), "r"(__b), "r"(0));
1359 __DEVICE__ unsigned int __vmaxs4(unsigned int __a, unsigned int __b) {
1361 asm("vmax4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1364 __DEVICE__ unsigned int __vmaxu2(unsigned int __a, unsigned int __b) {
1366 asm("vmax2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1369 __DEVICE__ unsigned int __vmaxu4(unsigned int __a, unsigned int __b) {
1371 asm("vmax4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1374 __DEVICE__ unsigned int __vmins2(unsigned int __a, unsigned int __b) {
1376 asm("vmin2.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1379 __DEVICE__ unsigned int __vmins4(unsigned int __a, unsigned int __b) {
1381 asm("vmin4.s32.s32.s32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1384 __DEVICE__ unsigned int __vminu2(unsigned int __a, unsigned int __b) {
1386 asm("vmin2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1389 __DEVICE__ unsigned int __vminu4(unsigned int __a, unsigned int __b) {
1391 asm("vmin4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1394 __DEVICE__ unsigned int __vsads2(unsigned int __a, unsigned int __b) {
1396 asm("vabsdiff2.s32.s32.s32.add %0,%1,%2,%3;"
1398 : "r"(__a), "r"(__b), "r"(0));
1401 __DEVICE__ unsigned int __vsads4(unsigned int __a, unsigned int __b) {
1403 asm("vabsdiff4.s32.s32.s32.add %0,%1,%2,%3;"
1405 : "r"(__a), "r"(__b), "r"(0));
1408 __DEVICE__ unsigned int __vsadu2(unsigned int __a, unsigned int __b) {
1410 asm("vabsdiff2.u32.u32.u32.add %0,%1,%2,%3;"
1412 : "r"(__a), "r"(__b), "r"(0));
1415 __DEVICE__ unsigned int __vsadu4(unsigned int __a, unsigned int __b) {
1417 asm("vabsdiff4.u32.u32.u32.add %0,%1,%2,%3;"
1419 : "r"(__a), "r"(__b), "r"(0));
1423 __DEVICE__ unsigned int __vsub2(unsigned int __a, unsigned int __b) {
1425 asm("vsub2.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1428 __DEVICE__ unsigned int __vneg2(unsigned int __a) { return __vsub2(0, __a); }
1430 __DEVICE__ unsigned int __vsub4(unsigned int __a, unsigned int __b) {
1432 asm("vsub4.u32.u32.u32 %0,%1,%2,%3;" : "=r"(r) : "r"(__a), "r"(__b), "r"(0));
1435 __DEVICE__ unsigned int __vneg4(unsigned int __a) { return __vsub4(0, __a); }
1436 __DEVICE__ unsigned int __vsubss2(unsigned int __a, unsigned int __b) {
1438 asm("vsub2.s32.s32.s32.sat %0,%1,%2,%3;"
1440 : "r"(__a), "r"(__b), "r"(0));
1443 __DEVICE__ unsigned int __vnegss2(unsigned int __a) {
1444 return __vsubss2(0, __a);
1446 __DEVICE__ unsigned int __vsubss4(unsigned int __a, unsigned int __b) {
1448 asm("vsub4.s32.s32.s32.sat %0,%1,%2,%3;"
1450 : "r"(__a), "r"(__b), "r"(0));
1453 __DEVICE__ unsigned int __vnegss4(unsigned int __a) {
1454 return __vsubss4(0, __a);
1456 __DEVICE__ unsigned int __vsubus2(unsigned int __a, unsigned int __b) {
1458 asm("vsub2.u32.u32.u32.sat %0,%1,%2,%3;"
1460 : "r"(__a), "r"(__b), "r"(0));
1463 __DEVICE__ unsigned int __vsubus4(unsigned int __a, unsigned int __b) {
1465 asm("vsub4.u32.u32.u32.sat %0,%1,%2,%3;"
1467 : "r"(__a), "r"(__b), "r"(0));
1470 #endif // CUDA_VERSION >= 9020
1471 __DEVICE__ int abs(int __a) { return __nv_abs(__a); }
1472 __DEVICE__ double acos(double __a) { return __nv_acos(__a); }
1473 __DEVICE__ float acosf(float __a) { return __nv_acosf(__a); }
1474 __DEVICE__ double acosh(double __a) { return __nv_acosh(__a); }
1475 __DEVICE__ float acoshf(float __a) { return __nv_acoshf(__a); }
1476 __DEVICE__ double asin(double __a) { return __nv_asin(__a); }
1477 __DEVICE__ float asinf(float __a) { return __nv_asinf(__a); }
1478 __DEVICE__ double asinh(double __a) { return __nv_asinh(__a); }
1479 __DEVICE__ float asinhf(float __a) { return __nv_asinhf(__a); }
1480 __DEVICE__ double atan(double __a) { return __nv_atan(__a); }
1481 __DEVICE__ double atan2(double __a, double __b) { return __nv_atan2(__a, __b); }
1482 __DEVICE__ float atan2f(float __a, float __b) { return __nv_atan2f(__a, __b); }
1483 __DEVICE__ float atanf(float __a) { return __nv_atanf(__a); }
1484 __DEVICE__ double atanh(double __a) { return __nv_atanh(__a); }
1485 __DEVICE__ float atanhf(float __a) { return __nv_atanhf(__a); }
1486 __DEVICE__ double cbrt(double __a) { return __nv_cbrt(__a); }
1487 __DEVICE__ float cbrtf(float __a) { return __nv_cbrtf(__a); }
1488 __DEVICE__ double ceil(double __a) { return __nv_ceil(__a); }
1489 __DEVICE__ float ceilf(float __a) { return __nv_ceilf(__a); }
1490 __DEVICE__ int clock() { return __nvvm_read_ptx_sreg_clock(); }
1491 __DEVICE__ long long clock64() { return __nvvm_read_ptx_sreg_clock64(); }
1492 __DEVICE__ double copysign(double __a, double __b) {
1493 return __nv_copysign(__a, __b);
1495 __DEVICE__ float copysignf(float __a, float __b) {
1496 return __nv_copysignf(__a, __b);
1498 __DEVICE__ double cos(double __a) { return __nv_cos(__a); }
1499 __DEVICE__ float cosf(float __a) {
1500 return __FAST_OR_SLOW(__nv_fast_cosf, __nv_cosf)(__a);
1502 __DEVICE__ double cosh(double __a) { return __nv_cosh(__a); }
1503 __DEVICE__ float coshf(float __a) { return __nv_coshf(__a); }
1504 __DEVICE__ double cospi(double __a) { return __nv_cospi(__a); }
1505 __DEVICE__ float cospif(float __a) { return __nv_cospif(__a); }
1506 __DEVICE__ double cyl_bessel_i0(double __a) { return __nv_cyl_bessel_i0(__a); }
1507 __DEVICE__ float cyl_bessel_i0f(float __a) { return __nv_cyl_bessel_i0f(__a); }
1508 __DEVICE__ double cyl_bessel_i1(double __a) { return __nv_cyl_bessel_i1(__a); }
1509 __DEVICE__ float cyl_bessel_i1f(float __a) { return __nv_cyl_bessel_i1f(__a); }
1510 __DEVICE__ double erf(double __a) { return __nv_erf(__a); }
1511 __DEVICE__ double erfc(double __a) { return __nv_erfc(__a); }
1512 __DEVICE__ float erfcf(float __a) { return __nv_erfcf(__a); }
1513 __DEVICE__ double erfcinv(double __a) { return __nv_erfcinv(__a); }
1514 __DEVICE__ float erfcinvf(float __a) { return __nv_erfcinvf(__a); }
1515 __DEVICE__ double erfcx(double __a) { return __nv_erfcx(__a); }
1516 __DEVICE__ float erfcxf(float __a) { return __nv_erfcxf(__a); }
1517 __DEVICE__ float erff(float __a) { return __nv_erff(__a); }
1518 __DEVICE__ double erfinv(double __a) { return __nv_erfinv(__a); }
1519 __DEVICE__ float erfinvf(float __a) { return __nv_erfinvf(__a); }
1520 __DEVICE__ double exp(double __a) { return __nv_exp(__a); }
1521 __DEVICE__ double exp10(double __a) { return __nv_exp10(__a); }
1522 __DEVICE__ float exp10f(float __a) { return __nv_exp10f(__a); }
1523 __DEVICE__ double exp2(double __a) { return __nv_exp2(__a); }
1524 __DEVICE__ float exp2f(float __a) { return __nv_exp2f(__a); }
1525 __DEVICE__ float expf(float __a) { return __nv_expf(__a); }
1526 __DEVICE__ double expm1(double __a) { return __nv_expm1(__a); }
1527 __DEVICE__ float expm1f(float __a) { return __nv_expm1f(__a); }
1528 __DEVICE__ double fabs(double __a) { return __nv_fabs(__a); }
1529 __DEVICE__ float fabsf(float __a) { return __nv_fabsf(__a); }
1530 __DEVICE__ double fdim(double __a, double __b) { return __nv_fdim(__a, __b); }
1531 __DEVICE__ float fdimf(float __a, float __b) { return __nv_fdimf(__a, __b); }
1532 __DEVICE__ double fdivide(double __a, double __b) { return __a / __b; }
1533 __DEVICE__ float fdividef(float __a, float __b) {
1534 #if __FAST_MATH__ && !__CUDA_PREC_DIV
1535 return __nv_fast_fdividef(__a, __b);
1540 __DEVICE__ double floor(double __f) { return __nv_floor(__f); }
1541 __DEVICE__ float floorf(float __f) { return __nv_floorf(__f); }
1542 __DEVICE__ double fma(double __a, double __b, double __c) {
1543 return __nv_fma(__a, __b, __c);
1545 __DEVICE__ float fmaf(float __a, float __b, float __c) {
1546 return __nv_fmaf(__a, __b, __c);
1548 __DEVICE__ double fmax(double __a, double __b) { return __nv_fmax(__a, __b); }
1549 __DEVICE__ float fmaxf(float __a, float __b) { return __nv_fmaxf(__a, __b); }
1550 __DEVICE__ double fmin(double __a, double __b) { return __nv_fmin(__a, __b); }
1551 __DEVICE__ float fminf(float __a, float __b) { return __nv_fminf(__a, __b); }
1552 __DEVICE__ double fmod(double __a, double __b) { return __nv_fmod(__a, __b); }
1553 __DEVICE__ float fmodf(float __a, float __b) { return __nv_fmodf(__a, __b); }
1554 __DEVICE__ double frexp(double __a, int *__b) { return __nv_frexp(__a, __b); }
1555 __DEVICE__ float frexpf(float __a, int *__b) { return __nv_frexpf(__a, __b); }
1556 __DEVICE__ double hypot(double __a, double __b) { return __nv_hypot(__a, __b); }
1557 __DEVICE__ float hypotf(float __a, float __b) { return __nv_hypotf(__a, __b); }
1558 __DEVICE__ int ilogb(double __a) { return __nv_ilogb(__a); }
1559 __DEVICE__ int ilogbf(float __a) { return __nv_ilogbf(__a); }
1560 __DEVICE__ double j0(double __a) { return __nv_j0(__a); }
1561 __DEVICE__ float j0f(float __a) { return __nv_j0f(__a); }
1562 __DEVICE__ double j1(double __a) { return __nv_j1(__a); }
1563 __DEVICE__ float j1f(float __a) { return __nv_j1f(__a); }
1564 __DEVICE__ double jn(int __n, double __a) { return __nv_jn(__n, __a); }
1565 __DEVICE__ float jnf(int __n, float __a) { return __nv_jnf(__n, __a); }
1566 #if defined(__LP64__)
1567 __DEVICE__ long labs(long __a) { return llabs(__a); };
1569 __DEVICE__ long labs(long __a) { return __nv_abs(__a); };
1571 __DEVICE__ double ldexp(double __a, int __b) { return __nv_ldexp(__a, __b); }
1572 __DEVICE__ float ldexpf(float __a, int __b) { return __nv_ldexpf(__a, __b); }
1573 __DEVICE__ double lgamma(double __a) { return __nv_lgamma(__a); }
1574 __DEVICE__ float lgammaf(float __a) { return __nv_lgammaf(__a); }
1575 __DEVICE__ long long llabs(long long __a) { return __nv_llabs(__a); }
1576 __DEVICE__ long long llmax(long long __a, long long __b) {
1577 return __nv_llmax(__a, __b);
1579 __DEVICE__ long long llmin(long long __a, long long __b) {
1580 return __nv_llmin(__a, __b);
1582 __DEVICE__ long long llrint(double __a) { return __nv_llrint(__a); }
1583 __DEVICE__ long long llrintf(float __a) { return __nv_llrintf(__a); }
1584 __DEVICE__ long long llround(double __a) { return __nv_llround(__a); }
1585 __DEVICE__ long long llroundf(float __a) { return __nv_llroundf(__a); }
1586 __DEVICE__ double log(double __a) { return __nv_log(__a); }
1587 __DEVICE__ double log10(double __a) { return __nv_log10(__a); }
1588 __DEVICE__ float log10f(float __a) { return __nv_log10f(__a); }
1589 __DEVICE__ double log1p(double __a) { return __nv_log1p(__a); }
1590 __DEVICE__ float log1pf(float __a) { return __nv_log1pf(__a); }
1591 __DEVICE__ double log2(double __a) { return __nv_log2(__a); }
1592 __DEVICE__ float log2f(float __a) {
1593 return __FAST_OR_SLOW(__nv_fast_log2f, __nv_log2f)(__a);
1595 __DEVICE__ double logb(double __a) { return __nv_logb(__a); }
1596 __DEVICE__ float logbf(float __a) { return __nv_logbf(__a); }
1597 __DEVICE__ float logf(float __a) {
1598 return __FAST_OR_SLOW(__nv_fast_logf, __nv_logf)(__a);
1600 #if defined(__LP64__)
1601 __DEVICE__ long lrint(double __a) { return llrint(__a); }
1602 __DEVICE__ long lrintf(float __a) { return __float2ll_rn(__a); }
1603 __DEVICE__ long lround(double __a) { return llround(__a); }
1604 __DEVICE__ long lroundf(float __a) { return llroundf(__a); }
1606 __DEVICE__ long lrint(double __a) { return (long)rint(__a); }
1607 __DEVICE__ long lrintf(float __a) { return __float2int_rn(__a); }
1608 __DEVICE__ long lround(double __a) { return round(__a); }
1609 __DEVICE__ long lroundf(float __a) { return roundf(__a); }
1611 __DEVICE__ int max(int __a, int __b) { return __nv_max(__a, __b); }
1612 __DEVICE__ void *memcpy(void *__a, const void *__b, size_t __c) {
1613 return __builtin_memcpy(__a, __b, __c);
1615 __DEVICE__ void *memset(void *__a, int __b, size_t __c) {
1616 return __builtin_memset(__a, __b, __c);
1618 __DEVICE__ int min(int __a, int __b) { return __nv_min(__a, __b); }
1619 __DEVICE__ double modf(double __a, double *__b) { return __nv_modf(__a, __b); }
1620 __DEVICE__ float modff(float __a, float *__b) { return __nv_modff(__a, __b); }
1621 __DEVICE__ double nearbyint(double __a) { return __nv_nearbyint(__a); }
1622 __DEVICE__ float nearbyintf(float __a) { return __nv_nearbyintf(__a); }
1623 __DEVICE__ double nextafter(double __a, double __b) {
1624 return __nv_nextafter(__a, __b);
1626 __DEVICE__ float nextafterf(float __a, float __b) {
1627 return __nv_nextafterf(__a, __b);
1629 __DEVICE__ double norm(int __dim, const double *__t) {
1630 return __nv_norm(__dim, __t);
1632 __DEVICE__ double norm3d(double __a, double __b, double __c) {
1633 return __nv_norm3d(__a, __b, __c);
1635 __DEVICE__ float norm3df(float __a, float __b, float __c) {
1636 return __nv_norm3df(__a, __b, __c);
1638 __DEVICE__ double norm4d(double __a, double __b, double __c, double __d) {
1639 return __nv_norm4d(__a, __b, __c, __d);
1641 __DEVICE__ float norm4df(float __a, float __b, float __c, float __d) {
1642 return __nv_norm4df(__a, __b, __c, __d);
1644 __DEVICE__ double normcdf(double __a) { return __nv_normcdf(__a); }
1645 __DEVICE__ float normcdff(float __a) { return __nv_normcdff(__a); }
1646 __DEVICE__ double normcdfinv(double __a) { return __nv_normcdfinv(__a); }
1647 __DEVICE__ float normcdfinvf(float __a) { return __nv_normcdfinvf(__a); }
1648 __DEVICE__ float normf(int __dim, const float *__t) {
1649 return __nv_normf(__dim, __t);
1651 __DEVICE__ double pow(double __a, double __b) { return __nv_pow(__a, __b); }
1652 __DEVICE__ float powf(float __a, float __b) { return __nv_powf(__a, __b); }
1653 __DEVICE__ double powi(double __a, int __b) { return __nv_powi(__a, __b); }
1654 __DEVICE__ float powif(float __a, int __b) { return __nv_powif(__a, __b); }
1655 __DEVICE__ double rcbrt(double __a) { return __nv_rcbrt(__a); }
1656 __DEVICE__ float rcbrtf(float __a) { return __nv_rcbrtf(__a); }
1657 __DEVICE__ double remainder(double __a, double __b) {
1658 return __nv_remainder(__a, __b);
1660 __DEVICE__ float remainderf(float __a, float __b) {
1661 return __nv_remainderf(__a, __b);
1663 __DEVICE__ double remquo(double __a, double __b, int *__c) {
1664 return __nv_remquo(__a, __b, __c);
1666 __DEVICE__ float remquof(float __a, float __b, int *__c) {
1667 return __nv_remquof(__a, __b, __c);
1669 __DEVICE__ double rhypot(double __a, double __b) {
1670 return __nv_rhypot(__a, __b);
1672 __DEVICE__ float rhypotf(float __a, float __b) {
1673 return __nv_rhypotf(__a, __b);
1675 __DEVICE__ double rint(double __a) { return __nv_rint(__a); }
1676 __DEVICE__ float rintf(float __a) { return __nv_rintf(__a); }
1677 __DEVICE__ double rnorm(int __a, const double *__b) {
1678 return __nv_rnorm(__a, __b);
1680 __DEVICE__ double rnorm3d(double __a, double __b, double __c) {
1681 return __nv_rnorm3d(__a, __b, __c);
1683 __DEVICE__ float rnorm3df(float __a, float __b, float __c) {
1684 return __nv_rnorm3df(__a, __b, __c);
1686 __DEVICE__ double rnorm4d(double __a, double __b, double __c, double __d) {
1687 return __nv_rnorm4d(__a, __b, __c, __d);
1689 __DEVICE__ float rnorm4df(float __a, float __b, float __c, float __d) {
1690 return __nv_rnorm4df(__a, __b, __c, __d);
1692 __DEVICE__ float rnormf(int __dim, const float *__t) {
1693 return __nv_rnormf(__dim, __t);
1695 __DEVICE__ double round(double __a) { return __nv_round(__a); }
1696 __DEVICE__ float roundf(float __a) { return __nv_roundf(__a); }
1697 __DEVICE__ double rsqrt(double __a) { return __nv_rsqrt(__a); }
1698 __DEVICE__ float rsqrtf(float __a) { return __nv_rsqrtf(__a); }
1699 __DEVICE__ double scalbn(double __a, int __b) { return __nv_scalbn(__a, __b); }
1700 __DEVICE__ float scalbnf(float __a, int __b) { return __nv_scalbnf(__a, __b); }
1701 __DEVICE__ double scalbln(double __a, long __b) {
1703 return __a > 0 ? HUGE_VAL : -HUGE_VAL;
1705 return __a > 0 ? 0.0 : -0.0;
1706 return scalbn(__a, (int)__b);
1708 __DEVICE__ float scalblnf(float __a, long __b) {
1710 return __a > 0 ? HUGE_VALF : -HUGE_VALF;
1712 return __a > 0 ? 0.f : -0.f;
1713 return scalbnf(__a, (int)__b);
1715 __DEVICE__ double sin(double __a) { return __nv_sin(__a); }
1716 __DEVICE__ void sincos(double __a, double *__sptr, double *__cptr) {
1717 return __nv_sincos(__a, __sptr, __cptr);
1719 __DEVICE__ void sincosf(float __a, float *__sptr, float *__cptr) {
1720 return __FAST_OR_SLOW(__nv_fast_sincosf, __nv_sincosf)(__a, __sptr, __cptr);
1722 __DEVICE__ void sincospi(double __a, double *__sptr, double *__cptr) {
1723 return __nv_sincospi(__a, __sptr, __cptr);
1725 __DEVICE__ void sincospif(float __a, float *__sptr, float *__cptr) {
1726 return __nv_sincospif(__a, __sptr, __cptr);
1728 __DEVICE__ float sinf(float __a) {
1729 return __FAST_OR_SLOW(__nv_fast_sinf, __nv_sinf)(__a);
1731 __DEVICE__ double sinh(double __a) { return __nv_sinh(__a); }
1732 __DEVICE__ float sinhf(float __a) { return __nv_sinhf(__a); }
1733 __DEVICE__ double sinpi(double __a) { return __nv_sinpi(__a); }
1734 __DEVICE__ float sinpif(float __a) { return __nv_sinpif(__a); }
1735 __DEVICE__ double sqrt(double __a) { return __nv_sqrt(__a); }
1736 __DEVICE__ float sqrtf(float __a) { return __nv_sqrtf(__a); }
1737 __DEVICE__ double tan(double __a) { return __nv_tan(__a); }
1738 __DEVICE__ float tanf(float __a) { return __nv_tanf(__a); }
1739 __DEVICE__ double tanh(double __a) { return __nv_tanh(__a); }
1740 __DEVICE__ float tanhf(float __a) { return __nv_tanhf(__a); }
1741 __DEVICE__ double tgamma(double __a) { return __nv_tgamma(__a); }
1742 __DEVICE__ float tgammaf(float __a) { return __nv_tgammaf(__a); }
1743 __DEVICE__ double trunc(double __a) { return __nv_trunc(__a); }
1744 __DEVICE__ float truncf(float __a) { return __nv_truncf(__a); }
1745 __DEVICE__ unsigned long long ullmax(unsigned long long __a,
1746 unsigned long long __b) {
1747 return __nv_ullmax(__a, __b);
1749 __DEVICE__ unsigned long long ullmin(unsigned long long __a,
1750 unsigned long long __b) {
1751 return __nv_ullmin(__a, __b);
1753 __DEVICE__ unsigned int umax(unsigned int __a, unsigned int __b) {
1754 return __nv_umax(__a, __b);
1756 __DEVICE__ unsigned int umin(unsigned int __a, unsigned int __b) {
1757 return __nv_umin(__a, __b);
1759 __DEVICE__ double y0(double __a) { return __nv_y0(__a); }
1760 __DEVICE__ float y0f(float __a) { return __nv_y0f(__a); }
1761 __DEVICE__ double y1(double __a) { return __nv_y1(__a); }
1762 __DEVICE__ float y1f(float __a) { return __nv_y1f(__a); }
1763 __DEVICE__ double yn(int __a, double __b) { return __nv_yn(__a, __b); }
1764 __DEVICE__ float ynf(int __a, float __b) { return __nv_ynf(__a, __b); }
1766 #pragma pop_macro("__DEVICE__")
1767 #pragma pop_macro("__FAST_OR_SLOW")
1768 #endif // __CLANG_CUDA_DEVICE_FUNCTIONS_H__