[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