Skip to content

Commit 9ad153a

Browse files
authored
[flang][cuda] Adding more bindings to libcudadevice (llvm#125276)
1 parent 2b04291 commit 9ad153a

File tree

1 file changed

+353
-0
lines changed

1 file changed

+353
-0
lines changed

flang/module/cudadevice.f90

Lines changed: 353 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,22 @@ attributes(device) subroutine threadfence_system()
7777

7878
! Math API
7979

80+
interface __fadd_rn
81+
attributes(device) real function __fadd_rn(a,b) bind(c, name='__nv_fadd_rn')
82+
!dir$ ignore_tkr (d) a, (d) b
83+
real, value :: a, b
84+
end function
85+
end interface
86+
public :: __fadd_rn
87+
88+
interface __fadd_rz
89+
attributes(device) real function __fadd_rz(a,b) bind(c, name='__nv_fadd_rz')
90+
!dir$ ignore_tkr (d) a, (d) b
91+
real, value :: a, b
92+
end function
93+
end interface
94+
public :: __fadd_rz
95+
8096
interface
8197
attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')
8298
real, intent(in), value :: x, y
@@ -93,6 +109,343 @@ attributes(device) subroutine threadfence_system()
93109
end interface
94110
public :: __fadd_ru
95111

112+
interface __fmul_rn
113+
attributes(device) real function __fmul_rn(a,b) bind(c, name='__nv_fmul_rn')
114+
!dir$ ignore_tkr (d) a, (d) b
115+
real, value :: a, b
116+
end function
117+
end interface
118+
public :: __fmul_rn
119+
120+
interface __fmul_rz
121+
attributes(device) real function __fmul_rz(a,b) bind(c, name='__nv_fmul_rz')
122+
!dir$ ignore_tkr (d) a, (d) b
123+
real, value :: a, b
124+
end function
125+
end interface
126+
public :: __fmul_rz
127+
128+
interface __fmul_ru
129+
attributes(device) real function __fmul_ru(a,b) bind(c, name='__nv_fmul_ru')
130+
!dir$ ignore_tkr (d) a, (d) b
131+
real, value :: a, b
132+
end function
133+
end interface
134+
public :: __fmul_ru
135+
136+
interface __fmul_rd
137+
attributes(device) real function __fmul_rd(a,b) bind(c, name='__nv_fmul_rd')
138+
!dir$ ignore_tkr (d) a, (d) b
139+
real, value :: a, b
140+
end function
141+
end interface
142+
public :: __fmul_rd
143+
144+
interface __fmaf_rn
145+
attributes(device) real function __fmaf_rn(a,b,c) bind(c, name='__nv_fmaf_rn')
146+
!dir$ ignore_tkr (d) a, (d) b, (d) c
147+
real, value :: a, b, c
148+
end function
149+
end interface
150+
public :: __fmaf_rn
151+
152+
interface __fmaf_rz
153+
attributes(device) real function __fmaf_rz(a,b,c) bind(c, name='__nv_fmaf_rz')
154+
!dir$ ignore_tkr (d) a, (d) b, (d) c
155+
real, value :: a, b, c
156+
end function
157+
end interface
158+
public :: __fmaf_rz
159+
160+
interface __fmaf_ru
161+
attributes(device) real function __fmaf_ru(a,b,c) bind(c, name='__nv_fmaf_ru')
162+
!dir$ ignore_tkr (d) a, (d) b, (d) c
163+
real, value :: a, b, c
164+
end function
165+
end interface
166+
public :: __fmaf_ru
167+
168+
interface __fmaf_rd
169+
attributes(device) real function __fmaf_rd(a,b,c) bind(c, name='__nv_fmaf_rd')
170+
!dir$ ignore_tkr (d) a, (d) b, (d) c
171+
real, value :: a, b, c
172+
end function
173+
end interface
174+
public :: __fmaf_rd
175+
176+
interface __frcp_rn
177+
attributes(device) real function __frcp_rn(a) bind(c, name='__nv_frcp_rn')
178+
!dir$ ignore_tkr (d) a
179+
real, value :: a
180+
end function
181+
end interface
182+
public :: __frcp_rn
183+
184+
interface __frcp_rz
185+
attributes(device) real function __frcp_rz(a) bind(c, name='__nv_frcp_rz')
186+
!dir$ ignore_tkr (d) a
187+
real, value :: a
188+
end function
189+
end interface
190+
public :: __frcp_rz
191+
192+
interface __frcp_ru
193+
attributes(device) real function __frcp_ru(a) bind(c, name='__nv_frcp_ru')
194+
!dir$ ignore_tkr (d) a
195+
real, value :: a
196+
end function
197+
end interface
198+
public :: __frcp_ru
199+
200+
interface __frcp_rd
201+
attributes(device) real function __frcp_rd(a) bind(c, name='__nv_frcp_rd')
202+
!dir$ ignore_tkr (d) a
203+
real, value :: a
204+
end function
205+
end interface
206+
public :: __frcp_rd
207+
208+
interface __fsqrt_rn
209+
attributes(device) real function __fsqrt_rn(a) bind(c, name='__nv_fsqrt_rn')
210+
!dir$ ignore_tkr (d) a
211+
real, value :: a
212+
end function
213+
end interface
214+
public :: __fsqrt_rn
215+
216+
interface __fsqrt_rz
217+
attributes(device) real function __fsqrt_rz(a) bind(c, name='__nv_fsqrt_rz')
218+
!dir$ ignore_tkr (d) a
219+
real, value :: a
220+
end function
221+
end interface
222+
public :: __fsqrt_rz
223+
224+
interface __fsqrt_ru
225+
attributes(device) real function __fsqrt_ru(a) bind(c, name='__nv_fsqrt_ru')
226+
!dir$ ignore_tkr (d) a
227+
real, value :: a
228+
end function
229+
end interface
230+
public :: __fsqrt_ru
231+
232+
interface __fsqrt_rd
233+
attributes(device) real function __fsqrt_rd(a) bind(c, name='__nv_fsqrt_rd')
234+
!dir$ ignore_tkr (d) a
235+
real, value :: a
236+
end function
237+
end interface
238+
public :: __fsqrt_rd
239+
240+
interface __fdiv_rn
241+
attributes(device) real function __fdiv_rn(a,b) bind(c, name='__nv_fdiv_rn')
242+
!dir$ ignore_tkr (d) a, (d) b
243+
real, value :: a, b
244+
end function
245+
end interface
246+
public :: __fdiv_rn
247+
248+
interface __fdiv_rz
249+
attributes(device) real function __fdiv_rz(a,b) bind(c, name='__nv_fdiv_rz')
250+
!dir$ ignore_tkr (d) a, (d) b
251+
real, value :: a, b
252+
end function
253+
end interface
254+
public :: __fdiv_rz
255+
256+
interface __fdiv_ru
257+
attributes(device) real function __fdiv_ru(a,b) bind(c, name='__nv_fdiv_ru')
258+
!dir$ ignore_tkr (d) a, (d) b
259+
real, value :: a, b
260+
end function
261+
end interface
262+
public :: __fdiv_ru
263+
264+
interface __fdiv_rd
265+
attributes(device) real function __fdiv_rd(a,b) bind(c, name='__nv_fdiv_rd')
266+
!dir$ ignore_tkr (d) a, (d) b
267+
real, value :: a, b
268+
end function
269+
end interface
270+
public :: __fdiv_rd
271+
272+
interface __dadd_rn
273+
attributes(device) real(8) function __dadd_rn(a,b) bind(c, name='__nv_dadd_rn')
274+
!dir$ ignore_tkr (d) a, (d) b
275+
real(8), value :: a, b
276+
end function
277+
end interface
278+
public :: __dadd_rn
279+
280+
interface __dadd_rz
281+
attributes(device) real(8) function __dadd_rz(a,b) bind(c, name='__nv_dadd_rz')
282+
!dir$ ignore_tkr (d) a, (d) b
283+
real(8), value :: a, b
284+
end function
285+
end interface
286+
public :: __dadd_rz
287+
288+
interface __dadd_ru
289+
attributes(device) real(8) function __dadd_ru(a,b) bind(c, name='__nv_dadd_ru')
290+
!dir$ ignore_tkr (d) a, (d) b
291+
real(8), value :: a, b
292+
end function
293+
end interface
294+
public :: __dadd_ru
295+
296+
interface __dadd_rd
297+
attributes(device) real(8) function __dadd_rd(a,b) bind(c, name='__nv_dadd_rd')
298+
!dir$ ignore_tkr (d) a, (d) b
299+
real(8), value :: a, b
300+
end function
301+
end interface
302+
public :: __dadd_rd
303+
304+
interface __dmul_rn
305+
attributes(device) real(8) function __dmul_rn(a,b) bind(c, name='__nv_dmul_rn')
306+
!dir$ ignore_tkr (d) a, (d) b
307+
real(8), value :: a, b
308+
end function
309+
end interface
310+
public :: __dmul_rn
311+
312+
interface __dmul_rz
313+
attributes(device) real(8) function __dmul_rz(a,b) bind(c, name='__nv_dmul_rz')
314+
!dir$ ignore_tkr (d) a, (d) b
315+
real(8), value :: a, b
316+
end function
317+
end interface
318+
public :: __dmul_rz
319+
320+
interface __dmul_ru
321+
attributes(device) real(8) function __dmul_ru(a,b) bind(c, name='__nv_dmul_ru')
322+
!dir$ ignore_tkr (d) a, (d) b
323+
real(8), value :: a, b
324+
end function
325+
end interface
326+
public :: __dmul_ru
327+
328+
interface __dmul_rd
329+
attributes(device) real(8) function __dmul_rd(a,b) bind(c, name='__nv_dmul_rd')
330+
!dir$ ignore_tkr (d) a, (d) b
331+
real(8), value :: a, b
332+
end function
333+
end interface
334+
public :: __dmul_rd
335+
336+
interface __fma_rn
337+
attributes(device) real(8) function __fma_rn(a,b,c) bind(c, name='__nv_fma_rn')
338+
!dir$ ignore_tkr (d) a, (d) b
339+
real(8), value :: a, b, c
340+
end function
341+
end interface
342+
public :: __fma_rn
343+
344+
interface __fma_rz
345+
attributes(device) real(8) function __fma_rz(a,b,c) bind(c, name='__nv_fma_rz')
346+
!dir$ ignore_tkr (d) a, (d) b
347+
real(8), value :: a, b, c
348+
end function
349+
end interface
350+
public :: __fma_rz
351+
352+
interface __fma_ru
353+
attributes(device) real(8) function __fma_ru(a,b,c) bind(c, name='__nv_fma_ru')
354+
!dir$ ignore_tkr (d) a, (d) b
355+
real(8), value :: a, b, c
356+
end function
357+
end interface
358+
public :: __fma_ru
359+
360+
interface __fma_rd
361+
attributes(device) real(8) function __fma_rd(a,b,c) bind(c, name='__nv_fma_rd')
362+
!dir$ ignore_tkr (d) a, (d) b
363+
real(8), value :: a, b, c
364+
end function
365+
end interface
366+
public :: __fma_rd
367+
368+
interface rsqrt
369+
attributes(device) real(4) function rsqrtf(x) bind(c,name='__nv_rsqrtf')
370+
real(4), value :: x
371+
end function
372+
attributes(device) real(8) function rsqrt(x) bind(c,name='__nv_rsqrt')
373+
real(8), value :: x
374+
end function
375+
end interface
376+
public :: rsqrt
377+
378+
interface signbit
379+
attributes(device) integer(4) function signbitf(x) bind(c,name='__nv_signbitf')
380+
real(4), value :: x
381+
end function
382+
attributes(device) integer(4) function signbit(x) bind(c,name='__nv_signbitd')
383+
real(8), value :: x
384+
end function
385+
end interface
386+
public :: signbit
387+
388+
interface sincos
389+
attributes(device) subroutine sincosf(x, y, z) bind(c,name='__nv_sincosf')
390+
real(4), value :: x
391+
real(4), device :: y
392+
real(4), device :: z
393+
end subroutine
394+
attributes(device) subroutine sincos(x, y, z) bind(c,name='__nv_sincos')
395+
real(8), value :: x
396+
real(8), device :: y
397+
real(8), device :: z
398+
end subroutine
399+
end interface
400+
public :: sincos
401+
402+
interface sincospi
403+
attributes(device) subroutine sincospif(x, y, z) bind(c,name='__nv_sincospif')
404+
real(4), value :: x
405+
real(4), device :: y
406+
real(4), device :: z
407+
end subroutine
408+
attributes(device) subroutine sincospi(x, y, z) bind(c,name='__nv_sincospi')
409+
real(8), value :: x
410+
real(8), device :: y
411+
real(8), device :: z
412+
end subroutine
413+
end interface
414+
public :: sincospi
415+
416+
interface mulhi
417+
attributes(device) integer function __mulhi(i,j) bind(c,name='__nv_mulhi')
418+
!dir$ ignore_tkr (d) i, (d) j
419+
integer, value :: i,j
420+
end function
421+
end interface
422+
public :: mulhi
423+
424+
interface umulhi
425+
attributes(device) integer function __umulhi(i,j) bind(c,name='__nv_umulhi')
426+
!dir$ ignore_tkr (d) i, (d) j
427+
integer, value :: i,j
428+
end function
429+
end interface
430+
public :: umulhi
431+
432+
interface mul64hi
433+
attributes(device) integer(8) function __mul64hi(i,j) bind(c,name='__nv_mul64hi')
434+
!dir$ ignore_tkr (d) i, (d) j
435+
integer(8), value :: i,j
436+
end function
437+
end interface
438+
public :: mul64hi
439+
440+
interface umul64hi
441+
attributes(device) integer(8) function __umul64hi(i,j) bind(c,name='__nv_umul64hi')
442+
!dir$ ignore_tkr (d) i, (d) j
443+
integer(8), value :: i,j
444+
end function
445+
end interface
446+
public :: umul64hi
447+
448+
96449
! Atomic Operations
97450

98451
interface atomicadd

0 commit comments

Comments
 (0)