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
__all(int __a)49 __DEVICE__ int __all(int __a) { return __nvvm_vote_all(__a); }
__any(int __a)50 __DEVICE__ int __any(int __a) { return __nvvm_vote_any(__a); }
__ballot(int __a)51 __DEVICE__ unsigned int __ballot(int __a) { return __nvvm_vote_ballot(__a); }
__brev(unsigned int __a)52 __DEVICE__ unsigned int __brev(unsigned int __a) { return __nv_brev(__a); }
__brevll(unsigned long long __a)53 __DEVICE__ unsigned long long __brevll(unsigned long long __a) {
54 return __nv_brevll(__a);
55 }
56 #if defined(__cplusplus)
__brkpt()57 __DEVICE__ void __brkpt() { asm volatile("brkpt;"); }
__brkpt(int __a)58 __DEVICE__ void __brkpt(int __a) { __brkpt(); }
59 #else
__brkpt(void)60 __DEVICE__ void __attribute__((overloadable)) __brkpt(void) { asm volatile("brkpt;"); }
__brkpt(int __a)61 __DEVICE__ void __attribute__((overloadable)) __brkpt(int __a) { __brkpt(); }
62 #endif
__byte_perm(unsigned int __a,unsigned int __b,unsigned int __c)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 }
__clz(int __a)67 __DEVICE__ int __clz(int __a) { return __nv_clz(__a); }
__clzll(long long __a)68 __DEVICE__ int __clzll(long long __a) { return __nv_clzll(__a); }
__cosf(float __a)69 __DEVICE__ float __cosf(float __a) { return __nv_fast_cosf(__a); }
__dAtomicAdd(double * __p,double __v)70 __DEVICE__ double __dAtomicAdd(double *__p, double __v) {
71 return __nvvm_atom_add_gen_d(__p, __v);
72 }
__dAtomicAdd_block(double * __p,double __v)73 __DEVICE__ double __dAtomicAdd_block(double *__p, double __v) {
74 return __nvvm_atom_cta_add_gen_d(__p, __v);
75 }
__dAtomicAdd_system(double * __p,double __v)76 __DEVICE__ double __dAtomicAdd_system(double *__p, double __v) {
77 return __nvvm_atom_sys_add_gen_d(__p, __v);
78 }
__dadd_rd(double __a,double __b)79 __DEVICE__ double __dadd_rd(double __a, double __b) {
80 return __nv_dadd_rd(__a, __b);
81 }
__dadd_rn(double __a,double __b)82 __DEVICE__ double __dadd_rn(double __a, double __b) {
83 return __nv_dadd_rn(__a, __b);
84 }
__dadd_ru(double __a,double __b)85 __DEVICE__ double __dadd_ru(double __a, double __b) {
86 return __nv_dadd_ru(__a, __b);
87 }
__dadd_rz(double __a,double __b)88 __DEVICE__ double __dadd_rz(double __a, double __b) {
89 return __nv_dadd_rz(__a, __b);
90 }
__ddiv_rd(double __a,double __b)91 __DEVICE__ double __ddiv_rd(double __a, double __b) {
92 return __nv_ddiv_rd(__a, __b);
93 }
__ddiv_rn(double __a,double __b)94 __DEVICE__ double __ddiv_rn(double __a, double __b) {
95 return __nv_ddiv_rn(__a, __b);
96 }
__ddiv_ru(double __a,double __b)97 __DEVICE__ double __ddiv_ru(double __a, double __b) {
98 return __nv_ddiv_ru(__a, __b);
99 }
__ddiv_rz(double __a,double __b)100 __DEVICE__ double __ddiv_rz(double __a, double __b) {
101 return __nv_ddiv_rz(__a, __b);
102 }
__dmul_rd(double __a,double __b)103 __DEVICE__ double __dmul_rd(double __a, double __b) {
104 return __nv_dmul_rd(__a, __b);
105 }
__dmul_rn(double __a,double __b)106 __DEVICE__ double __dmul_rn(double __a, double __b) {
107 return __nv_dmul_rn(__a, __b);
108 }
__dmul_ru(double __a,double __b)109 __DEVICE__ double __dmul_ru(double __a, double __b) {
110 return __nv_dmul_ru(__a, __b);
111 }
__dmul_rz(double __a,double __b)112 __DEVICE__ double __dmul_rz(double __a, double __b) {
113 return __nv_dmul_rz(__a, __b);
114 }
__double2float_rd(double __a)115 __DEVICE__ float __double2float_rd(double __a) {
116 return __nv_double2float_rd(__a);
117 }
__double2float_rn(double __a)118 __DEVICE__ float __double2float_rn(double __a) {
119 return __nv_double2float_rn(__a);
120 }
__double2float_ru(double __a)121 __DEVICE__ float __double2float_ru(double __a) {
122 return __nv_double2float_ru(__a);
123 }
__double2float_rz(double __a)124 __DEVICE__ float __double2float_rz(double __a) {
125 return __nv_double2float_rz(__a);
126 }
__double2hiint(double __a)127 __DEVICE__ int __double2hiint(double __a) { return __nv_double2hiint(__a); }
__double2int_rd(double __a)128 __DEVICE__ int __double2int_rd(double __a) { return __nv_double2int_rd(__a); }
__double2int_rn(double __a)129 __DEVICE__ int __double2int_rn(double __a) { return __nv_double2int_rn(__a); }
__double2int_ru(double __a)130 __DEVICE__ int __double2int_ru(double __a) { return __nv_double2int_ru(__a); }
__double2int_rz(double __a)131 __DEVICE__ int __double2int_rz(double __a) { return __nv_double2int_rz(__a); }
__double2ll_rd(double __a)132 __DEVICE__ long long __double2ll_rd(double __a) {
133 return __nv_double2ll_rd(__a);
134 }
__double2ll_rn(double __a)135 __DEVICE__ long long __double2ll_rn(double __a) {
136 return __nv_double2ll_rn(__a);
137 }
__double2ll_ru(double __a)138 __DEVICE__ long long __double2ll_ru(double __a) {
139 return __nv_double2ll_ru(__a);
140 }
__double2ll_rz(double __a)141 __DEVICE__ long long __double2ll_rz(double __a) {
142 return __nv_double2ll_rz(__a);
143 }
__double2loint(double __a)144 __DEVICE__ int __double2loint(double __a) { return __nv_double2loint(__a); }
__double2uint_rd(double __a)145 __DEVICE__ unsigned int __double2uint_rd(double __a) {
146 return __nv_double2uint_rd(__a);
147 }
__double2uint_rn(double __a)148 __DEVICE__ unsigned int __double2uint_rn(double __a) {
149 return __nv_double2uint_rn(__a);
150 }
__double2uint_ru(double __a)151 __DEVICE__ unsigned int __double2uint_ru(double __a) {
152 return __nv_double2uint_ru(__a);
153 }
__double2uint_rz(double __a)154 __DEVICE__ unsigned int __double2uint_rz(double __a) {
155 return __nv_double2uint_rz(__a);
156 }
__double2ull_rd(double __a)157 __DEVICE__ unsigned long long __double2ull_rd(double __a) {
158 return __nv_double2ull_rd(__a);
159 }
__double2ull_rn(double __a)160 __DEVICE__ unsigned long long __double2ull_rn(double __a) {
161 return __nv_double2ull_rn(__a);
162 }
__double2ull_ru(double __a)163 __DEVICE__ unsigned long long __double2ull_ru(double __a) {
164 return __nv_double2ull_ru(__a);
165 }
__double2ull_rz(double __a)166 __DEVICE__ unsigned long long __double2ull_rz(double __a) {
167 return __nv_double2ull_rz(__a);
168 }
__double_as_longlong(double __a)169 __DEVICE__ long long __double_as_longlong(double __a) {
170 return __nv_double_as_longlong(__a);
171 }
__drcp_rd(double __a)172 __DEVICE__ double __drcp_rd(double __a) { return __nv_drcp_rd(__a); }
__drcp_rn(double __a)173 __DEVICE__ double __drcp_rn(double __a) { return __nv_drcp_rn(__a); }
__drcp_ru(double __a)174 __DEVICE__ double __drcp_ru(double __a) { return __nv_drcp_ru(__a); }
__drcp_rz(double __a)175 __DEVICE__ double __drcp_rz(double __a) { return __nv_drcp_rz(__a); }
__dsqrt_rd(double __a)176 __DEVICE__ double __dsqrt_rd(double __a) { return __nv_dsqrt_rd(__a); }
__dsqrt_rn(double __a)177 __DEVICE__ double __dsqrt_rn(double __a) { return __nv_dsqrt_rn(__a); }
__dsqrt_ru(double __a)178 __DEVICE__ double __dsqrt_ru(double __a) { return __nv_dsqrt_ru(__a); }
__dsqrt_rz(double __a)179 __DEVICE__ double __dsqrt_rz(double __a) { return __nv_dsqrt_rz(__a); }
__dsub_rd(double __a,double __b)180 __DEVICE__ double __dsub_rd(double __a, double __b) {
181 return __nv_dsub_rd(__a, __b);
182 }
__dsub_rn(double __a,double __b)183 __DEVICE__ double __dsub_rn(double __a, double __b) {
184 return __nv_dsub_rn(__a, __b);
185 }
__dsub_ru(double __a,double __b)186 __DEVICE__ double __dsub_ru(double __a, double __b) {
187 return __nv_dsub_ru(__a, __b);
188 }
__dsub_rz(double __a,double __b)189 __DEVICE__ double __dsub_rz(double __a, double __b) {
190 return __nv_dsub_rz(__a, __b);
191 }
__exp10f(float __a)192 __DEVICE__ float __exp10f(float __a) { return __nv_fast_exp10f(__a); }
__expf(float __a)193 __DEVICE__ float __expf(float __a) { return __nv_fast_expf(__a); }
__fAtomicAdd(float * __p,float __v)194 __DEVICE__ float __fAtomicAdd(float *__p, float __v) {
195 return __nvvm_atom_add_gen_f(__p, __v);
196 }
__fAtomicAdd_block(float * __p,float __v)197 __DEVICE__ float __fAtomicAdd_block(float *__p, float __v) {
198 return __nvvm_atom_cta_add_gen_f(__p, __v);
199 }
__fAtomicAdd_system(float * __p,float __v)200 __DEVICE__ float __fAtomicAdd_system(float *__p, float __v) {
201 return __nvvm_atom_sys_add_gen_f(__p, __v);
202 }
__fAtomicExch(float * __p,float __v)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 }
__fAtomicExch_block(float * __p,float __v)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 }
__fAtomicExch_system(float * __p,float __v)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 }
__fadd_rd(float __a,float __b)215 __DEVICE__ float __fadd_rd(float __a, float __b) {
216 return __nv_fadd_rd(__a, __b);
217 }
__fadd_rn(float __a,float __b)218 __DEVICE__ float __fadd_rn(float __a, float __b) {
219 return __nv_fadd_rn(__a, __b);
220 }
__fadd_ru(float __a,float __b)221 __DEVICE__ float __fadd_ru(float __a, float __b) {
222 return __nv_fadd_ru(__a, __b);
223 }
__fadd_rz(float __a,float __b)224 __DEVICE__ float __fadd_rz(float __a, float __b) {
225 return __nv_fadd_rz(__a, __b);
226 }
__fdiv_rd(float __a,float __b)227 __DEVICE__ float __fdiv_rd(float __a, float __b) {
228 return __nv_fdiv_rd(__a, __b);
229 }
__fdiv_rn(float __a,float __b)230 __DEVICE__ float __fdiv_rn(float __a, float __b) {
231 return __nv_fdiv_rn(__a, __b);
232 }
__fdiv_ru(float __a,float __b)233 __DEVICE__ float __fdiv_ru(float __a, float __b) {
234 return __nv_fdiv_ru(__a, __b);
235 }
__fdiv_rz(float __a,float __b)236 __DEVICE__ float __fdiv_rz(float __a, float __b) {
237 return __nv_fdiv_rz(__a, __b);
238 }
__fdividef(float __a,float __b)239 __DEVICE__ float __fdividef(float __a, float __b) {
240 return __nv_fast_fdividef(__a, __b);
241 }
__ffs(int __a)242 __DEVICE__ int __ffs(int __a) { return __nv_ffs(__a); }
__ffsll(long long __a)243 __DEVICE__ int __ffsll(long long __a) { return __nv_ffsll(__a); }
__finite(double __a)244 __DEVICE__ int __finite(double __a) { return __nv_isfinited(__a); }
__finitef(float __a)245 __DEVICE__ int __finitef(float __a) { return __nv_finitef(__a); }
246 #ifdef _MSC_VER
247 __DEVICE__ int __finitel(long double __a);
248 #endif
__float2int_rd(float __a)249 __DEVICE__ int __float2int_rd(float __a) { return __nv_float2int_rd(__a); }
__float2int_rn(float __a)250 __DEVICE__ int __float2int_rn(float __a) { return __nv_float2int_rn(__a); }
__float2int_ru(float __a)251 __DEVICE__ int __float2int_ru(float __a) { return __nv_float2int_ru(__a); }
__float2int_rz(float __a)252 __DEVICE__ int __float2int_rz(float __a) { return __nv_float2int_rz(__a); }
__float2ll_rd(float __a)253 __DEVICE__ long long __float2ll_rd(float __a) { return __nv_float2ll_rd(__a); }
__float2ll_rn(float __a)254 __DEVICE__ long long __float2ll_rn(float __a) { return __nv_float2ll_rn(__a); }
__float2ll_ru(float __a)255 __DEVICE__ long long __float2ll_ru(float __a) { return __nv_float2ll_ru(__a); }
__float2ll_rz(float __a)256 __DEVICE__ long long __float2ll_rz(float __a) { return __nv_float2ll_rz(__a); }
__float2uint_rd(float __a)257 __DEVICE__ unsigned int __float2uint_rd(float __a) {
258 return __nv_float2uint_rd(__a);
259 }
__float2uint_rn(float __a)260 __DEVICE__ unsigned int __float2uint_rn(float __a) {
261 return __nv_float2uint_rn(__a);
262 }
__float2uint_ru(float __a)263 __DEVICE__ unsigned int __float2uint_ru(float __a) {
264 return __nv_float2uint_ru(__a);
265 }
__float2uint_rz(float __a)266 __DEVICE__ unsigned int __float2uint_rz(float __a) {
267 return __nv_float2uint_rz(__a);
268 }
__float2ull_rd(float __a)269 __DEVICE__ unsigned long long __float2ull_rd(float __a) {
270 return __nv_float2ull_rd(__a);
271 }
__float2ull_rn(float __a)272 __DEVICE__ unsigned long long __float2ull_rn(float __a) {
273 return __nv_float2ull_rn(__a);
274 }
__float2ull_ru(float __a)275 __DEVICE__ unsigned long long __float2ull_ru(float __a) {
276 return __nv_float2ull_ru(__a);
277 }
__float2ull_rz(float __a)278 __DEVICE__ unsigned long long __float2ull_rz(float __a) {
279 return __nv_float2ull_rz(__a);
280 }
__float_as_int(float __a)281 __DEVICE__ int __float_as_int(float __a) { return __nv_float_as_int(__a); }
__float_as_uint(float __a)282 __DEVICE__ unsigned int __float_as_uint(float __a) {
283 return __nv_float_as_uint(__a);
284 }
__fma_rd(double __a,double __b,double __c)285 __DEVICE__ double __fma_rd(double __a, double __b, double __c) {
286 return __nv_fma_rd(__a, __b, __c);
287 }
__fma_rn(double __a,double __b,double __c)288 __DEVICE__ double __fma_rn(double __a, double __b, double __c) {
289 return __nv_fma_rn(__a, __b, __c);
290 }
__fma_ru(double __a,double __b,double __c)291 __DEVICE__ double __fma_ru(double __a, double __b, double __c) {
292 return __nv_fma_ru(__a, __b, __c);
293 }
__fma_rz(double __a,double __b,double __c)294 __DEVICE__ double __fma_rz(double __a, double __b, double __c) {
295 return __nv_fma_rz(__a, __b, __c);
296 }
__fmaf_ieee_rd(float __a,float __b,float __c)297 __DEVICE__ float __fmaf_ieee_rd(float __a, float __b, float __c) {
298 return __nv_fmaf_ieee_rd(__a, __b, __c);
299 }
__fmaf_ieee_rn(float __a,float __b,float __c)300 __DEVICE__ float __fmaf_ieee_rn(float __a, float __b, float __c) {
301 return __nv_fmaf_ieee_rn(__a, __b, __c);
302 }
__fmaf_ieee_ru(float __a,float __b,float __c)303 __DEVICE__ float __fmaf_ieee_ru(float __a, float __b, float __c) {
304 return __nv_fmaf_ieee_ru(__a, __b, __c);
305 }
__fmaf_ieee_rz(float __a,float __b,float __c)306 __DEVICE__ float __fmaf_ieee_rz(float __a, float __b, float __c) {
307 return __nv_fmaf_ieee_rz(__a, __b, __c);
308 }
__fmaf_rd(float __a,float __b,float __c)309 __DEVICE__ float __fmaf_rd(float __a, float __b, float __c) {
310 return __nv_fmaf_rd(__a, __b, __c);
311 }
__fmaf_rn(float __a,float __b,float __c)312 __DEVICE__ float __fmaf_rn(float __a, float __b, float __c) {
313 return __nv_fmaf_rn(__a, __b, __c);
314 }
__fmaf_ru(float __a,float __b,float __c)315 __DEVICE__ float __fmaf_ru(float __a, float __b, float __c) {
316 return __nv_fmaf_ru(__a, __b, __c);
317 }
__fmaf_rz(float __a,float __b,float __c)318 __DEVICE__ float __fmaf_rz(float __a, float __b, float __c) {
319 return __nv_fmaf_rz(__a, __b, __c);
320 }
__fmul_rd(float __a,float __b)321 __DEVICE__ float __fmul_rd(float __a, float __b) {
322 return __nv_fmul_rd(__a, __b);
323 }
__fmul_rn(float __a,float __b)324 __DEVICE__ float __fmul_rn(float __a, float __b) {
325 return __nv_fmul_rn(__a, __b);
326 }
__fmul_ru(float __a,float __b)327 __DEVICE__ float __fmul_ru(float __a, float __b) {
328 return __nv_fmul_ru(__a, __b);
329 }
__fmul_rz(float __a,float __b)330 __DEVICE__ float __fmul_rz(float __a, float __b) {
331 return __nv_fmul_rz(__a, __b);
332 }
__frcp_rd(float __a)333 __DEVICE__ float __frcp_rd(float __a) { return __nv_frcp_rd(__a); }
__frcp_rn(float __a)334 __DEVICE__ float __frcp_rn(float __a) { return __nv_frcp_rn(__a); }
__frcp_ru(float __a)335 __DEVICE__ float __frcp_ru(float __a) { return __nv_frcp_ru(__a); }
__frcp_rz(float __a)336 __DEVICE__ float __frcp_rz(float __a) { return __nv_frcp_rz(__a); }
__frsqrt_rn(float __a)337 __DEVICE__ float __frsqrt_rn(float __a) { return __nv_frsqrt_rn(__a); }
__fsqrt_rd(float __a)338 __DEVICE__ float __fsqrt_rd(float __a) { return __nv_fsqrt_rd(__a); }
__fsqrt_rn(float __a)339 __DEVICE__ float __fsqrt_rn(float __a) { return __nv_fsqrt_rn(__a); }
__fsqrt_ru(float __a)340 __DEVICE__ float __fsqrt_ru(float __a) { return __nv_fsqrt_ru(__a); }
__fsqrt_rz(float __a)341 __DEVICE__ float __fsqrt_rz(float __a) { return __nv_fsqrt_rz(__a); }
__fsub_rd(float __a,float __b)342 __DEVICE__ float __fsub_rd(float __a, float __b) {
343 return __nv_fsub_rd(__a, __b);
344 }
__fsub_rn(float __a,float __b)345 __DEVICE__ float __fsub_rn(float __a, float __b) {
346 return __nv_fsub_rn(__a, __b);
347 }
__fsub_ru(float __a,float __b)348 __DEVICE__ float __fsub_ru(float __a, float __b) {
349 return __nv_fsub_ru(__a, __b);
350 }
__fsub_rz(float __a,float __b)351 __DEVICE__ float __fsub_rz(float __a, float __b) {
352 return __nv_fsub_rz(__a, __b);
353 }
__hadd(int __a,int __b)354 __DEVICE__ int __hadd(int __a, int __b) { return __nv_hadd(__a, __b); }
__hiloint2double(int __a,int __b)355 __DEVICE__ double __hiloint2double(int __a, int __b) {
356 return __nv_hiloint2double(__a, __b);
357 }
__iAtomicAdd(int * __p,int __v)358 __DEVICE__ int __iAtomicAdd(int *__p, int __v) {
359 return __nvvm_atom_add_gen_i(__p, __v);
360 }
__iAtomicAdd_block(int * __p,int __v)361 __DEVICE__ int __iAtomicAdd_block(int *__p, int __v) {
362 __nvvm_atom_cta_add_gen_i(__p, __v);
363 }
__iAtomicAdd_system(int * __p,int __v)364 __DEVICE__ int __iAtomicAdd_system(int *__p, int __v) {
365 __nvvm_atom_sys_add_gen_i(__p, __v);
366 }
__iAtomicAnd(int * __p,int __v)367 __DEVICE__ int __iAtomicAnd(int *__p, int __v) {
368 return __nvvm_atom_and_gen_i(__p, __v);
369 }
__iAtomicAnd_block(int * __p,int __v)370 __DEVICE__ int __iAtomicAnd_block(int *__p, int __v) {
371 return __nvvm_atom_cta_and_gen_i(__p, __v);
372 }
__iAtomicAnd_system(int * __p,int __v)373 __DEVICE__ int __iAtomicAnd_system(int *__p, int __v) {
374 return __nvvm_atom_sys_and_gen_i(__p, __v);
375 }
__iAtomicCAS(int * __p,int __cmp,int __v)376 __DEVICE__ int __iAtomicCAS(int *__p, int __cmp, int __v) {
377 return __nvvm_atom_cas_gen_i(__p, __cmp, __v);
378 }
__iAtomicCAS_block(int * __p,int __cmp,int __v)379 __DEVICE__ int __iAtomicCAS_block(int *__p, int __cmp, int __v) {
380 return __nvvm_atom_cta_cas_gen_i(__p, __cmp, __v);
381 }
__iAtomicCAS_system(int * __p,int __cmp,int __v)382 __DEVICE__ int __iAtomicCAS_system(int *__p, int __cmp, int __v) {
383 return __nvvm_atom_sys_cas_gen_i(__p, __cmp, __v);
384 }
__iAtomicExch(int * __p,int __v)385 __DEVICE__ int __iAtomicExch(int *__p, int __v) {
386 return __nvvm_atom_xchg_gen_i(__p, __v);
387 }
__iAtomicExch_block(int * __p,int __v)388 __DEVICE__ int __iAtomicExch_block(int *__p, int __v) {
389 return __nvvm_atom_cta_xchg_gen_i(__p, __v);
390 }
__iAtomicExch_system(int * __p,int __v)391 __DEVICE__ int __iAtomicExch_system(int *__p, int __v) {
392 return __nvvm_atom_sys_xchg_gen_i(__p, __v);
393 }
__iAtomicMax(int * __p,int __v)394 __DEVICE__ int __iAtomicMax(int *__p, int __v) {
395 return __nvvm_atom_max_gen_i(__p, __v);
396 }
__iAtomicMax_block(int * __p,int __v)397 __DEVICE__ int __iAtomicMax_block(int *__p, int __v) {
398 return __nvvm_atom_cta_max_gen_i(__p, __v);
399 }
__iAtomicMax_system(int * __p,int __v)400 __DEVICE__ int __iAtomicMax_system(int *__p, int __v) {
401 return __nvvm_atom_sys_max_gen_i(__p, __v);
402 }
__iAtomicMin(int * __p,int __v)403 __DEVICE__ int __iAtomicMin(int *__p, int __v) {
404 return __nvvm_atom_min_gen_i(__p, __v);
405 }
__iAtomicMin_block(int * __p,int __v)406 __DEVICE__ int __iAtomicMin_block(int *__p, int __v) {
407 return __nvvm_atom_cta_min_gen_i(__p, __v);
408 }
__iAtomicMin_system(int * __p,int __v)409 __DEVICE__ int __iAtomicMin_system(int *__p, int __v) {
410 return __nvvm_atom_sys_min_gen_i(__p, __v);
411 }
__iAtomicOr(int * __p,int __v)412 __DEVICE__ int __iAtomicOr(int *__p, int __v) {
413 return __nvvm_atom_or_gen_i(__p, __v);
414 }
__iAtomicOr_block(int * __p,int __v)415 __DEVICE__ int __iAtomicOr_block(int *__p, int __v) {
416 return __nvvm_atom_cta_or_gen_i(__p, __v);
417 }
__iAtomicOr_system(int * __p,int __v)418 __DEVICE__ int __iAtomicOr_system(int *__p, int __v) {
419 return __nvvm_atom_sys_or_gen_i(__p, __v);
420 }
__iAtomicXor(int * __p,int __v)421 __DEVICE__ int __iAtomicXor(int *__p, int __v) {
422 return __nvvm_atom_xor_gen_i(__p, __v);
423 }
__iAtomicXor_block(int * __p,int __v)424 __DEVICE__ int __iAtomicXor_block(int *__p, int __v) {
425 return __nvvm_atom_cta_xor_gen_i(__p, __v);
426 }
__iAtomicXor_system(int * __p,int __v)427 __DEVICE__ int __iAtomicXor_system(int *__p, int __v) {
428 return __nvvm_atom_sys_xor_gen_i(__p, __v);
429 }
__illAtomicMax(long long * __p,long long __v)430 __DEVICE__ long long __illAtomicMax(long long *__p, long long __v) {
431 return __nvvm_atom_max_gen_ll(__p, __v);
432 }
__illAtomicMax_block(long long * __p,long long __v)433 __DEVICE__ long long __illAtomicMax_block(long long *__p, long long __v) {
434 return __nvvm_atom_cta_max_gen_ll(__p, __v);
435 }
__illAtomicMax_system(long long * __p,long long __v)436 __DEVICE__ long long __illAtomicMax_system(long long *__p, long long __v) {
437 return __nvvm_atom_sys_max_gen_ll(__p, __v);
438 }
__illAtomicMin(long long * __p,long long __v)439 __DEVICE__ long long __illAtomicMin(long long *__p, long long __v) {
440 return __nvvm_atom_min_gen_ll(__p, __v);
441 }
__illAtomicMin_block(long long * __p,long long __v)442 __DEVICE__ long long __illAtomicMin_block(long long *__p, long long __v) {
443 return __nvvm_atom_cta_min_gen_ll(__p, __v);
444 }
__illAtomicMin_system(long long * __p,long long __v)445 __DEVICE__ long long __illAtomicMin_system(long long *__p, long long __v) {
446 return __nvvm_atom_sys_min_gen_ll(__p, __v);
447 }
__int2double_rn(int __a)448 __DEVICE__ double __int2double_rn(int __a) { return __nv_int2double_rn(__a); }
__int2float_rd(int __a)449 __DEVICE__ float __int2float_rd(int __a) { return __nv_int2float_rd(__a); }
__int2float_rn(int __a)450 __DEVICE__ float __int2float_rn(int __a) { return __nv_int2float_rn(__a); }
__int2float_ru(int __a)451 __DEVICE__ float __int2float_ru(int __a) { return __nv_int2float_ru(__a); }
__int2float_rz(int __a)452 __DEVICE__ float __int2float_rz(int __a) { return __nv_int2float_rz(__a); }
__int_as_float(int __a)453 __DEVICE__ float __int_as_float(int __a) { return __nv_int_as_float(__a); }
__isfinited(double __a)454 __DEVICE__ int __isfinited(double __a) { return __nv_isfinited(__a); }
__isinf(double __a)455 __DEVICE__ int __isinf(double __a) { return __nv_isinfd(__a); }
__isinff(float __a)456 __DEVICE__ int __isinff(float __a) { return __nv_isinff(__a); }
457 #ifdef _MSC_VER
458 __DEVICE__ int __isinfl(long double __a);
459 #endif
__isnan(double __a)460 __DEVICE__ int __isnan(double __a) { return __nv_isnand(__a); }
__isnanf(float __a)461 __DEVICE__ int __isnanf(float __a) { return __nv_isnanf(__a); }
462 #ifdef _MSC_VER
463 __DEVICE__ int __isnanl(long double __a);
464 #endif
__ll2double_rd(long long __a)465 __DEVICE__ double __ll2double_rd(long long __a) {
466 return __nv_ll2double_rd(__a);
467 }
__ll2double_rn(long long __a)468 __DEVICE__ double __ll2double_rn(long long __a) {
469 return __nv_ll2double_rn(__a);
470 }
__ll2double_ru(long long __a)471 __DEVICE__ double __ll2double_ru(long long __a) {
472 return __nv_ll2double_ru(__a);
473 }
__ll2double_rz(long long __a)474 __DEVICE__ double __ll2double_rz(long long __a) {
475 return __nv_ll2double_rz(__a);
476 }
__ll2float_rd(long long __a)477 __DEVICE__ float __ll2float_rd(long long __a) { return __nv_ll2float_rd(__a); }
__ll2float_rn(long long __a)478 __DEVICE__ float __ll2float_rn(long long __a) { return __nv_ll2float_rn(__a); }
__ll2float_ru(long long __a)479 __DEVICE__ float __ll2float_ru(long long __a) { return __nv_ll2float_ru(__a); }
__ll2float_rz(long long __a)480 __DEVICE__ float __ll2float_rz(long long __a) { return __nv_ll2float_rz(__a); }
__llAtomicAnd(long long * __p,long long __v)481 __DEVICE__ long long __llAtomicAnd(long long *__p, long long __v) {
482 return __nvvm_atom_and_gen_ll(__p, __v);
483 }
__llAtomicAnd_block(long long * __p,long long __v)484 __DEVICE__ long long __llAtomicAnd_block(long long *__p, long long __v) {
485 return __nvvm_atom_cta_and_gen_ll(__p, __v);
486 }
__llAtomicAnd_system(long long * __p,long long __v)487 __DEVICE__ long long __llAtomicAnd_system(long long *__p, long long __v) {
488 return __nvvm_atom_sys_and_gen_ll(__p, __v);
489 }
__llAtomicOr(long long * __p,long long __v)490 __DEVICE__ long long __llAtomicOr(long long *__p, long long __v) {
491 return __nvvm_atom_or_gen_ll(__p, __v);
492 }
__llAtomicOr_block(long long * __p,long long __v)493 __DEVICE__ long long __llAtomicOr_block(long long *__p, long long __v) {
494 return __nvvm_atom_cta_or_gen_ll(__p, __v);
495 }
__llAtomicOr_system(long long * __p,long long __v)496 __DEVICE__ long long __llAtomicOr_system(long long *__p, long long __v) {
497 return __nvvm_atom_sys_or_gen_ll(__p, __v);
498 }
__llAtomicXor(long long * __p,long long __v)499 __DEVICE__ long long __llAtomicXor(long long *__p, long long __v) {
500 return __nvvm_atom_xor_gen_ll(__p, __v);
501 }
__llAtomicXor_block(long long * __p,long long __v)502 __DEVICE__ long long __llAtomicXor_block(long long *__p, long long __v) {
503 return __nvvm_atom_cta_xor_gen_ll(__p, __v);
504 }
__llAtomicXor_system(long long * __p,long long __v)505 __DEVICE__ long long __llAtomicXor_system(long long *__p, long long __v) {
506 return __nvvm_atom_sys_xor_gen_ll(__p, __v);
507 }
__log10f(float __a)508 __DEVICE__ float __log10f(float __a) { return __nv_fast_log10f(__a); }
__log2f(float __a)509 __DEVICE__ float __log2f(float __a) { return __nv_fast_log2f(__a); }
__logf(float __a)510 __DEVICE__ float __logf(float __a) { return __nv_fast_logf(__a); }
__longlong_as_double(long long __a)511 __DEVICE__ double __longlong_as_double(long long __a) {
512 return __nv_longlong_as_double(__a);
513 }
__mul24(int __a,int __b)514 __DEVICE__ int __mul24(int __a, int __b) { return __nv_mul24(__a, __b); }
__mul64hi(long long __a,long long __b)515 __DEVICE__ long long __mul64hi(long long __a, long long __b) {
516 return __nv_mul64hi(__a, __b);
517 }
__mulhi(int __a,int __b)518 __DEVICE__ int __mulhi(int __a, int __b) { return __nv_mulhi(__a, __b); }
__pm0(void)519 __DEVICE__ unsigned int __pm0(void) { return __nvvm_read_ptx_sreg_pm0(); }
__pm1(void)520 __DEVICE__ unsigned int __pm1(void) { return __nvvm_read_ptx_sreg_pm1(); }
__pm2(void)521 __DEVICE__ unsigned int __pm2(void) { return __nvvm_read_ptx_sreg_pm2(); }
__pm3(void)522 __DEVICE__ unsigned int __pm3(void) { return __nvvm_read_ptx_sreg_pm3(); }
__popc(int __a)523 __DEVICE__ int __popc(int __a) { return __nv_popc(__a); }
__popcll(long long __a)524 __DEVICE__ int __popcll(long long __a) { return __nv_popcll(__a); }
__powf(float __a,float __b)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))
__rhadd(int __a,int __b)531 __DEVICE__ int __rhadd(int __a, int __b) { return __nv_rhadd(__a, __b); }
__sad(int __a,int __b,unsigned int __c)532 __DEVICE__ unsigned int __sad(int __a, int __b, unsigned int __c) {
533 return __nv_sad(__a, __b, __c);
534 }
__saturatef(float __a)535 __DEVICE__ float __saturatef(float __a) { return __nv_saturatef(__a); }
__signbitd(double __a)536 __DEVICE__ int __signbitd(double __a) { return __nv_signbitd(__a); }
__signbitf(float __a)537 __DEVICE__ int __signbitf(float __a) { return __nv_signbitf(__a); }
__sincosf(float __a,float * __s,float * __c)538 __DEVICE__ void __sincosf(float __a, float *__s, float *__c) {
539 return __nv_fast_sincosf(__a, __s, __c);
540 }
__sinf(float __a)541 __DEVICE__ float __sinf(float __a) { return __nv_fast_sinf(__a); }
__syncthreads_and(int __a)542 __DEVICE__ int __syncthreads_and(int __a) { return __nvvm_bar0_and(__a); }
__syncthreads_count(int __a)543 __DEVICE__ int __syncthreads_count(int __a) { return __nvvm_bar0_popc(__a); }
__syncthreads_or(int __a)544 __DEVICE__ int __syncthreads_or(int __a) { return __nvvm_bar0_or(__a); }
__tanf(float __a)545 __DEVICE__ float __tanf(float __a) { return __nv_fast_tanf(__a); }
__threadfence(void)546 __DEVICE__ void __threadfence(void) { __nvvm_membar_gl(); }
__threadfence_block(void)547 __DEVICE__ void __threadfence_block(void) { __nvvm_membar_cta(); };
__threadfence_system(void)548 __DEVICE__ void __threadfence_system(void) { __nvvm_membar_sys(); };
__trap(void)549 __DEVICE__ void __trap(void) { asm volatile("trap;"); }
__uAtomicAdd(unsigned int * __p,unsigned int __v)550 __DEVICE__ unsigned int __uAtomicAdd(unsigned int *__p, unsigned int __v) {
551 return __nvvm_atom_add_gen_i((int *)__p, __v);
552 }
__uAtomicAdd_block(unsigned int * __p,unsigned int __v)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 }
__uAtomicAdd_system(unsigned int * __p,unsigned int __v)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 }
__uAtomicAnd(unsigned int * __p,unsigned int __v)561 __DEVICE__ unsigned int __uAtomicAnd(unsigned int *__p, unsigned int __v) {
562 return __nvvm_atom_and_gen_i((int *)__p, __v);
563 }
__uAtomicAnd_block(unsigned int * __p,unsigned int __v)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 }
__uAtomicAnd_system(unsigned int * __p,unsigned int __v)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 }
__uAtomicCAS(unsigned int * __p,unsigned int __cmp,unsigned int __v)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
__uAtomicCAS_block(unsigned int * __p,unsigned int __cmp,unsigned int __v)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
__uAtomicCAS_system(unsigned int * __p,unsigned int __cmp,unsigned int __v)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 }
__uAtomicDec(unsigned int * __p,unsigned int __v)584 __DEVICE__ unsigned int __uAtomicDec(unsigned int *__p, unsigned int __v) {
585 return __nvvm_atom_dec_gen_ui(__p, __v);
586 }
__uAtomicDec_block(unsigned int * __p,unsigned int __v)587 __DEVICE__ unsigned int __uAtomicDec_block(unsigned int *__p,
588 unsigned int __v) {
589 return __nvvm_atom_cta_dec_gen_ui(__p, __v);
590 }
__uAtomicDec_system(unsigned int * __p,unsigned int __v)591 __DEVICE__ unsigned int __uAtomicDec_system(unsigned int *__p,
592 unsigned int __v) {
593 return __nvvm_atom_sys_dec_gen_ui(__p, __v);
594 }
__uAtomicExch(unsigned int * __p,unsigned int __v)595 __DEVICE__ unsigned int __uAtomicExch(unsigned int *__p, unsigned int __v) {
596 return __nvvm_atom_xchg_gen_i((int *)__p, __v);
597 }
__uAtomicExch_block(unsigned int * __p,unsigned int __v)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 }
__uAtomicExch_system(unsigned int * __p,unsigned int __v)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 }
__uAtomicInc(unsigned int * __p,unsigned int __v)606 __DEVICE__ unsigned int __uAtomicInc(unsigned int *__p, unsigned int __v) {
607 return __nvvm_atom_inc_gen_ui(__p, __v);
608 }
__uAtomicInc_block(unsigned int * __p,unsigned int __v)609 __DEVICE__ unsigned int __uAtomicInc_block(unsigned int *__p,
610 unsigned int __v) {
611 return __nvvm_atom_cta_inc_gen_ui(__p, __v);
612 }
__uAtomicInc_system(unsigned int * __p,unsigned int __v)613 __DEVICE__ unsigned int __uAtomicInc_system(unsigned int *__p,
614 unsigned int __v) {
615 return __nvvm_atom_sys_inc_gen_ui(__p, __v);
616 }
__uAtomicMax(unsigned int * __p,unsigned int __v)617 __DEVICE__ unsigned int __uAtomicMax(unsigned int *__p, unsigned int __v) {
618 return __nvvm_atom_max_gen_ui(__p, __v);
619 }
__uAtomicMax_block(unsigned int * __p,unsigned int __v)620 __DEVICE__ unsigned int __uAtomicMax_block(unsigned int *__p,
621 unsigned int __v) {
622 return __nvvm_atom_cta_max_gen_ui(__p, __v);
623 }
__uAtomicMax_system(unsigned int * __p,unsigned int __v)624 __DEVICE__ unsigned int __uAtomicMax_system(unsigned int *__p,
625 unsigned int __v) {
626 return __nvvm_atom_sys_max_gen_ui(__p, __v);
627 }
__uAtomicMin(unsigned int * __p,unsigned int __v)628 __DEVICE__ unsigned int __uAtomicMin(unsigned int *__p, unsigned int __v) {
629 return __nvvm_atom_min_gen_ui(__p, __v);
630 }
__uAtomicMin_block(unsigned int * __p,unsigned int __v)631 __DEVICE__ unsigned int __uAtomicMin_block(unsigned int *__p,
632 unsigned int __v) {
633 return __nvvm_atom_cta_min_gen_ui(__p, __v);
634 }
__uAtomicMin_system(unsigned int * __p,unsigned int __v)635 __DEVICE__ unsigned int __uAtomicMin_system(unsigned int *__p,
636 unsigned int __v) {
637 return __nvvm_atom_sys_min_gen_ui(__p, __v);
638 }
__uAtomicOr(unsigned int * __p,unsigned int __v)639 __DEVICE__ unsigned int __uAtomicOr(unsigned int *__p, unsigned int __v) {
640 return __nvvm_atom_or_gen_i((int *)__p, __v);
641 }
__uAtomicOr_block(unsigned int * __p,unsigned int __v)642 __DEVICE__ unsigned int __uAtomicOr_block(unsigned int *__p, unsigned int __v) {
643 return __nvvm_atom_cta_or_gen_i((int *)__p, __v);
644 }
__uAtomicOr_system(unsigned int * __p,unsigned int __v)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 }
__uAtomicXor(unsigned int * __p,unsigned int __v)649 __DEVICE__ unsigned int __uAtomicXor(unsigned int *__p, unsigned int __v) {
650 return __nvvm_atom_xor_gen_i((int *)__p, __v);
651 }
__uAtomicXor_block(unsigned int * __p,unsigned int __v)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 }
__uAtomicXor_system(unsigned int * __p,unsigned int __v)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 }
__uhadd(unsigned int __a,unsigned int __b)660 __DEVICE__ unsigned int __uhadd(unsigned int __a, unsigned int __b) {
661 return __nv_uhadd(__a, __b);
662 }
__uint2double_rn(unsigned int __a)663 __DEVICE__ double __uint2double_rn(unsigned int __a) {
664 return __nv_uint2double_rn(__a);
665 }
__uint2float_rd(unsigned int __a)666 __DEVICE__ float __uint2float_rd(unsigned int __a) {
667 return __nv_uint2float_rd(__a);
668 }
__uint2float_rn(unsigned int __a)669 __DEVICE__ float __uint2float_rn(unsigned int __a) {
670 return __nv_uint2float_rn(__a);
671 }
__uint2float_ru(unsigned int __a)672 __DEVICE__ float __uint2float_ru(unsigned int __a) {
673 return __nv_uint2float_ru(__a);
674 }
__uint2float_rz(unsigned int __a)675 __DEVICE__ float __uint2float_rz(unsigned int __a) {
676 return __nv_uint2float_rz(__a);
677 }
__uint_as_float(unsigned int __a)678 __DEVICE__ float __uint_as_float(unsigned int __a) {
679 return __nv_uint_as_float(__a);
680 } //
__ull2double_rd(unsigned long long __a)681 __DEVICE__ double __ull2double_rd(unsigned long long __a) {
682 return __nv_ull2double_rd(__a);
683 }
__ull2double_rn(unsigned long long __a)684