110d565efSmrg !  OpenACC Runtime Library Definitions.			-*- mode: fortran -*-
210d565efSmrg 
3*ec02198aSmrg !  Copyright (C) 2014-2020 Free Software Foundation, Inc.
410d565efSmrg 
510d565efSmrg !  Contributed by Tobias Burnus <burnus@net-b.de>
610d565efSmrg !              and Mentor Embedded.
710d565efSmrg 
810d565efSmrg !  This file is part of the GNU Offloading and Multi Processing Library
910d565efSmrg !  (libgomp).
1010d565efSmrg 
1110d565efSmrg !  Libgomp is free software; you can redistribute it and/or modify it
1210d565efSmrg !  under the terms of the GNU General Public License as published by
1310d565efSmrg !  the Free Software Foundation; either version 3, or (at your option)
1410d565efSmrg !  any later version.
1510d565efSmrg 
1610d565efSmrg !  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
1710d565efSmrg !  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1810d565efSmrg !  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
1910d565efSmrg !  more details.
2010d565efSmrg 
2110d565efSmrg !  Under Section 7 of GPL version 3, you are granted additional
2210d565efSmrg !  permissions described in the GCC Runtime Library Exception, version
2310d565efSmrg !  3.1, as published by the Free Software Foundation.
2410d565efSmrg 
2510d565efSmrg !  You should have received a copy of the GNU General Public License and
2610d565efSmrg !  a copy of the GCC Runtime Library Exception along with this program;
2710d565efSmrg !  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2810d565efSmrg !  <http://www.gnu.org/licenses/>.
2910d565efSmrg 
3010d565efSmrg ! NOTE: Due to the use of dimension (..), the code only works when compiled
3110d565efSmrg ! with -std=f2008ts/gnu/legacy but not with other standard settings.
3210d565efSmrg ! Alternatively, the user can use the module version, which permits
3310d565efSmrg ! compilation with -std=f95.
3410d565efSmrg 
35*ec02198aSmrg ! Keep in sync with openacc.f90 and config/accel/openacc.f90.
36*ec02198aSmrg 
3710d565efSmrg       integer, parameter :: acc_device_kind = 4
3810d565efSmrg 
3910d565efSmrg !     Keep in sync with include/gomp-constants.h.
40*ec02198aSmrg       integer (acc_device_kind), parameter :: acc_device_current = -1
4110d565efSmrg       integer (acc_device_kind), parameter :: acc_device_none = 0
4210d565efSmrg       integer (acc_device_kind), parameter :: acc_device_default = 1
4310d565efSmrg       integer (acc_device_kind), parameter :: acc_device_host = 2
4410d565efSmrg !     integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
4510d565efSmrg !     removed.
4610d565efSmrg       integer (acc_device_kind), parameter :: acc_device_not_host = 4
4710d565efSmrg       integer (acc_device_kind), parameter :: acc_device_nvidia = 5
48*ec02198aSmrg       integer (acc_device_kind), parameter :: acc_device_radeon = 8
49*ec02198aSmrg 
50*ec02198aSmrg       integer, parameter :: acc_device_property_kind = 4
51*ec02198aSmrg ! OpenACC 2.6/2.7/3.0 used acc_device_property; in a spec update the
52*ec02198aSmrg ! missing '_kind' was added for consistency.  For backward compatibility, keep:
53*ec02198aSmrg       integer, parameter :: acc_device_property                         &
54*ec02198aSmrg      &    = acc_device_property_kind
55*ec02198aSmrg 
56*ec02198aSmrg       integer (acc_device_property_kind), parameter ::                  &
57*ec02198aSmrg      &    acc_property_memory = 1
58*ec02198aSmrg       integer (acc_device_property_kind), parameter ::                  &
59*ec02198aSmrg      &    acc_property_free_memory = 2
60*ec02198aSmrg       integer (acc_device_property_kind), parameter ::                  &
61*ec02198aSmrg      &    acc_property_name = int(Z'10001')
62*ec02198aSmrg       integer (acc_device_property_kind), parameter ::                  &
63*ec02198aSmrg      &    acc_property_vendor = int(Z'10002')
64*ec02198aSmrg       integer (acc_device_property_kind), parameter ::                  &
65*ec02198aSmrg      &    acc_property_driver = int(Z'10003')
6610d565efSmrg 
6710d565efSmrg       integer, parameter :: acc_handle_kind = 4
6810d565efSmrg 
6910d565efSmrg !     Keep in sync with include/gomp-constants.h.
7010d565efSmrg       integer (acc_handle_kind), parameter :: acc_async_noval = -1
7110d565efSmrg       integer (acc_handle_kind), parameter :: acc_async_sync = -2
7210d565efSmrg 
73*ec02198aSmrg       integer, parameter :: openacc_version = 201711
7410d565efSmrg 
7510d565efSmrg       interface acc_get_num_devices
76*ec02198aSmrg         function acc_get_num_devices_h (devicetype)
7710d565efSmrg           import acc_device_kind
7810d565efSmrg           integer acc_get_num_devices_h
79*ec02198aSmrg           integer (acc_device_kind) devicetype
8010d565efSmrg         end function
8110d565efSmrg       end interface
8210d565efSmrg 
8310d565efSmrg       interface acc_set_device_type
84*ec02198aSmrg         subroutine acc_set_device_type_h (devicetype)
8510d565efSmrg           import acc_device_kind
86*ec02198aSmrg           integer (acc_device_kind) devicetype
8710d565efSmrg         end subroutine
8810d565efSmrg       end interface
8910d565efSmrg 
9010d565efSmrg       interface acc_get_device_type
9110d565efSmrg         function acc_get_device_type_h ()
9210d565efSmrg           import acc_device_kind
9310d565efSmrg           integer (acc_device_kind) acc_get_device_type_h
9410d565efSmrg         end function
9510d565efSmrg       end interface
9610d565efSmrg 
9710d565efSmrg       interface acc_set_device_num
98*ec02198aSmrg         subroutine acc_set_device_num_h (devicenum, devicetype)
9910d565efSmrg           import acc_device_kind
100*ec02198aSmrg           integer devicenum
101*ec02198aSmrg           integer (acc_device_kind) devicetype
10210d565efSmrg         end subroutine
10310d565efSmrg       end interface
10410d565efSmrg 
10510d565efSmrg       interface acc_get_device_num
106*ec02198aSmrg         function acc_get_device_num_h (devicetype)
10710d565efSmrg           import acc_device_kind
10810d565efSmrg           integer acc_get_device_num_h
109*ec02198aSmrg           integer (acc_device_kind) devicetype
11010d565efSmrg         end function
11110d565efSmrg       end interface
11210d565efSmrg 
113*ec02198aSmrg       interface acc_get_property
114*ec02198aSmrg         function acc_get_property_h (devicenum, devicetype,             &
115*ec02198aSmrg      &                               property)
116*ec02198aSmrg           use iso_c_binding, only: c_size_t
117*ec02198aSmrg           import acc_device_kind, acc_device_property_kind
118*ec02198aSmrg           implicit none (type, external)
119*ec02198aSmrg           integer (c_size_t) :: acc_get_property_h
120*ec02198aSmrg           integer, value :: devicenum
121*ec02198aSmrg           integer (acc_device_kind), value :: devicetype
122*ec02198aSmrg           integer (acc_device_property_kind), value :: property
123*ec02198aSmrg         end function
124*ec02198aSmrg       end interface
125*ec02198aSmrg 
126*ec02198aSmrg       interface acc_get_property_string
127*ec02198aSmrg         subroutine acc_get_property_string_h (devicenum, devicetype,    &
128*ec02198aSmrg      &                                        property, string)
129*ec02198aSmrg           import acc_device_kind, acc_device_property_kind
130*ec02198aSmrg           implicit none (type, external)
131*ec02198aSmrg           integer, value :: devicenum
132*ec02198aSmrg           integer (acc_device_kind), value :: devicetype
133*ec02198aSmrg           integer (acc_device_property_kind), value :: property
134*ec02198aSmrg           character (*) :: string
135*ec02198aSmrg         end subroutine
136*ec02198aSmrg       end interface
137*ec02198aSmrg 
13810d565efSmrg       interface acc_async_test
139*ec02198aSmrg         function acc_async_test_h (arg)
14010d565efSmrg           logical acc_async_test_h
141*ec02198aSmrg           integer arg
14210d565efSmrg         end function
14310d565efSmrg       end interface
14410d565efSmrg 
14510d565efSmrg       interface acc_async_test_all
14610d565efSmrg         function acc_async_test_all_h ()
14710d565efSmrg           logical acc_async_test_all_h
14810d565efSmrg         end function
14910d565efSmrg       end interface
15010d565efSmrg 
15110d565efSmrg       interface acc_wait
152*ec02198aSmrg         subroutine acc_wait_h (arg)
153*ec02198aSmrg           integer arg
15410d565efSmrg         end subroutine
15510d565efSmrg       end interface
15610d565efSmrg 
157c7a68eb7Smrg !     acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
158c7a68eb7Smrg       interface acc_async_wait
159c7a68eb7Smrg         procedure :: acc_wait_h
160c7a68eb7Smrg       end interface
161c7a68eb7Smrg 
16210d565efSmrg       interface acc_wait_async
163*ec02198aSmrg         subroutine acc_wait_async_h (arg, async)
164*ec02198aSmrg           integer arg, async
16510d565efSmrg         end subroutine
16610d565efSmrg       end interface
16710d565efSmrg 
16810d565efSmrg       interface acc_wait_all
16910d565efSmrg         subroutine acc_wait_all_h ()
17010d565efSmrg         end subroutine
17110d565efSmrg       end interface
17210d565efSmrg 
173c7a68eb7Smrg !     acc_async_wait_all is an OpenACC 1.0 compatibility name for
174c7a68eb7Smrg !     acc_wait_all.
175c7a68eb7Smrg       interface acc_async_wait_all
176c7a68eb7Smrg         procedure :: acc_wait_all_h
177c7a68eb7Smrg       end interface
178c7a68eb7Smrg 
17910d565efSmrg       interface acc_wait_all_async
180*ec02198aSmrg         subroutine acc_wait_all_async_h (async)
181*ec02198aSmrg           integer async
18210d565efSmrg         end subroutine
18310d565efSmrg       end interface
18410d565efSmrg 
18510d565efSmrg       interface acc_init
18610d565efSmrg         subroutine acc_init_h (devicetype)
18710d565efSmrg           import acc_device_kind
18810d565efSmrg           integer (acc_device_kind) devicetype
18910d565efSmrg         end subroutine
19010d565efSmrg       end interface
19110d565efSmrg 
19210d565efSmrg       interface acc_shutdown
19310d565efSmrg         subroutine acc_shutdown_h (devicetype)
19410d565efSmrg           import acc_device_kind
19510d565efSmrg           integer (acc_device_kind) devicetype
19610d565efSmrg         end subroutine
19710d565efSmrg       end interface
19810d565efSmrg 
19910d565efSmrg       interface acc_on_device
20010d565efSmrg         function acc_on_device_h (devicetype)
20110d565efSmrg           import acc_device_kind
20210d565efSmrg           logical acc_on_device_h
20310d565efSmrg           integer (acc_device_kind) devicetype
20410d565efSmrg         end function
20510d565efSmrg       end interface
20610d565efSmrg 
20710d565efSmrg       ! acc_malloc: Only available in C/C++
20810d565efSmrg       ! acc_free: Only available in C/C++
20910d565efSmrg 
21010d565efSmrg       interface acc_copyin
21110d565efSmrg         subroutine acc_copyin_32_h (a, len)
21210d565efSmrg           use iso_c_binding, only: c_int32_t
21310d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
21410d565efSmrg           type (*), dimension (*) :: a
21510d565efSmrg           integer (c_int32_t) len
21610d565efSmrg         end subroutine
21710d565efSmrg 
21810d565efSmrg         subroutine acc_copyin_64_h (a, len)
21910d565efSmrg           use iso_c_binding, only: c_int64_t
22010d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
22110d565efSmrg           type (*), dimension (*) :: a
22210d565efSmrg           integer (c_int64_t) len
22310d565efSmrg         end subroutine
22410d565efSmrg 
22510d565efSmrg         subroutine acc_copyin_array_h (a)
22610d565efSmrg           type (*), dimension (..), contiguous :: a
22710d565efSmrg           end subroutine
22810d565efSmrg       end interface
22910d565efSmrg 
23010d565efSmrg       interface acc_present_or_copyin
23110d565efSmrg         subroutine acc_present_or_copyin_32_h (a, len)
23210d565efSmrg           use iso_c_binding, only: c_int32_t
23310d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
23410d565efSmrg           type (*), dimension (*) :: a
23510d565efSmrg           integer (c_int32_t) len
23610d565efSmrg         end subroutine
23710d565efSmrg 
23810d565efSmrg         subroutine acc_present_or_copyin_64_h (a, len)
23910d565efSmrg           use iso_c_binding, only: c_int64_t
24010d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
24110d565efSmrg           type (*), dimension (*) :: a
24210d565efSmrg           integer (c_int64_t) len
24310d565efSmrg         end subroutine
24410d565efSmrg 
24510d565efSmrg         subroutine acc_present_or_copyin_array_h (a)
24610d565efSmrg           type (*), dimension (..), contiguous :: a
24710d565efSmrg           end subroutine
24810d565efSmrg       end interface
24910d565efSmrg 
25010d565efSmrg       interface acc_pcopyin
251c7a68eb7Smrg         procedure :: acc_present_or_copyin_32_h
252c7a68eb7Smrg         procedure :: acc_present_or_copyin_64_h
253c7a68eb7Smrg         procedure :: acc_present_or_copyin_array_h
25410d565efSmrg       end interface
25510d565efSmrg 
25610d565efSmrg       interface acc_create
25710d565efSmrg         subroutine acc_create_32_h (a, len)
25810d565efSmrg           use iso_c_binding, only: c_int32_t
25910d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
26010d565efSmrg           type (*), dimension (*) :: a
26110d565efSmrg           integer (c_int32_t) len
26210d565efSmrg         end subroutine
26310d565efSmrg 
26410d565efSmrg         subroutine acc_create_64_h (a, len)
26510d565efSmrg           use iso_c_binding, only: c_int64_t
26610d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
26710d565efSmrg           type (*), dimension (*) :: a
26810d565efSmrg           integer (c_int64_t) len
26910d565efSmrg         end subroutine
27010d565efSmrg 
27110d565efSmrg         subroutine acc_create_array_h (a)
27210d565efSmrg           type (*), dimension (..), contiguous :: a
27310d565efSmrg           end subroutine
27410d565efSmrg       end interface
27510d565efSmrg 
27610d565efSmrg       interface acc_present_or_create
27710d565efSmrg         subroutine acc_present_or_create_32_h (a, len)
27810d565efSmrg           use iso_c_binding, only: c_int32_t
27910d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
28010d565efSmrg           type (*), dimension (*) :: a
28110d565efSmrg           integer (c_int32_t) len
28210d565efSmrg         end subroutine
28310d565efSmrg 
28410d565efSmrg         subroutine acc_present_or_create_64_h (a, len)
28510d565efSmrg           use iso_c_binding, only: c_int64_t
28610d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
28710d565efSmrg           type (*), dimension (*) :: a
28810d565efSmrg           integer (c_int64_t) len
28910d565efSmrg         end subroutine
29010d565efSmrg 
29110d565efSmrg         subroutine acc_present_or_create_array_h (a)
29210d565efSmrg           type (*), dimension (..), contiguous :: a
29310d565efSmrg           end subroutine
29410d565efSmrg       end interface
29510d565efSmrg 
29610d565efSmrg       interface acc_pcreate
297c7a68eb7Smrg         procedure :: acc_present_or_create_32_h
298c7a68eb7Smrg         procedure :: acc_present_or_create_64_h
299c7a68eb7Smrg         procedure :: acc_present_or_create_array_h
30010d565efSmrg       end interface
30110d565efSmrg 
30210d565efSmrg       interface acc_copyout
30310d565efSmrg         subroutine acc_copyout_32_h (a, len)
30410d565efSmrg           use iso_c_binding, only: c_int32_t
30510d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
30610d565efSmrg           type (*), dimension (*) :: a
30710d565efSmrg           integer (c_int32_t) len
30810d565efSmrg         end subroutine
30910d565efSmrg 
31010d565efSmrg         subroutine acc_copyout_64_h (a, len)
31110d565efSmrg           use iso_c_binding, only: c_int64_t
31210d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
31310d565efSmrg           type (*), dimension (*) :: a
31410d565efSmrg           integer (c_int64_t) len
31510d565efSmrg         end subroutine
31610d565efSmrg 
31710d565efSmrg         subroutine acc_copyout_array_h (a)
31810d565efSmrg           type (*), dimension (..), contiguous :: a
31910d565efSmrg         end subroutine
32010d565efSmrg       end interface
32110d565efSmrg 
3220fc04c29Smrg       interface acc_copyout_finalize
3230fc04c29Smrg         subroutine acc_copyout_finalize_32_h (a, len)
3240fc04c29Smrg           use iso_c_binding, only: c_int32_t
3250fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
3260fc04c29Smrg           type (*), dimension (*) :: a
3270fc04c29Smrg           integer (c_int32_t) len
3280fc04c29Smrg         end subroutine
3290fc04c29Smrg 
3300fc04c29Smrg         subroutine acc_copyout_finalize_64_h (a, len)
3310fc04c29Smrg           use iso_c_binding, only: c_int64_t
3320fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
3330fc04c29Smrg           type (*), dimension (*) :: a
3340fc04c29Smrg           integer (c_int64_t) len
3350fc04c29Smrg         end subroutine
3360fc04c29Smrg 
3370fc04c29Smrg         subroutine acc_copyout_finalize_array_h (a)
3380fc04c29Smrg           type (*), dimension (..), contiguous :: a
3390fc04c29Smrg         end subroutine
3400fc04c29Smrg       end interface
3410fc04c29Smrg 
34210d565efSmrg       interface acc_delete
34310d565efSmrg         subroutine acc_delete_32_h (a, len)
34410d565efSmrg           use iso_c_binding, only: c_int32_t
34510d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
34610d565efSmrg           type (*), dimension (*) :: a
34710d565efSmrg           integer (c_int32_t) len
34810d565efSmrg         end subroutine
34910d565efSmrg 
35010d565efSmrg         subroutine acc_delete_64_h (a, len)
35110d565efSmrg           use iso_c_binding, only: c_int64_t
35210d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
35310d565efSmrg           type (*), dimension (*) :: a
35410d565efSmrg           integer (c_int64_t) len
35510d565efSmrg         end subroutine
35610d565efSmrg 
35710d565efSmrg         subroutine acc_delete_array_h (a)
35810d565efSmrg           type (*), dimension (..), contiguous :: a
35910d565efSmrg         end subroutine
36010d565efSmrg       end interface
36110d565efSmrg 
3620fc04c29Smrg       interface acc_delete_finalize
3630fc04c29Smrg         subroutine acc_delete_finalize_32_h (a, len)
3640fc04c29Smrg           use iso_c_binding, only: c_int32_t
3650fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
3660fc04c29Smrg           type (*), dimension (*) :: a
3670fc04c29Smrg           integer (c_int32_t) len
3680fc04c29Smrg         end subroutine
3690fc04c29Smrg 
3700fc04c29Smrg         subroutine acc_delete_finalize_64_h (a, len)
3710fc04c29Smrg           use iso_c_binding, only: c_int64_t
3720fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
3730fc04c29Smrg           type (*), dimension (*) :: a
3740fc04c29Smrg           integer (c_int64_t) len
3750fc04c29Smrg         end subroutine
3760fc04c29Smrg 
3770fc04c29Smrg         subroutine acc_delete_finalize_array_h (a)
3780fc04c29Smrg           type (*), dimension (..), contiguous :: a
3790fc04c29Smrg         end subroutine
3800fc04c29Smrg       end interface
3810fc04c29Smrg 
38210d565efSmrg       interface acc_update_device
38310d565efSmrg         subroutine acc_update_device_32_h (a, len)
38410d565efSmrg           use iso_c_binding, only: c_int32_t
38510d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
38610d565efSmrg           type (*), dimension (*) :: a
38710d565efSmrg           integer (c_int32_t) len
38810d565efSmrg         end subroutine
38910d565efSmrg 
39010d565efSmrg         subroutine acc_update_device_64_h (a, len)
39110d565efSmrg           use iso_c_binding, only: c_int64_t
39210d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
39310d565efSmrg           type (*), dimension (*) :: a
39410d565efSmrg           integer (c_int64_t) len
39510d565efSmrg         end subroutine
39610d565efSmrg 
39710d565efSmrg         subroutine acc_update_device_array_h (a)
39810d565efSmrg           type (*), dimension (..), contiguous :: a
39910d565efSmrg         end subroutine
40010d565efSmrg       end interface
40110d565efSmrg 
40210d565efSmrg       interface acc_update_self
40310d565efSmrg         subroutine acc_update_self_32_h (a, len)
40410d565efSmrg           use iso_c_binding, only: c_int32_t
40510d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
40610d565efSmrg           type (*), dimension (*) :: a
40710d565efSmrg           integer (c_int32_t) len
40810d565efSmrg         end subroutine
40910d565efSmrg 
41010d565efSmrg         subroutine acc_update_self_64_h (a, len)
41110d565efSmrg           use iso_c_binding, only: c_int64_t
41210d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
41310d565efSmrg           type (*), dimension (*) :: a
41410d565efSmrg           integer (c_int64_t) len
41510d565efSmrg         end subroutine
41610d565efSmrg 
41710d565efSmrg         subroutine acc_update_self_array_h (a)
41810d565efSmrg           type (*), dimension (..), contiguous :: a
41910d565efSmrg         end subroutine
42010d565efSmrg       end interface
42110d565efSmrg 
42210d565efSmrg       ! acc_map_data: Only available in C/C++
42310d565efSmrg       ! acc_unmap_data: Only available in C/C++
42410d565efSmrg       ! acc_deviceptr: Only available in C/C++
425c7a68eb7Smrg       ! acc_hostptr: Only available in C/C++
42610d565efSmrg 
42710d565efSmrg       interface acc_is_present
42810d565efSmrg         function acc_is_present_32_h (a, len)
42910d565efSmrg           use iso_c_binding, only: c_int32_t
43010d565efSmrg           logical acc_is_present_32_h
43110d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
43210d565efSmrg           type (*), dimension (*) :: a
43310d565efSmrg           integer (c_int32_t) len
43410d565efSmrg         end function
43510d565efSmrg 
43610d565efSmrg         function acc_is_present_64_h (a, len)
43710d565efSmrg           use iso_c_binding, only: c_int64_t
43810d565efSmrg           logical acc_is_present_64_h
43910d565efSmrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
44010d565efSmrg           type (*), dimension (*) :: a
44110d565efSmrg           integer (c_int64_t) len
44210d565efSmrg         end function
44310d565efSmrg 
44410d565efSmrg         function acc_is_present_array_h (a)
44510d565efSmrg           logical acc_is_present_array_h
44610d565efSmrg           type (*), dimension (..), contiguous :: a
44710d565efSmrg         end function
44810d565efSmrg       end interface
44910d565efSmrg 
45010d565efSmrg       ! acc_memcpy_to_device: Only available in C/C++
45110d565efSmrg       ! acc_memcpy_from_device: Only available in C/C++
4520fc04c29Smrg 
4530fc04c29Smrg       interface acc_copyin_async
4540fc04c29Smrg         subroutine acc_copyin_async_32_h (a, len, async)
4550fc04c29Smrg           use iso_c_binding, only: c_int32_t
4560fc04c29Smrg           import acc_handle_kind
4570fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
4580fc04c29Smrg           type (*), dimension (*) :: a
4590fc04c29Smrg           integer (c_int32_t) len
4600fc04c29Smrg           integer (acc_handle_kind) async
4610fc04c29Smrg         end subroutine
4620fc04c29Smrg 
4630fc04c29Smrg         subroutine acc_copyin_async_64_h (a, len, async)
4640fc04c29Smrg           use iso_c_binding, only: c_int64_t
4650fc04c29Smrg           import acc_handle_kind
4660fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
4670fc04c29Smrg           type (*), dimension (*) :: a
4680fc04c29Smrg           integer (c_int64_t) len
4690fc04c29Smrg           integer (acc_handle_kind) async
4700fc04c29Smrg         end subroutine
4710fc04c29Smrg 
4720fc04c29Smrg         subroutine acc_copyin_async_array_h (a, async_)
4730fc04c29Smrg           import acc_handle_kind
4740fc04c29Smrg           type (*), dimension (..), contiguous :: a
4750fc04c29Smrg           integer (acc_handle_kind) async_
4760fc04c29Smrg         end subroutine
4770fc04c29Smrg       end interface
4780fc04c29Smrg 
4790fc04c29Smrg       interface acc_create_async
4800fc04c29Smrg         subroutine acc_create_async_32_h (a, len, async)
4810fc04c29Smrg           use iso_c_binding, only: c_int32_t
4820fc04c29Smrg           import acc_handle_kind
4830fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
4840fc04c29Smrg           type (*), dimension (*) :: a
4850fc04c29Smrg           integer (c_int32_t) len
4860fc04c29Smrg           integer (acc_handle_kind) async
4870fc04c29Smrg         end subroutine
4880fc04c29Smrg 
4890fc04c29Smrg         subroutine acc_create_async_64_h (a, len, async)
4900fc04c29Smrg           use iso_c_binding, only: c_int64_t
4910fc04c29Smrg           import acc_handle_kind
4920fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
4930fc04c29Smrg           type (*), dimension (*) :: a
4940fc04c29Smrg           integer (c_int64_t) len
4950fc04c29Smrg           integer (acc_handle_kind) async
4960fc04c29Smrg         end subroutine
4970fc04c29Smrg 
4980fc04c29Smrg         subroutine acc_create_async_array_h (a, async_)
4990fc04c29Smrg           import acc_handle_kind
5000fc04c29Smrg           type (*), dimension (..), contiguous :: a
5010fc04c29Smrg           integer (acc_handle_kind) async_
5020fc04c29Smrg         end subroutine
5030fc04c29Smrg       end interface
5040fc04c29Smrg 
5050fc04c29Smrg       interface acc_copyout_async
5060fc04c29Smrg         subroutine acc_copyout_async_32_h (a, len, async)
5070fc04c29Smrg           use iso_c_binding, only: c_int32_t
5080fc04c29Smrg           import acc_handle_kind
5090fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5100fc04c29Smrg           type (*), dimension (*) :: a
5110fc04c29Smrg           integer (c_int32_t) len
5120fc04c29Smrg           integer (acc_handle_kind) async
5130fc04c29Smrg         end subroutine
5140fc04c29Smrg 
5150fc04c29Smrg         subroutine acc_copyout_async_64_h (a, len, async)
5160fc04c29Smrg           use iso_c_binding, only: c_int64_t
5170fc04c29Smrg           import acc_handle_kind
5180fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5190fc04c29Smrg           type (*), dimension (*) :: a
5200fc04c29Smrg           integer (c_int64_t) len
5210fc04c29Smrg           integer (acc_handle_kind) async
5220fc04c29Smrg         end subroutine
5230fc04c29Smrg 
5240fc04c29Smrg         subroutine acc_copyout_async_array_h (a, async_)
5250fc04c29Smrg           import acc_handle_kind
5260fc04c29Smrg           type (*), dimension (..), contiguous :: a
5270fc04c29Smrg           integer (acc_handle_kind) async_
5280fc04c29Smrg         end subroutine
5290fc04c29Smrg       end interface
5300fc04c29Smrg 
5310fc04c29Smrg       interface acc_delete_async
5320fc04c29Smrg         subroutine acc_delete_async_32_h (a, len, async)
5330fc04c29Smrg           use iso_c_binding, only: c_int32_t
5340fc04c29Smrg           import acc_handle_kind
5350fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5360fc04c29Smrg           type (*), dimension (*) :: a
5370fc04c29Smrg           integer (c_int32_t) len
5380fc04c29Smrg           integer (acc_handle_kind) async
5390fc04c29Smrg         end subroutine
5400fc04c29Smrg 
5410fc04c29Smrg         subroutine acc_delete_async_64_h (a, len, async)
5420fc04c29Smrg           use iso_c_binding, only: c_int64_t
5430fc04c29Smrg           import acc_handle_kind
5440fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5450fc04c29Smrg           type (*), dimension (*) :: a
5460fc04c29Smrg           integer (c_int64_t) len
5470fc04c29Smrg           integer (acc_handle_kind) async
5480fc04c29Smrg         end subroutine
5490fc04c29Smrg 
5500fc04c29Smrg         subroutine acc_delete_async_array_h (a, async_)
5510fc04c29Smrg           import acc_handle_kind
5520fc04c29Smrg           type (*), dimension (..), contiguous :: a
5530fc04c29Smrg           integer (acc_handle_kind) async_
5540fc04c29Smrg         end subroutine
5550fc04c29Smrg       end interface
5560fc04c29Smrg 
5570fc04c29Smrg       interface acc_update_device_async
5580fc04c29Smrg         subroutine acc_update_device_async_32_h (a, len, async)
5590fc04c29Smrg           use iso_c_binding, only: c_int32_t
5600fc04c29Smrg           import acc_handle_kind
5610fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5620fc04c29Smrg           type (*), dimension (*) :: a
5630fc04c29Smrg           integer (c_int32_t) len
5640fc04c29Smrg           integer (acc_handle_kind) async
5650fc04c29Smrg         end subroutine
5660fc04c29Smrg 
5670fc04c29Smrg         subroutine acc_update_device_async_64_h (a, len, async)
5680fc04c29Smrg           use iso_c_binding, only: c_int64_t
5690fc04c29Smrg           import acc_handle_kind
5700fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5710fc04c29Smrg           type (*), dimension (*) :: a
5720fc04c29Smrg           integer (c_int64_t) len
5730fc04c29Smrg           integer (acc_handle_kind) async
5740fc04c29Smrg         end subroutine
5750fc04c29Smrg 
5760fc04c29Smrg         subroutine acc_update_device_async_array_h (a, async_)
5770fc04c29Smrg           import acc_handle_kind
5780fc04c29Smrg           type (*), dimension (..), contiguous :: a
5790fc04c29Smrg           integer (acc_handle_kind) async_
5800fc04c29Smrg         end subroutine
5810fc04c29Smrg       end interface
5820fc04c29Smrg 
5830fc04c29Smrg       interface acc_update_self_async
5840fc04c29Smrg         subroutine acc_update_self_async_32_h (a, len, async)
5850fc04c29Smrg           use iso_c_binding, only: c_int32_t
5860fc04c29Smrg           import acc_handle_kind
5870fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5880fc04c29Smrg           type (*), dimension (*) :: a
5890fc04c29Smrg           integer (c_int32_t) len
5900fc04c29Smrg           integer (acc_handle_kind) async
5910fc04c29Smrg         end subroutine
5920fc04c29Smrg 
5930fc04c29Smrg         subroutine acc_update_self_async_64_h (a, len, async)
5940fc04c29Smrg           use iso_c_binding, only: c_int64_t
5950fc04c29Smrg           import acc_handle_kind
5960fc04c29Smrg !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
5970fc04c29Smrg           type (*), dimension (*) :: a
5980fc04c29Smrg           integer (c_int64_t) len
5990fc04c29Smrg           integer (acc_handle_kind) async
6000fc04c29Smrg         end subroutine
6010fc04c29Smrg 
6020fc04c29Smrg         subroutine acc_update_self_async_array_h (a, async_)
6030fc04c29Smrg           import acc_handle_kind
6040fc04c29Smrg           type (*), dimension (..), contiguous :: a
6050fc04c29Smrg           integer (acc_handle_kind) async_
6060fc04c29Smrg         end subroutine
6070fc04c29Smrg       end interface
608