[flang-commits] [flang] 9ad153a - [flang][cuda] Adding more bindings to libcudadevice (#125276)
via flang-commits
flang-commits at lists.llvm.org
Fri Jan 31 14:41:39 PST 2025
Author: Renaud Kauffmann
Date: 2025-01-31T14:41:34-08:00
New Revision: 9ad153a696e227de7177e54fc025251b05676515
URL: https://github.com/llvm/llvm-project/commit/9ad153a696e227de7177e54fc025251b05676515
DIFF: https://github.com/llvm/llvm-project/commit/9ad153a696e227de7177e54fc025251b05676515.diff
LOG: [flang][cuda] Adding more bindings to libcudadevice (#125276)
Added:
Modified:
flang/module/cudadevice.f90
Removed:
################################################################################
diff --git a/flang/module/cudadevice.f90 b/flang/module/cudadevice.f90
index af516a1866fa97..00e8b3db73ad87 100644
--- a/flang/module/cudadevice.f90
+++ b/flang/module/cudadevice.f90
@@ -77,6 +77,22 @@ attributes(device) subroutine threadfence_system()
! Math API
+ interface __fadd_rn
+ attributes(device) real function __fadd_rn(a,b) bind(c, name='__nv_fadd_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fadd_rn
+
+ interface __fadd_rz
+ attributes(device) real function __fadd_rz(a,b) bind(c, name='__nv_fadd_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fadd_rz
+
interface
attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')
real, intent(in), value :: x, y
@@ -93,6 +109,343 @@ attributes(device) subroutine threadfence_system()
end interface
public :: __fadd_ru
+ interface __fmul_rn
+ attributes(device) real function __fmul_rn(a,b) bind(c, name='__nv_fmul_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fmul_rn
+
+ interface __fmul_rz
+ attributes(device) real function __fmul_rz(a,b) bind(c, name='__nv_fmul_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fmul_rz
+
+ interface __fmul_ru
+ attributes(device) real function __fmul_ru(a,b) bind(c, name='__nv_fmul_ru')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fmul_ru
+
+ interface __fmul_rd
+ attributes(device) real function __fmul_rd(a,b) bind(c, name='__nv_fmul_rd')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fmul_rd
+
+ interface __fmaf_rn
+ attributes(device) real function __fmaf_rn(a,b,c) bind(c, name='__nv_fmaf_rn')
+ !dir$ ignore_tkr (d) a, (d) b, (d) c
+ real, value :: a, b, c
+ end function
+ end interface
+ public :: __fmaf_rn
+
+ interface __fmaf_rz
+ attributes(device) real function __fmaf_rz(a,b,c) bind(c, name='__nv_fmaf_rz')
+ !dir$ ignore_tkr (d) a, (d) b, (d) c
+ real, value :: a, b, c
+ end function
+ end interface
+ public :: __fmaf_rz
+
+ interface __fmaf_ru
+ attributes(device) real function __fmaf_ru(a,b,c) bind(c, name='__nv_fmaf_ru')
+ !dir$ ignore_tkr (d) a, (d) b, (d) c
+ real, value :: a, b, c
+ end function
+ end interface
+ public :: __fmaf_ru
+
+ interface __fmaf_rd
+ attributes(device) real function __fmaf_rd(a,b,c) bind(c, name='__nv_fmaf_rd')
+ !dir$ ignore_tkr (d) a, (d) b, (d) c
+ real, value :: a, b, c
+ end function
+ end interface
+ public :: __fmaf_rd
+
+ interface __frcp_rn
+ attributes(device) real function __frcp_rn(a) bind(c, name='__nv_frcp_rn')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __frcp_rn
+
+ interface __frcp_rz
+ attributes(device) real function __frcp_rz(a) bind(c, name='__nv_frcp_rz')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __frcp_rz
+
+ interface __frcp_ru
+ attributes(device) real function __frcp_ru(a) bind(c, name='__nv_frcp_ru')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __frcp_ru
+
+ interface __frcp_rd
+ attributes(device) real function __frcp_rd(a) bind(c, name='__nv_frcp_rd')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __frcp_rd
+
+ interface __fsqrt_rn
+ attributes(device) real function __fsqrt_rn(a) bind(c, name='__nv_fsqrt_rn')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __fsqrt_rn
+
+ interface __fsqrt_rz
+ attributes(device) real function __fsqrt_rz(a) bind(c, name='__nv_fsqrt_rz')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __fsqrt_rz
+
+ interface __fsqrt_ru
+ attributes(device) real function __fsqrt_ru(a) bind(c, name='__nv_fsqrt_ru')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __fsqrt_ru
+
+ interface __fsqrt_rd
+ attributes(device) real function __fsqrt_rd(a) bind(c, name='__nv_fsqrt_rd')
+ !dir$ ignore_tkr (d) a
+ real, value :: a
+ end function
+ end interface
+ public :: __fsqrt_rd
+
+ interface __fdiv_rn
+ attributes(device) real function __fdiv_rn(a,b) bind(c, name='__nv_fdiv_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fdiv_rn
+
+ interface __fdiv_rz
+ attributes(device) real function __fdiv_rz(a,b) bind(c, name='__nv_fdiv_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fdiv_rz
+
+ interface __fdiv_ru
+ attributes(device) real function __fdiv_ru(a,b) bind(c, name='__nv_fdiv_ru')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fdiv_ru
+
+ interface __fdiv_rd
+ attributes(device) real function __fdiv_rd(a,b) bind(c, name='__nv_fdiv_rd')
+ !dir$ ignore_tkr (d) a, (d) b
+ real, value :: a, b
+ end function
+ end interface
+ public :: __fdiv_rd
+
+ interface __dadd_rn
+ attributes(device) real(8) function __dadd_rn(a,b) bind(c, name='__nv_dadd_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dadd_rn
+
+ interface __dadd_rz
+ attributes(device) real(8) function __dadd_rz(a,b) bind(c, name='__nv_dadd_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dadd_rz
+
+ interface __dadd_ru
+ attributes(device) real(8) function __dadd_ru(a,b) bind(c, name='__nv_dadd_ru')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dadd_ru
+
+ interface __dadd_rd
+ attributes(device) real(8) function __dadd_rd(a,b) bind(c, name='__nv_dadd_rd')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dadd_rd
+
+ interface __dmul_rn
+ attributes(device) real(8) function __dmul_rn(a,b) bind(c, name='__nv_dmul_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dmul_rn
+
+ interface __dmul_rz
+ attributes(device) real(8) function __dmul_rz(a,b) bind(c, name='__nv_dmul_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dmul_rz
+
+ interface __dmul_ru
+ attributes(device) real(8) function __dmul_ru(a,b) bind(c, name='__nv_dmul_ru')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dmul_ru
+
+ interface __dmul_rd
+ attributes(device) real(8) function __dmul_rd(a,b) bind(c, name='__nv_dmul_rd')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b
+ end function
+ end interface
+ public :: __dmul_rd
+
+ interface __fma_rn
+ attributes(device) real(8) function __fma_rn(a,b,c) bind(c, name='__nv_fma_rn')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b, c
+ end function
+ end interface
+ public :: __fma_rn
+
+ interface __fma_rz
+ attributes(device) real(8) function __fma_rz(a,b,c) bind(c, name='__nv_fma_rz')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b, c
+ end function
+ end interface
+ public :: __fma_rz
+
+ interface __fma_ru
+ attributes(device) real(8) function __fma_ru(a,b,c) bind(c, name='__nv_fma_ru')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b, c
+ end function
+ end interface
+ public :: __fma_ru
+
+ interface __fma_rd
+ attributes(device) real(8) function __fma_rd(a,b,c) bind(c, name='__nv_fma_rd')
+ !dir$ ignore_tkr (d) a, (d) b
+ real(8), value :: a, b, c
+ end function
+ end interface
+ public :: __fma_rd
+
+ interface rsqrt
+ attributes(device) real(4) function rsqrtf(x) bind(c,name='__nv_rsqrtf')
+ real(4), value :: x
+ end function
+ attributes(device) real(8) function rsqrt(x) bind(c,name='__nv_rsqrt')
+ real(8), value :: x
+ end function
+ end interface
+ public :: rsqrt
+
+ interface signbit
+ attributes(device) integer(4) function signbitf(x) bind(c,name='__nv_signbitf')
+ real(4), value :: x
+ end function
+ attributes(device) integer(4) function signbit(x) bind(c,name='__nv_signbitd')
+ real(8), value :: x
+ end function
+ end interface
+ public :: signbit
+
+ interface sincos
+ attributes(device) subroutine sincosf(x, y, z) bind(c,name='__nv_sincosf')
+ real(4), value :: x
+ real(4), device :: y
+ real(4), device :: z
+ end subroutine
+ attributes(device) subroutine sincos(x, y, z) bind(c,name='__nv_sincos')
+ real(8), value :: x
+ real(8), device :: y
+ real(8), device :: z
+ end subroutine
+ end interface
+ public :: sincos
+
+ interface sincospi
+ attributes(device) subroutine sincospif(x, y, z) bind(c,name='__nv_sincospif')
+ real(4), value :: x
+ real(4), device :: y
+ real(4), device :: z
+ end subroutine
+ attributes(device) subroutine sincospi(x, y, z) bind(c,name='__nv_sincospi')
+ real(8), value :: x
+ real(8), device :: y
+ real(8), device :: z
+ end subroutine
+ end interface
+ public :: sincospi
+
+ interface mulhi
+ attributes(device) integer function __mulhi(i,j) bind(c,name='__nv_mulhi')
+ !dir$ ignore_tkr (d) i, (d) j
+ integer, value :: i,j
+ end function
+ end interface
+ public :: mulhi
+
+ interface umulhi
+ attributes(device) integer function __umulhi(i,j) bind(c,name='__nv_umulhi')
+ !dir$ ignore_tkr (d) i, (d) j
+ integer, value :: i,j
+ end function
+ end interface
+ public :: umulhi
+
+ interface mul64hi
+ attributes(device) integer(8) function __mul64hi(i,j) bind(c,name='__nv_mul64hi')
+ !dir$ ignore_tkr (d) i, (d) j
+ integer(8), value :: i,j
+ end function
+ end interface
+ public :: mul64hi
+
+ interface umul64hi
+ attributes(device) integer(8) function __umul64hi(i,j) bind(c,name='__nv_umul64hi')
+ !dir$ ignore_tkr (d) i, (d) j
+ integer(8), value :: i,j
+ end function
+ end interface
+ public :: umul64hi
+
+
! Atomic Operations
interface atomicadd
More information about the flang-commits
mailing list