Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
353 changes: 353 additions & 0 deletions flang/module/cudadevice.f90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down