cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
1622 lines
50 KiB
Fortran
1622 lines
50 KiB
Fortran
!===-- module/cudedevice.f90 -----------------------------------------------===!
|
|
!
|
|
! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
! See https://llvm.org/LICENSE.txt for license information.
|
|
! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
!
|
|
!===------------------------------------------------------------------------===!
|
|
|
|
! CUDA Fortran procedures available in device subprogram
|
|
|
|
module cudadevice
|
|
use __cuda_device
|
|
use, intrinsic :: __fortran_builtins, only: dim3 => __builtin_dim3
|
|
use, intrinsic :: __fortran_builtins, only: c_devptr => __builtin_c_devptr
|
|
use, intrinsic :: __fortran_builtins, only: c_devloc => __builtin_c_devloc
|
|
implicit none
|
|
|
|
! Synchronization Functions
|
|
|
|
interface syncthreads
|
|
procedure :: syncthreads
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) integer function syncthreads_and(value)
|
|
integer, value :: value
|
|
end function
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) integer function syncthreads_count(value)
|
|
integer, value :: value
|
|
end function
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) integer function syncthreads_or(value)
|
|
integer, value :: value
|
|
end function
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) subroutine syncwarp(mask)
|
|
integer, value :: mask
|
|
end subroutine
|
|
end interface
|
|
|
|
! Memory Fences
|
|
|
|
interface
|
|
attributes(device) subroutine threadfence()
|
|
end subroutine
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) subroutine threadfence_block()
|
|
end subroutine
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) subroutine threadfence_system()
|
|
end subroutine
|
|
end interface
|
|
|
|
! 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
|
|
|
|
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
|
|
|
|
interface
|
|
attributes(device) function __fadd_rd(x, y) bind(c, name='__nv_fadd_rd')
|
|
real, intent(in), value :: x, y
|
|
real :: __fadd_rd
|
|
end function
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) function __fadd_ru(x, y) bind(c, name='__nv_fadd_ru')
|
|
real, intent(in), value :: x, y
|
|
real :: __fadd_ru
|
|
end function
|
|
end interface
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
interface
|
|
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
|
|
end interface
|
|
interface
|
|
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
|
|
interface sincos
|
|
procedure :: sincosf
|
|
procedure :: sincos
|
|
end interface
|
|
|
|
interface
|
|
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
|
|
end interface
|
|
interface
|
|
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
|
|
interface sincospi
|
|
procedure :: sincospif
|
|
procedure :: sincospi
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) real(4) function cospif(x) bind(c,name='__nv_cospif')
|
|
real(4), value :: x
|
|
end function
|
|
end interface
|
|
interface
|
|
attributes(device) real(8) function cospi(x) bind(c,name='__nv_cospi')
|
|
real(8), value :: x
|
|
end function
|
|
end interface
|
|
interface cospi
|
|
procedure :: cospif
|
|
procedure :: cospi
|
|
end interface
|
|
|
|
interface
|
|
attributes(device) real(4) function sinpif(x) bind(c,name='__nv_sinpif')
|
|
real(4), value :: x
|
|
end function
|
|
end interface
|
|
interface
|
|
attributes(device) real(8) function sinpi(x) bind(c,name='__nv_sinpi')
|
|
real(8), value :: x
|
|
end function
|
|
end interface
|
|
interface sinpi
|
|
procedure :: sinpif
|
|
procedure :: sinpi
|
|
end interface
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
interface __float2half_rn
|
|
attributes(device) real(2) function __float2half_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
real, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __half2float
|
|
attributes(device) real function __half2float(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
real(2), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __double2int_rn
|
|
attributes(device) integer function __double2int_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2int_rz
|
|
attributes(device) integer function __double2int_rz(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2int_ru
|
|
attributes(device) integer function __double2int_ru(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2int_rd
|
|
attributes(device) integer function __double2int_rd(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2uint_rn
|
|
attributes(device) integer function __double2uint_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2uint_rz
|
|
attributes(device) integer function __double2uint_rz(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2uint_ru
|
|
attributes(device) integer function __double2uint_ru(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2uint_rd
|
|
attributes(device) integer function __double2uint_rd(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2float_rn
|
|
attributes(device) real function __double2float_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2float_rz
|
|
attributes(device) real function __double2float_rz(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2float_ru
|
|
attributes(device) real function __double2float_ru(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2float_rd
|
|
attributes(device) real function __double2float_rd(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2loint
|
|
attributes(device) integer function __double2loint(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2hiint
|
|
attributes(device) integer function __double2hiint(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __hiloint2double
|
|
attributes(device) double precision function __hiloint2double(i, j) bind(c)
|
|
!dir$ ignore_tkr (d) i, (d) j
|
|
integer, value :: i, j
|
|
end function
|
|
end interface
|
|
|
|
interface __int2double_rn
|
|
attributes(device) double precision function __int2double_rn(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __uint2double_rn
|
|
attributes(device) double precision function __uint2double_rn(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ll_rn
|
|
attributes(device) integer(8) function __double2ll_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ll_rz
|
|
attributes(device) integer(8) function __double2ll_rz(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ll_ru
|
|
attributes(device) integer(8) function __double2ll_ru(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ll_rd
|
|
attributes(device) integer(8) function __double2ll_rd(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ull_rn
|
|
attributes(device) integer(8) function __double2ull_rn(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ull_rz
|
|
attributes(device) integer(8) function __double2ull_rz(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ull_ru
|
|
attributes(device) integer(8) function __double2ull_ru(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __double2ull_rd
|
|
attributes(device) integer(8) function __double2ull_rd(r) bind(c)
|
|
!dir$ ignore_tkr (d) r
|
|
double precision, value :: r
|
|
end function
|
|
end interface
|
|
|
|
interface __ll2double_rn
|
|
attributes(device) double precision function __ll2double_rn(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ll2double_rz
|
|
attributes(device) double precision function __ll2double_rz(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ll2double_ru
|
|
attributes(device) double precision function __ll2double_ru(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ll2double_rd
|
|
attributes(device) double precision function __ll2double_rd(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ull2double_rn
|
|
attributes(device) double precision function __ull2double_rn(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ull2double_rz
|
|
attributes(device) double precision function __ull2double_rz(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ull2double_ru
|
|
attributes(device) double precision function __ull2double_ru(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ull2double_rd
|
|
attributes(device) double precision function __ull2double_rd(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __mul24
|
|
attributes(device) integer function __mul24(i,j) bind(c)
|
|
!dir$ ignore_tkr (d) i, (d) j
|
|
integer, value :: i,j
|
|
end function
|
|
end interface
|
|
|
|
interface __umul24
|
|
attributes(device) integer function __umul24(i,j) bind(c)
|
|
!dir$ ignore_tkr (d) i, (d) j
|
|
integer, value :: i,j
|
|
end function
|
|
end interface
|
|
|
|
interface __dsqrt_ru
|
|
attributes(device) double precision function __dsqrt_ru(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
double precision, value :: x
|
|
end function
|
|
end interface
|
|
|
|
interface __dsqrt_rd
|
|
attributes(device) double precision function __dsqrt_rd(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
double precision, value :: x
|
|
end function
|
|
end interface
|
|
|
|
interface __ddiv_rn
|
|
attributes(device) double precision function __ddiv_rn(x,y) bind(c)
|
|
!dir$ ignore_tkr (d) x, (d) y
|
|
double precision, value :: x, y
|
|
end function
|
|
end interface
|
|
|
|
interface __ddiv_rz
|
|
attributes(device) double precision function __ddiv_rz(x,y) bind(c)
|
|
!dir$ ignore_tkr (d) x, (d) y
|
|
double precision, value :: x, y
|
|
end function
|
|
end interface
|
|
|
|
interface __ddiv_ru
|
|
attributes(device) double precision function __ddiv_ru(x,y) bind(c)
|
|
!dir$ ignore_tkr (d) x, (d) y
|
|
double precision, value :: x, y
|
|
end function
|
|
end interface
|
|
|
|
interface __ddiv_rd
|
|
attributes(device) double precision function __ddiv_rd(x,y) bind(c)
|
|
!dir$ ignore_tkr (d) x, (d) y
|
|
double precision, value :: x, y
|
|
end function
|
|
end interface
|
|
|
|
interface __clz
|
|
attributes(device) integer function __clz(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
attributes(device) integer function __clzll(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __ffs
|
|
attributes(device) integer function __ffs(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
attributes(device) integer function __ffsll(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __popc
|
|
attributes(device) integer function __popc(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
attributes(device) integer function __popcll(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
interface __brev
|
|
attributes(device) integer function __brev(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer, value :: i
|
|
end function
|
|
attributes(device) integer(8) function __brevll(i) bind(c)
|
|
!dir$ ignore_tkr (d) i
|
|
integer(8), value :: i
|
|
end function
|
|
end interface
|
|
|
|
! Atomic Operations
|
|
|
|
interface atomicadd
|
|
attributes(device) pure integer function atomicaddi(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
attributes(device) pure real function atomicaddf(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real, intent(inout) :: address
|
|
real, value :: val
|
|
end function
|
|
attributes(device) pure real(8) function atomicaddd(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real(8), intent(inout) :: address
|
|
real(8), value :: val
|
|
end function
|
|
attributes(device) pure integer(8) function atomicaddl(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicsub
|
|
attributes(device) pure integer function atomicsubi(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
attributes(device) pure real function atomicsubf(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real, intent(inout) :: address
|
|
real, value :: val
|
|
end function
|
|
attributes(device) pure real(8) function atomicsubd(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real(8), intent(inout) :: address
|
|
real(8), value :: val
|
|
end function
|
|
attributes(device) pure integer(8) function atomicsubl(address, val)
|
|
!dir$ ignore_tkr (d) address, (dk) val
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicmax
|
|
attributes(device) pure integer function atomicmaxi(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
attributes(device) pure real function atomicmaxf(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real, intent(inout) :: address
|
|
real, value :: val
|
|
end function
|
|
attributes(device) pure real(8) function atomicmaxd(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real(8), intent(inout) :: address
|
|
real(8), value :: val
|
|
end function
|
|
attributes(device) pure integer(8) function atomicmaxl(address, val)
|
|
!dir$ ignore_tkr (d) address, (dk) val
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicmin
|
|
attributes(device) pure integer function atomicmini(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
attributes(device) pure real function atomicminf(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real, intent(inout) :: address
|
|
real, value :: val
|
|
end function
|
|
attributes(device) pure real(8) function atomicmind(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
real(8), intent(inout) :: address
|
|
real(8), value :: val
|
|
end function
|
|
attributes(device) pure integer(8) function atomicminl(address, val)
|
|
!dir$ ignore_tkr (d) address, (dk) val
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicand
|
|
attributes(device) pure integer function atomicandi(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicor
|
|
attributes(device) pure integer function atomicori(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicinc
|
|
attributes(device) pure integer function atomicinci(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicdec
|
|
attributes(device) pure integer function atomicdeci(address, val)
|
|
!dir$ ignore_tkr (d) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomiccas
|
|
attributes(device) pure integer function atomiccasi(address, val, val2)
|
|
!dir$ ignore_tkr (rd) address, (d) val, (d) val2
|
|
integer, intent(inout) :: address
|
|
integer, value :: val, val2
|
|
end function
|
|
attributes(device) pure integer(8) function atomiccasul(address, val, val2)
|
|
!dir$ ignore_tkr (rd) address, (dk) val, (dk) val2
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val, val2
|
|
end function
|
|
attributes(device) pure real function atomiccasf(address, val, val2)
|
|
!dir$ ignore_tkr (rd) address, (d) val, (d) val2
|
|
real, intent(inout) :: address
|
|
real, value :: val, val2
|
|
end function
|
|
attributes(device) pure double precision function atomiccasd(address, val, val2)
|
|
!dir$ ignore_tkr (rd) address, (d) val, (d) val2
|
|
double precision, intent(inout) :: address
|
|
double precision, value :: val, val2
|
|
end function
|
|
end interface
|
|
|
|
interface atomicexch
|
|
attributes(device) pure integer function atomicexchi(address, val)
|
|
!dir$ ignore_tkr (rd) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
attributes(device) pure integer(8) function atomicexchul(address, val)
|
|
!dir$ ignore_tkr (rd) address, (dk) val
|
|
integer(8), intent(inout) :: address
|
|
integer(8), value :: val
|
|
end function
|
|
attributes(device) pure real function atomicexchf(address, val)
|
|
!dir$ ignore_tkr (rd) address, (d) val
|
|
real, intent(inout) :: address
|
|
real, value :: val
|
|
end function
|
|
attributes(device) pure double precision function atomicexchd(address, val)
|
|
!dir$ ignore_tkr (rd) address, (d) val
|
|
double precision, intent(inout) :: address
|
|
double precision, value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface atomicxor
|
|
attributes(device) pure integer function atomicxori(address, val)
|
|
!dir$ ignore_tkr (rd) address, (d) val
|
|
integer, intent(inout) :: address
|
|
integer, value :: val
|
|
end function
|
|
end interface
|
|
|
|
! Time function
|
|
|
|
interface
|
|
attributes(device) integer(8) function clock64()
|
|
end function
|
|
end interface
|
|
|
|
! Warp Match Functions
|
|
|
|
interface match_all_sync
|
|
attributes(device) integer function match_all_syncjj(mask, val, pred)
|
|
!dir$ ignore_tkr(d) mask, (d) val, (d) pred
|
|
integer(4), value :: mask
|
|
integer(4), value :: val
|
|
integer(4) :: pred
|
|
end function
|
|
attributes(device) integer function match_all_syncjx(mask, val, pred)
|
|
!dir$ ignore_tkr(d) mask, (d) val, (d) pred
|
|
integer(4), value :: mask
|
|
integer(8), value :: val
|
|
integer(4) :: pred
|
|
end function
|
|
attributes(device) integer function match_all_syncjf(mask, val, pred)
|
|
!dir$ ignore_tkr(d) mask, (d) val, (d) pred
|
|
integer(4), value :: mask
|
|
real(4), value :: val
|
|
integer(4) :: pred
|
|
end function
|
|
attributes(device) integer function match_all_syncjd(mask, val, pred)
|
|
!dir$ ignore_tkr(d) mask, (d) val, (d) pred
|
|
integer(4), value :: mask
|
|
real(8), value :: val
|
|
integer(4) :: pred
|
|
end function
|
|
end interface
|
|
|
|
interface match_any_sync
|
|
attributes(device) integer function match_any_syncjj(mask, val)
|
|
!dir$ ignore_tkr(d) mask, (d) val
|
|
integer(4), value :: mask
|
|
integer(4), value :: val
|
|
end function
|
|
attributes(device) integer function match_any_syncjx(mask, val)
|
|
!dir$ ignore_tkr(d) mask, (d) val
|
|
integer(4), value :: mask
|
|
integer(8), value :: val
|
|
end function
|
|
attributes(device) integer function match_any_syncjf(mask, val)
|
|
!dir$ ignore_tkr(d) mask, (d) val
|
|
integer(4), value :: mask
|
|
real(4), value :: val
|
|
end function
|
|
attributes(device) integer function match_any_syncjd(mask, val)
|
|
!dir$ ignore_tkr(d) mask, (d) val
|
|
integer(4), value :: mask
|
|
real(8), value :: val
|
|
end function
|
|
end interface
|
|
|
|
interface all_sync
|
|
attributes(device) integer function all_sync(mask, pred)
|
|
!dir$ ignore_tkr(d) mask, (td) pred
|
|
integer, value :: mask, pred
|
|
end function
|
|
end interface
|
|
|
|
interface any_sync
|
|
attributes(device) integer function any_sync(mask, pred)
|
|
!dir$ ignore_tkr(d) mask, (td) pred
|
|
integer, value :: mask, pred
|
|
end function
|
|
end interface
|
|
|
|
interface ballot_sync
|
|
attributes(device) integer function ballot_sync(mask, pred)
|
|
!dir$ ignore_tkr(d) mask, (td) pred
|
|
integer, value :: mask, pred
|
|
end function
|
|
end interface
|
|
|
|
! LDCG
|
|
interface __ldcg
|
|
attributes(device) pure integer(4) function __ldcg_i4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure integer(8) function __ldcg_i8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcg_cd(x) bind(c) result(y)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) x
|
|
type(c_devptr), intent(in) :: x
|
|
type(c_devptr) :: y
|
|
end function
|
|
attributes(device) pure real(2) function __ldcg_r2(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(4) function __ldcg_r4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(8) function __ldcg_r8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(4) function __ldcg_c4(x) &
|
|
bind(c,name='__ldcg_c4x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(8) function __ldcg_c8(x) &
|
|
bind(c,name='__ldcg_c8x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcg_i4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), dimension(4), intent(in) :: x
|
|
integer(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcg_i8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), dimension(2), intent(in) :: x
|
|
integer(8), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcg_r2x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), dimension(2), intent(in) :: x
|
|
real(2), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcg_r4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), dimension(4), intent(in) :: x
|
|
real(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcg_r8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), dimension(2), intent(in) :: x
|
|
real(8), dimension(2) :: y
|
|
end function
|
|
end interface
|
|
|
|
! LDCA
|
|
interface __ldca
|
|
attributes(device) pure integer(4) function __ldca_i4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure integer(8) function __ldca_i8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldca_cd(x) bind(c) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
import c_devptr
|
|
type(c_devptr), intent(in) :: x
|
|
type(c_devptr) :: y
|
|
end function
|
|
attributes(device) pure real(2) function __ldca_r2(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(4) function __ldca_r4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(8) function __ldca_r8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(4) function __ldca_c4(x) &
|
|
bind(c,name='__ldca_c4x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(8) function __ldca_c8(x) &
|
|
bind(c,name='__ldca_c8x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldca_i4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), dimension(4), intent(in) :: x
|
|
integer(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldca_i8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), dimension(2), intent(in) :: x
|
|
integer(8), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldca_r2x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), dimension(2), intent(in) :: x
|
|
real(2), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldca_r4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), dimension(4), intent(in) :: x
|
|
real(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldca_r8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), dimension(2), intent(in) :: x
|
|
real(8), dimension(2) :: y
|
|
end function
|
|
end interface
|
|
|
|
! LDCS
|
|
interface __ldcs
|
|
attributes(device) pure integer(4) function __ldcs_i4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure integer(8) function __ldcs_i8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcs_cd(x) bind(c) result(y)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) x
|
|
type(c_devptr), intent(in) :: x
|
|
type(c_devptr) :: y
|
|
end function
|
|
attributes(device) pure real(2) function __ldcs_r2(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(4) function __ldcs_r4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(8) function __ldcs_r8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(4) function __ldcs_c4(x) &
|
|
bind(c,name='__ldcs_c4x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(8) function __ldcs_c8(x) &
|
|
bind(c,name='__ldcs_c8x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcs_i4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), dimension(4), intent(in) :: x
|
|
integer(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcs_i8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), dimension(2), intent(in) :: x
|
|
integer(8), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcs_r2x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), dimension(2), intent(in) :: x
|
|
real(2), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcs_r4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), dimension(4), intent(in) :: x
|
|
real(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcs_r8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), dimension(2), intent(in) :: x
|
|
real(8), dimension(2) :: y
|
|
end function
|
|
end interface
|
|
|
|
! LDLU
|
|
interface __ldlu
|
|
attributes(device) pure integer(4) function __ldlu_i4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure integer(8) function __ldlu_i8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldlu_cd(x) bind(c) result(y)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) x
|
|
type(c_devptr), intent(in) :: x
|
|
type(c_devptr) :: y
|
|
end function
|
|
attributes(device) pure real(2) function __ldlu_r2(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(4) function __ldlu_r4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(8) function __ldlu_r8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(4) function __ldlu_c4(x) &
|
|
bind(c,name='__ldlu_c4x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(8) function __ldlu_c8(x) &
|
|
bind(c,name='__ldlu_c8x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldlu_i4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), dimension(4), intent(in) :: x
|
|
integer(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldlu_i8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), dimension(2), intent(in) :: x
|
|
integer(8), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldlu_r2x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), dimension(2), intent(in) :: x
|
|
real(2), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldlu_r4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), dimension(4), intent(in) :: x
|
|
real(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldlu_r8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), dimension(2), intent(in) :: x
|
|
real(8), dimension(2) :: y
|
|
end function
|
|
end interface
|
|
|
|
! LDCV
|
|
interface __ldcv
|
|
attributes(device) pure integer(4) function __ldcv_i4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure integer(8) function __ldcv_i8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcv_cd(x) bind(c) result(y)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) x
|
|
type(c_devptr), intent(in) :: x
|
|
type(c_devptr) :: y
|
|
end function
|
|
attributes(device) pure real(2) function __ldcv_r2(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(4) function __ldcv_r4(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure real(8) function __ldcv_r8(x) bind(c)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(4) function __ldcv_c4(x) &
|
|
bind(c,name='__ldcv_c4x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(4), intent(in) :: x
|
|
end function
|
|
attributes(device) pure complex(8) function __ldcv_c8(x) &
|
|
bind(c,name='__ldcv_c8x')
|
|
!dir$ ignore_tkr (d) x
|
|
complex(8), intent(in) :: x
|
|
end function
|
|
attributes(device) pure function __ldcv_i4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(4), dimension(4), intent(in) :: x
|
|
integer(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcv_i8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
integer(8), dimension(2), intent(in) :: x
|
|
integer(8), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcv_r2x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(2), dimension(2), intent(in) :: x
|
|
real(2), dimension(2) :: y
|
|
end function
|
|
attributes(device) pure function __ldcv_r4x4(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(4), dimension(4), intent(in) :: x
|
|
real(4), dimension(4) :: y
|
|
end function
|
|
attributes(device) pure function __ldcv_r8x2(x) result(y)
|
|
!dir$ ignore_tkr (d) x
|
|
real(8), dimension(2), intent(in) :: x
|
|
real(8), dimension(2) :: y
|
|
end function
|
|
end interface
|
|
|
|
! STWB
|
|
interface __stwb
|
|
attributes(device) pure subroutine __stwb_i4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), value :: x
|
|
integer(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_i8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), value :: x
|
|
integer(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_cd(y, x) bind(c)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
type(c_devptr), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), value :: x
|
|
real(2), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), value :: x
|
|
real(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), value :: x
|
|
real(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_c4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (rd) x
|
|
complex(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_c8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
complex(8), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_i4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_i8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r2x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwb_r8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
end interface
|
|
|
|
! STCG
|
|
interface __stcg
|
|
attributes(device) pure subroutine __stcg_i4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), value :: x
|
|
integer(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_i8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), value :: x
|
|
integer(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_cd(y, x) bind(c)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
type(c_devptr), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), value :: x
|
|
real(2), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), value :: x
|
|
real(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), value :: x
|
|
real(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_c4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (rd) x
|
|
complex(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_c8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
complex(8), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_i4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_i8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r2x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcg_r8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
end interface
|
|
|
|
! STCS
|
|
interface __stcs
|
|
attributes(device) pure subroutine __stcs_i4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), value :: x
|
|
integer(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_i8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), value :: x
|
|
integer(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_cd(y, x) bind(c)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
type(c_devptr), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), value :: x
|
|
real(2), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), value :: x
|
|
real(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), value :: x
|
|
real(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_c4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (rd) x
|
|
complex(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_c8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
complex(8), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_i4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_i8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r2x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stcs_r8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
end interface
|
|
|
|
! STWT
|
|
interface __stwt
|
|
attributes(device) pure subroutine __stwt_i4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), value :: x
|
|
integer(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_i8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), value :: x
|
|
integer(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_cd(y, x) bind(c)
|
|
import c_devptr
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
type(c_devptr), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), value :: x
|
|
real(2), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), value :: x
|
|
real(4), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), value :: x
|
|
real(8), device, intent(in) :: y
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_c4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (rd) x
|
|
complex(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_c8(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
complex(8), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_i4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_i8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
integer(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r2x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(2), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r4x4(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(4), dimension(4), device, intent(in) :: y, x
|
|
end subroutine
|
|
attributes(device) pure subroutine __stwt_r8x2(y, x) bind(c)
|
|
!dir$ ignore_tkr (d) y, (d) x
|
|
real(8), dimension(2), device, intent(in) :: y, x
|
|
end subroutine
|
|
end interface
|
|
|
|
interface
|
|
attributes(device,host) logical function on_device() bind(c)
|
|
end function
|
|
end interface
|
|
|
|
contains
|
|
|
|
attributes(device) subroutine syncthreads()
|
|
end subroutine
|
|
|
|
end module
|