1!  OpenACC Runtime Library Definitions.
2
3!  Copyright (C) 2014-2019 Free Software Foundation, Inc.
4
5!  Contributed by Tobias Burnus <burnus@net-b.de>
6!              and Mentor Embedded.
7
8!  This file is part of the GNU Offloading and Multi Processing Library
9!  (libgomp).
10
11!  Libgomp is free software; you can redistribute it and/or modify it
12!  under the terms of the GNU General Public License as published by
13!  the Free Software Foundation; either version 3, or (at your option)
14!  any later version.
15
16!  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
17!  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18!  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
19!  more details.
20
21!  Under Section 7 of GPL version 3, you are granted additional
22!  permissions described in the GCC Runtime Library Exception, version
23!  3.1, as published by the Free Software Foundation.
24
25!  You should have received a copy of the GNU General Public License and
26!  a copy of the GCC Runtime Library Exception along with this program;
27!  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
28!  <http://www.gnu.org/licenses/>.
29
30module openacc_kinds
31  use iso_fortran_env, only: int32
32  implicit none
33
34  private :: int32
35  public :: acc_device_kind
36
37  integer, parameter :: acc_device_kind = int32
38
39  public :: acc_device_none, acc_device_default, acc_device_host
40  public :: acc_device_not_host, acc_device_nvidia
41
42  ! Keep in sync with include/gomp-constants.h.
43  integer (acc_device_kind), parameter :: acc_device_none = 0
44  integer (acc_device_kind), parameter :: acc_device_default = 1
45  integer (acc_device_kind), parameter :: acc_device_host = 2
46  ! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3 removed.
47  integer (acc_device_kind), parameter :: acc_device_not_host = 4
48  integer (acc_device_kind), parameter :: acc_device_nvidia = 5
49
50  public :: acc_handle_kind
51
52  integer, parameter :: acc_handle_kind = int32
53
54  public :: acc_async_noval, acc_async_sync
55
56  ! Keep in sync with include/gomp-constants.h.
57  integer (acc_handle_kind), parameter :: acc_async_noval = -1
58  integer (acc_handle_kind), parameter :: acc_async_sync = -2
59
60end module
61
62module openacc_internal
63  use openacc_kinds
64  implicit none
65
66  interface
67    function acc_get_num_devices_h (d)
68      import
69      integer acc_get_num_devices_h
70      integer (acc_device_kind) d
71    end function
72
73    subroutine acc_set_device_type_h (d)
74      import
75      integer (acc_device_kind) d
76    end subroutine
77
78    function acc_get_device_type_h ()
79      import
80      integer (acc_device_kind) acc_get_device_type_h
81    end function
82
83    subroutine acc_set_device_num_h (n, d)
84      import
85      integer n
86      integer (acc_device_kind) d
87    end subroutine
88
89    function acc_get_device_num_h (d)
90      import
91      integer acc_get_device_num_h
92      integer (acc_device_kind) d
93    end function
94
95    function acc_async_test_h (a)
96      logical acc_async_test_h
97      integer a
98    end function
99
100    function acc_async_test_all_h ()
101      logical acc_async_test_all_h
102    end function
103
104    subroutine acc_wait_h (a)
105      integer a
106    end subroutine
107
108    subroutine acc_wait_async_h (a1, a2)
109      integer a1, a2
110    end subroutine
111
112    subroutine acc_wait_all_h ()
113    end subroutine
114
115    subroutine acc_wait_all_async_h (a)
116      integer a
117    end subroutine
118
119    subroutine acc_init_h (d)
120      import
121      integer (acc_device_kind) d
122    end subroutine
123
124    subroutine acc_shutdown_h (d)
125      import
126      integer (acc_device_kind) d
127    end subroutine
128
129    function acc_on_device_h (d)
130      import
131      integer (acc_device_kind) d
132      logical acc_on_device_h
133    end function
134
135    subroutine acc_copyin_32_h (a, len)
136      use iso_c_binding, only: c_int32_t
137      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
138      type (*), dimension (*) :: a
139      integer (c_int32_t) len
140    end subroutine
141
142    subroutine acc_copyin_64_h (a, len)
143      use iso_c_binding, only: c_int64_t
144      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
145      type (*), dimension (*) :: a
146      integer (c_int64_t) len
147    end subroutine
148
149    subroutine acc_copyin_array_h (a)
150      type (*), dimension (..), contiguous :: a
151    end subroutine
152
153    subroutine acc_present_or_copyin_32_h (a, len)
154      use iso_c_binding, only: c_int32_t
155      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
156      type (*), dimension (*) :: a
157      integer (c_int32_t) len
158    end subroutine
159
160    subroutine acc_present_or_copyin_64_h (a, len)
161      use iso_c_binding, only: c_int64_t
162      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
163      type (*), dimension (*) :: a
164      integer (c_int64_t) len
165    end subroutine
166
167    subroutine acc_present_or_copyin_array_h (a)
168      type (*), dimension (..), contiguous :: a
169    end subroutine
170
171    subroutine acc_create_32_h (a, len)
172      use iso_c_binding, only: c_int32_t
173      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
174      type (*), dimension (*) :: a
175      integer (c_int32_t) len
176    end subroutine
177
178    subroutine acc_create_64_h (a, len)
179      use iso_c_binding, only: c_int64_t
180      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
181      type (*), dimension (*) :: a
182      integer (c_int64_t) len
183    end subroutine
184
185    subroutine acc_create_array_h (a)
186      type (*), dimension (..), contiguous :: a
187    end subroutine
188
189    subroutine acc_present_or_create_32_h (a, len)
190      use iso_c_binding, only: c_int32_t
191      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
192      type (*), dimension (*) :: a
193      integer (c_int32_t) len
194    end subroutine
195
196    subroutine acc_present_or_create_64_h (a, len)
197      use iso_c_binding, only: c_int64_t
198      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
199      type (*), dimension (*) :: a
200      integer (c_int64_t) len
201    end subroutine
202
203    subroutine acc_present_or_create_array_h (a)
204      type (*), dimension (..), contiguous :: a
205    end subroutine
206
207    subroutine acc_copyout_32_h (a, len)
208      use iso_c_binding, only: c_int32_t
209      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
210      type (*), dimension (*) :: a
211      integer (c_int32_t) len
212    end subroutine
213
214    subroutine acc_copyout_64_h (a, len)
215      use iso_c_binding, only: c_int64_t
216      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
217      type (*), dimension (*) :: a
218      integer (c_int64_t) len
219    end subroutine
220
221    subroutine acc_copyout_array_h (a)
222      type (*), dimension (..), contiguous :: a
223    end subroutine
224
225    subroutine acc_copyout_finalize_32_h (a, len)
226      use iso_c_binding, only: c_int32_t
227      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
228      type (*), dimension (*) :: a
229      integer (c_int32_t) len
230    end subroutine
231
232    subroutine acc_copyout_finalize_64_h (a, len)
233      use iso_c_binding, only: c_int64_t
234      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
235      type (*), dimension (*) :: a
236      integer (c_int64_t) len
237    end subroutine
238
239    subroutine acc_copyout_finalize_array_h (a)
240      type (*), dimension (..), contiguous :: a
241    end subroutine
242
243    subroutine acc_delete_32_h (a, len)
244      use iso_c_binding, only: c_int32_t
245      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
246      type (*), dimension (*) :: a
247      integer (c_int32_t) len
248    end subroutine
249
250    subroutine acc_delete_64_h (a, len)
251      use iso_c_binding, only: c_int64_t
252      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
253      type (*), dimension (*) :: a
254      integer (c_int64_t) len
255    end subroutine
256
257    subroutine acc_delete_array_h (a)
258      type (*), dimension (..), contiguous :: a
259    end subroutine
260
261    subroutine acc_delete_finalize_32_h (a, len)
262      use iso_c_binding, only: c_int32_t
263      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
264      type (*), dimension (*) :: a
265      integer (c_int32_t) len
266    end subroutine
267
268    subroutine acc_delete_finalize_64_h (a, len)
269      use iso_c_binding, only: c_int64_t
270      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
271      type (*), dimension (*) :: a
272      integer (c_int64_t) len
273    end subroutine
274
275    subroutine acc_delete_finalize_array_h (a)
276      type (*), dimension (..), contiguous :: a
277    end subroutine
278
279    subroutine acc_update_device_32_h (a, len)
280      use iso_c_binding, only: c_int32_t
281      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
282      type (*), dimension (*) :: a
283      integer (c_int32_t) len
284    end subroutine
285
286    subroutine acc_update_device_64_h (a, len)
287      use iso_c_binding, only: c_int64_t
288      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
289      type (*), dimension (*) :: a
290      integer (c_int64_t) len
291    end subroutine
292
293    subroutine acc_update_device_array_h (a)
294      type (*), dimension (..), contiguous :: a
295    end subroutine
296
297    subroutine acc_update_self_32_h (a, len)
298      use iso_c_binding, only: c_int32_t
299      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
300      type (*), dimension (*) :: a
301      integer (c_int32_t) len
302    end subroutine
303
304    subroutine acc_update_self_64_h (a, len)
305      use iso_c_binding, only: c_int64_t
306      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
307      type (*), dimension (*) :: a
308      integer (c_int64_t) len
309    end subroutine
310
311    subroutine acc_update_self_array_h (a)
312      type (*), dimension (..), contiguous :: a
313    end subroutine
314
315    function acc_is_present_32_h (a, len)
316      use iso_c_binding, only: c_int32_t
317      logical acc_is_present_32_h
318      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
319      type (*), dimension (*) :: a
320      integer (c_int32_t) len
321    end function
322
323    function acc_is_present_64_h (a, len)
324      use iso_c_binding, only: c_int64_t
325      logical acc_is_present_64_h
326      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
327      type (*), dimension (*) :: a
328      integer (c_int64_t) len
329    end function
330
331    function acc_is_present_array_h (a)
332      logical acc_is_present_array_h
333      type (*), dimension (..), contiguous :: a
334    end function
335
336    subroutine acc_copyin_async_32_h (a, len, async)
337      use iso_c_binding, only: c_int32_t
338      use openacc_kinds, only: acc_handle_kind
339      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
340      type (*), dimension (*) :: a
341      integer (c_int32_t) len
342      integer (acc_handle_kind) async
343    end subroutine
344
345    subroutine acc_copyin_async_64_h (a, len, async)
346      use iso_c_binding, only: c_int64_t
347      use openacc_kinds, only: acc_handle_kind
348      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
349      type (*), dimension (*) :: a
350      integer (c_int64_t) len
351      integer (acc_handle_kind) async
352    end subroutine
353
354    subroutine acc_copyin_async_array_h (a, async)
355      use openacc_kinds, only: acc_handle_kind
356      type (*), dimension (..), contiguous :: a
357      integer (acc_handle_kind) async
358    end subroutine
359
360    subroutine acc_create_async_32_h (a, len, async)
361      use iso_c_binding, only: c_int32_t
362      use openacc_kinds, only: acc_handle_kind
363      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
364      type (*), dimension (*) :: a
365      integer (c_int32_t) len
366      integer (acc_handle_kind) async
367    end subroutine
368
369    subroutine acc_create_async_64_h (a, len, async)
370      use iso_c_binding, only: c_int64_t
371      use openacc_kinds, only: acc_handle_kind
372      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
373      type (*), dimension (*) :: a
374      integer (c_int64_t) len
375      integer (acc_handle_kind) async
376    end subroutine
377
378    subroutine acc_create_async_array_h (a, async)
379      use openacc_kinds, only: acc_handle_kind
380      type (*), dimension (..), contiguous :: a
381      integer (acc_handle_kind) async
382    end subroutine
383
384    subroutine acc_copyout_async_32_h (a, len, async)
385      use iso_c_binding, only: c_int32_t
386      use openacc_kinds, only: acc_handle_kind
387      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
388      type (*), dimension (*) :: a
389      integer (c_int32_t) len
390      integer (acc_handle_kind) async
391    end subroutine
392
393    subroutine acc_copyout_async_64_h (a, len, async)
394      use iso_c_binding, only: c_int64_t
395      use openacc_kinds, only: acc_handle_kind
396      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
397      type (*), dimension (*) :: a
398      integer (c_int64_t) len
399      integer (acc_handle_kind) async
400    end subroutine
401
402    subroutine acc_copyout_async_array_h (a, async)
403      use openacc_kinds, only: acc_handle_kind
404      type (*), dimension (..), contiguous :: a
405      integer (acc_handle_kind) async
406    end subroutine
407
408    subroutine acc_delete_async_32_h (a, len, async)
409      use iso_c_binding, only: c_int32_t
410      use openacc_kinds, only: acc_handle_kind
411      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
412      type (*), dimension (*) :: a
413      integer (c_int32_t) len
414      integer (acc_handle_kind) async
415    end subroutine
416
417    subroutine acc_delete_async_64_h (a, len, async)
418      use iso_c_binding, only: c_int64_t
419      use openacc_kinds, only: acc_handle_kind
420      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
421      type (*), dimension (*) :: a
422      integer (c_int64_t) len
423      integer (acc_handle_kind) async
424    end subroutine
425
426    subroutine acc_delete_async_array_h (a, async)
427      use openacc_kinds, only: acc_handle_kind
428      type (*), dimension (..), contiguous :: a
429      integer (acc_handle_kind) async
430    end subroutine
431
432    subroutine acc_update_device_async_32_h (a, len, async)
433      use iso_c_binding, only: c_int32_t
434      use openacc_kinds, only: acc_handle_kind
435      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
436      type (*), dimension (*) :: a
437      integer (c_int32_t) len
438      integer (acc_handle_kind) async
439    end subroutine
440
441    subroutine acc_update_device_async_64_h (a, len, async)
442      use iso_c_binding, only: c_int64_t
443      use openacc_kinds, only: acc_handle_kind
444      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
445      type (*), dimension (*) :: a
446      integer (c_int64_t) len
447      integer (acc_handle_kind) async
448    end subroutine
449
450    subroutine acc_update_device_async_array_h (a, async)
451      use openacc_kinds, only: acc_handle_kind
452      type (*), dimension (..), contiguous :: a
453      integer (acc_handle_kind) async
454    end subroutine
455
456    subroutine acc_update_self_async_32_h (a, len, async)
457      use iso_c_binding, only: c_int32_t
458      use openacc_kinds, only: acc_handle_kind
459      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
460      type (*), dimension (*) :: a
461      integer (c_int32_t) len
462      integer (acc_handle_kind) async
463    end subroutine
464
465    subroutine acc_update_self_async_64_h (a, len, async)
466      use iso_c_binding, only: c_int64_t
467      use openacc_kinds, only: acc_handle_kind
468      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
469      type (*), dimension (*) :: a
470      integer (c_int64_t) len
471      integer (acc_handle_kind) async
472    end subroutine
473
474    subroutine acc_update_self_async_array_h (a, async)
475      use openacc_kinds, only: acc_handle_kind
476      type (*), dimension (..), contiguous :: a
477      integer (acc_handle_kind) async
478    end subroutine
479  end interface
480
481  interface
482    function acc_get_num_devices_l (d) &
483        bind (C, name = "acc_get_num_devices")
484      use iso_c_binding, only: c_int
485      integer (c_int) :: acc_get_num_devices_l
486      integer (c_int), value :: d
487    end function
488
489    subroutine acc_set_device_type_l (d) &
490        bind (C, name = "acc_set_device_type")
491      use iso_c_binding, only: c_int
492      integer (c_int), value :: d
493    end subroutine
494
495    function acc_get_device_type_l () &
496        bind (C, name = "acc_get_device_type")
497      use iso_c_binding, only: c_int
498      integer (c_int) :: acc_get_device_type_l
499    end function
500
501    subroutine acc_set_device_num_l (n, d) &
502        bind (C, name = "acc_set_device_num")
503      use iso_c_binding, only: c_int
504      integer (c_int), value :: n, d
505    end subroutine
506
507    function acc_get_device_num_l (d) &
508        bind (C, name = "acc_get_device_num")
509      use iso_c_binding, only: c_int
510      integer (c_int) :: acc_get_device_num_l
511      integer (c_int), value :: d
512    end function
513
514    function acc_async_test_l (a) &
515        bind (C, name = "acc_async_test")
516      use iso_c_binding, only: c_int
517      integer (c_int) :: acc_async_test_l
518      integer (c_int), value :: a
519    end function
520
521    function acc_async_test_all_l () &
522        bind (C, name = "acc_async_test_all")
523      use iso_c_binding, only: c_int
524      integer (c_int) :: acc_async_test_all_l
525    end function
526
527    subroutine acc_wait_l (a) &
528        bind (C, name = "acc_wait")
529      use iso_c_binding, only: c_int
530      integer (c_int), value :: a
531    end subroutine
532
533    subroutine acc_wait_async_l (a1, a2) &
534        bind (C, name = "acc_wait_async")
535      use iso_c_binding, only: c_int
536      integer (c_int), value :: a1, a2
537    end subroutine
538
539    subroutine acc_wait_all_l () &
540        bind (C, name = "acc_wait_all")
541      use iso_c_binding, only: c_int
542    end subroutine
543
544    subroutine acc_wait_all_async_l (a) &
545        bind (C, name = "acc_wait_all_async")
546      use iso_c_binding, only: c_int
547      integer (c_int), value :: a
548    end subroutine
549
550    subroutine acc_init_l (d) &
551        bind (C, name = "acc_init")
552      use iso_c_binding, only: c_int
553      integer (c_int), value :: d
554    end subroutine
555
556    subroutine acc_shutdown_l (d) &
557        bind (C, name = "acc_shutdown")
558      use iso_c_binding, only: c_int
559      integer (c_int), value :: d
560    end subroutine
561
562    function acc_on_device_l (d) &
563        bind (C, name = "acc_on_device")
564      use iso_c_binding, only: c_int
565      integer (c_int) :: acc_on_device_l
566      integer (c_int), value :: d
567    end function
568
569    subroutine acc_copyin_l (a, len) &
570        bind (C, name = "acc_copyin")
571      use iso_c_binding, only: c_size_t
572      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
573      type (*), dimension (*) :: a
574      integer (c_size_t), value :: len
575    end subroutine
576
577    subroutine acc_present_or_copyin_l (a, len) &
578        bind (C, name = "acc_present_or_copyin")
579      use iso_c_binding, only: c_size_t
580      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
581      type (*), dimension (*) :: a
582      integer (c_size_t), value :: len
583    end subroutine
584
585    subroutine acc_create_l (a, len) &
586        bind (C, name = "acc_create")
587      use iso_c_binding, only: c_size_t
588      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
589      type (*), dimension (*) :: a
590      integer (c_size_t), value :: len
591    end subroutine
592
593    subroutine acc_present_or_create_l (a, len) &
594        bind (C, name = "acc_present_or_create")
595      use iso_c_binding, only: c_size_t
596      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
597      type (*), dimension (*) :: a
598      integer (c_size_t), value :: len
599    end subroutine
600
601    subroutine acc_copyout_l (a, len) &
602        bind (C, name = "acc_copyout")
603      use iso_c_binding, only: c_size_t
604      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
605      type (*), dimension (*) :: a
606      integer (c_size_t), value :: len
607    end subroutine
608
609    subroutine acc_copyout_finalize_l (a, len) &
610        bind (C, name = "acc_copyout_finalize")
611      use iso_c_binding, only: c_size_t
612      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
613      type (*), dimension (*) :: a
614      integer (c_size_t), value :: len
615    end subroutine
616
617    subroutine acc_delete_l (a, len) &
618        bind (C, name = "acc_delete")
619      use iso_c_binding, only: c_size_t
620      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
621      type (*), dimension (*) :: a
622      integer (c_size_t), value :: len
623    end subroutine
624
625    subroutine acc_delete_finalize_l (a, len) &
626        bind (C, name = "acc_delete_finalize")
627      use iso_c_binding, only: c_size_t
628      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
629      type (*), dimension (*) :: a
630      integer (c_size_t), value :: len
631    end subroutine
632
633    subroutine acc_update_device_l (a, len) &
634        bind (C, name = "acc_update_device")
635      use iso_c_binding, only: c_size_t
636      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
637      type (*), dimension (*) :: a
638      integer (c_size_t), value :: len
639    end subroutine
640
641    subroutine acc_update_self_l (a, len) &
642        bind (C, name = "acc_update_self")
643      use iso_c_binding, only: c_size_t
644      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
645      type (*), dimension (*) :: a
646      integer (c_size_t), value :: len
647    end subroutine
648
649    function acc_is_present_l (a, len) &
650        bind (C, name = "acc_is_present")
651      use iso_c_binding, only: c_int32_t, c_size_t
652      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
653      integer (c_int32_t) :: acc_is_present_l
654      type (*), dimension (*) :: a
655      integer (c_size_t), value :: len
656    end function
657
658    subroutine acc_copyin_async_l (a, len, async) &
659        bind (C, name = "acc_copyin_async")
660      use iso_c_binding, only: c_size_t, c_int
661      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
662      type (*), dimension (*) :: a
663      integer (c_size_t), value :: len
664      integer (c_int), value :: async
665    end subroutine
666
667    subroutine acc_create_async_l (a, len, async) &
668        bind (C, name = "acc_create_async")
669      use iso_c_binding, only: c_size_t, c_int
670      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
671      type (*), dimension (*) :: a
672      integer (c_size_t), value :: len
673      integer (c_int), value :: async
674    end subroutine
675
676    subroutine acc_copyout_async_l (a, len, async) &
677        bind (C, name = "acc_copyout_async")
678      use iso_c_binding, only: c_size_t, c_int
679      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
680      type (*), dimension (*) :: a
681      integer (c_size_t), value :: len
682      integer (c_int), value :: async
683    end subroutine
684
685    subroutine acc_delete_async_l (a, len, async) &
686        bind (C, name = "acc_delete_async")
687      use iso_c_binding, only: c_size_t, c_int
688      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
689      type (*), dimension (*) :: a
690      integer (c_size_t), value :: len
691      integer (c_int), value :: async
692    end subroutine
693
694    subroutine acc_update_device_async_l (a, len, async) &
695        bind (C, name = "acc_update_device_async")
696      use iso_c_binding, only: c_size_t, c_int
697      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
698      type (*), dimension (*) :: a
699      integer (c_size_t), value :: len
700      integer (c_int), value :: async
701    end subroutine
702
703    subroutine acc_update_self_async_l (a, len, async) &
704        bind (C, name = "acc_update_self_async")
705      use iso_c_binding, only: c_size_t, c_int
706      !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
707      type (*), dimension (*) :: a
708      integer (c_size_t), value :: len
709      integer (c_int), value :: async
710    end subroutine
711  end interface
712end module
713
714module openacc
715  use openacc_kinds
716  use openacc_internal
717  implicit none
718
719  public :: openacc_version
720
721  public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type
722  public :: acc_set_device_num, acc_get_device_num, acc_async_test
723  public :: acc_async_test_all
724  public :: acc_wait, acc_async_wait, acc_wait_async
725  public :: acc_wait_all, acc_async_wait_all, acc_wait_all_async
726  public :: acc_init, acc_shutdown, acc_on_device
727  public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create
728  public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete
729  public :: acc_update_device, acc_update_self, acc_is_present
730  public :: acc_copyin_async, acc_create_async, acc_copyout_async
731  public :: acc_delete_async, acc_update_device_async, acc_update_self_async
732
733  integer, parameter :: openacc_version = 201306
734
735  interface acc_get_num_devices
736    procedure :: acc_get_num_devices_h
737  end interface
738
739  interface acc_set_device_type
740    procedure :: acc_set_device_type_h
741  end interface
742
743  interface acc_get_device_type
744    procedure :: acc_get_device_type_h
745  end interface
746
747  interface acc_set_device_num
748    procedure :: acc_set_device_num_h
749  end interface
750
751  interface acc_get_device_num
752    procedure :: acc_get_device_num_h
753  end interface
754
755  interface acc_async_test
756    procedure :: acc_async_test_h
757  end interface
758
759  interface acc_async_test_all
760    procedure :: acc_async_test_all_h
761  end interface
762
763  interface acc_wait
764    procedure :: acc_wait_h
765  end interface
766
767  ! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
768  interface acc_async_wait
769    procedure :: acc_wait_h
770  end interface
771
772  interface acc_wait_async
773    procedure :: acc_wait_async_h
774  end interface
775
776  interface acc_wait_all
777    procedure :: acc_wait_all_h
778  end interface
779
780  ! acc_async_wait_all is an OpenACC 1.0 compatibility name for acc_wait_all.
781  interface acc_async_wait_all
782    procedure :: acc_wait_all_h
783  end interface
784
785  interface acc_wait_all_async
786    procedure :: acc_wait_all_async_h
787  end interface
788
789  interface acc_init
790    procedure :: acc_init_h
791  end interface
792
793  interface acc_shutdown
794    procedure :: acc_shutdown_h
795  end interface
796
797  interface acc_on_device
798    procedure :: acc_on_device_h
799  end interface
800
801  ! acc_malloc: Only available in C/C++
802  ! acc_free: Only available in C/C++
803
804  ! As vendor extension, the following code supports both 32bit and 64bit
805  ! arguments for "size"; the OpenACC standard only permits default-kind
806  ! integers, which are of kind 4 (i.e. 32 bits).
807  ! Additionally, the two-argument version also takes arrays as argument.
808  ! and the one argument version also scalars. Note that the code assumes
809  ! that the arrays are contiguous.
810
811  interface acc_copyin
812    procedure :: acc_copyin_32_h
813    procedure :: acc_copyin_64_h
814    procedure :: acc_copyin_array_h
815  end interface
816
817  interface acc_present_or_copyin
818    procedure :: acc_present_or_copyin_32_h
819    procedure :: acc_present_or_copyin_64_h
820    procedure :: acc_present_or_copyin_array_h
821  end interface
822
823  interface acc_pcopyin
824    procedure :: acc_present_or_copyin_32_h
825    procedure :: acc_present_or_copyin_64_h
826    procedure :: acc_present_or_copyin_array_h
827  end interface
828
829  interface acc_create
830    procedure :: acc_create_32_h
831    procedure :: acc_create_64_h
832    procedure :: acc_create_array_h
833  end interface
834
835  interface acc_present_or_create
836    procedure :: acc_present_or_create_32_h
837    procedure :: acc_present_or_create_64_h
838    procedure :: acc_present_or_create_array_h
839  end interface
840
841  interface acc_pcreate
842    procedure :: acc_present_or_create_32_h
843    procedure :: acc_present_or_create_64_h
844    procedure :: acc_present_or_create_array_h
845  end interface
846
847  interface acc_copyout
848    procedure :: acc_copyout_32_h
849    procedure :: acc_copyout_64_h
850    procedure :: acc_copyout_array_h
851  end interface
852
853  interface acc_copyout_finalize
854    procedure :: acc_copyout_finalize_32_h
855    procedure :: acc_copyout_finalize_64_h
856    procedure :: acc_copyout_finalize_array_h
857  end interface
858
859  interface acc_delete
860    procedure :: acc_delete_32_h
861    procedure :: acc_delete_64_h
862    procedure :: acc_delete_array_h
863  end interface
864
865  interface acc_delete_finalize
866    procedure :: acc_delete_finalize_32_h
867    procedure :: acc_delete_finalize_64_h
868    procedure :: acc_delete_finalize_array_h
869  end interface
870
871  interface acc_update_device
872    procedure :: acc_update_device_32_h
873    procedure :: acc_update_device_64_h
874    procedure :: acc_update_device_array_h
875  end interface
876
877  interface acc_update_self
878    procedure :: acc_update_self_32_h
879    procedure :: acc_update_self_64_h
880    procedure :: acc_update_self_array_h
881  end interface
882
883  ! acc_map_data: Only available in C/C++
884  ! acc_unmap_data: Only available in C/C++
885  ! acc_deviceptr: Only available in C/C++
886  ! acc_hostptr: Only available in C/C++
887
888  interface acc_is_present
889    procedure :: acc_is_present_32_h
890    procedure :: acc_is_present_64_h
891    procedure :: acc_is_present_array_h
892  end interface
893
894  ! acc_memcpy_to_device: Only available in C/C++
895  ! acc_memcpy_from_device: Only available in C/C++
896
897  interface acc_copyin_async
898    procedure :: acc_copyin_async_32_h
899    procedure :: acc_copyin_async_64_h
900    procedure :: acc_copyin_async_array_h
901  end interface
902
903  interface acc_create_async
904    procedure :: acc_create_async_32_h
905    procedure :: acc_create_async_64_h
906    procedure :: acc_create_async_array_h
907  end interface
908
909  interface acc_copyout_async
910    procedure :: acc_copyout_async_32_h
911    procedure :: acc_copyout_async_64_h
912    procedure :: acc_copyout_async_array_h
913  end interface
914
915  interface acc_delete_async
916    procedure :: acc_delete_async_32_h
917    procedure :: acc_delete_async_64_h
918    procedure :: acc_delete_async_array_h
919  end interface
920
921  interface acc_update_device_async
922    procedure :: acc_update_device_async_32_h
923    procedure :: acc_update_device_async_64_h
924    procedure :: acc_update_device_async_array_h
925  end interface
926
927  interface acc_update_self_async
928    procedure :: acc_update_self_async_32_h
929    procedure :: acc_update_self_async_64_h
930    procedure :: acc_update_self_async_array_h
931  end interface
932
933end module
934
935function acc_get_num_devices_h (d)
936  use openacc_internal, only: acc_get_num_devices_l
937  use openacc_kinds
938  integer acc_get_num_devices_h
939  integer (acc_device_kind) d
940  acc_get_num_devices_h = acc_get_num_devices_l (d)
941end function
942
943subroutine acc_set_device_type_h (d)
944  use openacc_internal, only: acc_set_device_type_l
945  use openacc_kinds
946  integer (acc_device_kind) d
947  call acc_set_device_type_l (d)
948end subroutine
949
950function acc_get_device_type_h ()
951  use openacc_internal, only: acc_get_device_type_l
952  use openacc_kinds
953  integer (acc_device_kind) acc_get_device_type_h
954  acc_get_device_type_h = acc_get_device_type_l ()
955end function
956
957subroutine acc_set_device_num_h (n, d)
958  use openacc_internal, only: acc_set_device_num_l
959  use openacc_kinds
960  integer n
961  integer (acc_device_kind) d
962  call acc_set_device_num_l (n, d)
963end subroutine
964
965function acc_get_device_num_h (d)
966  use openacc_internal, only: acc_get_device_num_l
967  use openacc_kinds
968  integer acc_get_device_num_h
969  integer (acc_device_kind) d
970  acc_get_device_num_h = acc_get_device_num_l (d)
971end function
972
973function acc_async_test_h (a)
974  use openacc_internal, only: acc_async_test_l
975  logical acc_async_test_h
976  integer a
977  if (acc_async_test_l (a) .eq. 1) then
978    acc_async_test_h = .TRUE.
979  else
980    acc_async_test_h = .FALSE.
981  end if
982end function
983
984function acc_async_test_all_h ()
985  use openacc_internal, only: acc_async_test_all_l
986  logical acc_async_test_all_h
987  if (acc_async_test_all_l () .eq. 1) then
988    acc_async_test_all_h = .TRUE.
989  else
990    acc_async_test_all_h = .FALSE.
991  end if
992end function
993
994subroutine acc_wait_h (a)
995  use openacc_internal, only: acc_wait_l
996  integer a
997  call acc_wait_l (a)
998end subroutine
999
1000subroutine acc_wait_async_h (a1, a2)
1001  use openacc_internal, only: acc_wait_async_l
1002  integer a1, a2
1003  call acc_wait_async_l (a1, a2)
1004end subroutine
1005
1006subroutine acc_wait_all_h ()
1007  use openacc_internal, only: acc_wait_all_l
1008  call acc_wait_all_l ()
1009end subroutine
1010
1011subroutine acc_wait_all_async_h (a)
1012  use openacc_internal, only: acc_wait_all_async_l
1013  integer a
1014  call acc_wait_all_async_l (a)
1015end subroutine
1016
1017subroutine acc_init_h (d)
1018  use openacc_internal, only: acc_init_l
1019  use openacc_kinds
1020  integer (acc_device_kind) d
1021  call acc_init_l (d)
1022end subroutine
1023
1024subroutine acc_shutdown_h (d)
1025  use openacc_internal, only: acc_shutdown_l
1026  use openacc_kinds
1027  integer (acc_device_kind) d
1028  call acc_shutdown_l (d)
1029end subroutine
1030
1031function acc_on_device_h (d)
1032  use openacc_internal, only: acc_on_device_l
1033  use openacc_kinds
1034  integer (acc_device_kind) d
1035  logical acc_on_device_h
1036  if (acc_on_device_l (d) .eq. 1) then
1037    acc_on_device_h = .TRUE.
1038  else
1039    acc_on_device_h = .FALSE.
1040  end if
1041end function
1042
1043subroutine acc_copyin_32_h (a, len)
1044  use iso_c_binding, only: c_int32_t, c_size_t
1045  use openacc_internal, only: acc_copyin_l
1046  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1047  type (*), dimension (*) :: a
1048  integer (c_int32_t) len
1049  call acc_copyin_l (a, int (len, kind = c_size_t))
1050end subroutine
1051
1052subroutine acc_copyin_64_h (a, len)
1053  use iso_c_binding, only: c_int64_t, c_size_t
1054  use openacc_internal, only: acc_copyin_l
1055  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1056  type (*), dimension (*) :: a
1057  integer (c_int64_t) len
1058  call acc_copyin_l (a, int (len, kind = c_size_t))
1059end subroutine
1060
1061subroutine acc_copyin_array_h (a)
1062  use openacc_internal, only: acc_copyin_l
1063  type (*), dimension (..), contiguous :: a
1064  call acc_copyin_l (a, sizeof (a))
1065end subroutine
1066
1067subroutine acc_present_or_copyin_32_h (a, len)
1068  use iso_c_binding, only: c_int32_t, c_size_t
1069  use openacc_internal, only: acc_present_or_copyin_l
1070  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1071  type (*), dimension (*) :: a
1072  integer (c_int32_t) len
1073  call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
1074end subroutine
1075
1076subroutine acc_present_or_copyin_64_h (a, len)
1077  use iso_c_binding, only: c_int64_t, c_size_t
1078  use openacc_internal, only: acc_present_or_copyin_l
1079  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1080  type (*), dimension (*) :: a
1081  integer (c_int64_t) len
1082  call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
1083end subroutine
1084
1085subroutine acc_present_or_copyin_array_h (a)
1086  use openacc_internal, only: acc_present_or_copyin_l
1087  type (*), dimension (..), contiguous :: a
1088  call acc_present_or_copyin_l (a, sizeof (a))
1089end subroutine
1090
1091subroutine acc_create_32_h (a, len)
1092  use iso_c_binding, only: c_int32_t, c_size_t
1093  use openacc_internal, only: acc_create_l
1094  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1095  type (*), dimension (*) :: a
1096  integer (c_int32_t) len
1097  call acc_create_l (a, int (len, kind = c_size_t))
1098end subroutine
1099
1100subroutine acc_create_64_h (a, len)
1101  use iso_c_binding, only: c_int64_t, c_size_t
1102  use openacc_internal, only: acc_create_l
1103  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1104  type (*), dimension (*) :: a
1105  integer (c_int64_t) len
1106  call acc_create_l (a, int (len, kind = c_size_t))
1107end subroutine
1108
1109subroutine acc_create_array_h (a)
1110  use openacc_internal, only: acc_create_l
1111  type (*), dimension (..), contiguous :: a
1112  call acc_create_l (a, sizeof (a))
1113end subroutine
1114
1115subroutine acc_present_or_create_32_h (a, len)
1116  use iso_c_binding, only: c_int32_t, c_size_t
1117  use openacc_internal, only: acc_present_or_create_l
1118  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1119  type (*), dimension (*) :: a
1120  integer (c_int32_t) len
1121  call acc_present_or_create_l (a, int (len, kind = c_size_t))
1122end subroutine
1123
1124subroutine acc_present_or_create_64_h (a, len)
1125  use iso_c_binding, only: c_int64_t, c_size_t
1126  use openacc_internal, only: acc_present_or_create_l
1127  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1128  type (*), dimension (*) :: a
1129  integer (c_int64_t) len
1130  call acc_present_or_create_l (a, int (len, kind = c_size_t))
1131end subroutine
1132
1133subroutine acc_present_or_create_array_h (a)
1134  use openacc_internal, only: acc_present_or_create_l
1135  type (*), dimension (..), contiguous :: a
1136  call acc_present_or_create_l (a, sizeof (a))
1137end subroutine
1138
1139subroutine acc_copyout_32_h (a, len)
1140  use iso_c_binding, only: c_int32_t, c_size_t
1141  use openacc_internal, only: acc_copyout_l
1142  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1143  type (*), dimension (*) :: a
1144  integer (c_int32_t) len
1145  call acc_copyout_l (a, int (len, kind = c_size_t))
1146end subroutine
1147
1148subroutine acc_copyout_64_h (a, len)
1149  use iso_c_binding, only: c_int64_t, c_size_t
1150  use openacc_internal, only: acc_copyout_l
1151  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1152  type (*), dimension (*) :: a
1153  integer (c_int64_t) len
1154  call acc_copyout_l (a, int (len, kind = c_size_t))
1155end subroutine
1156
1157subroutine acc_copyout_array_h (a)
1158  use openacc_internal, only: acc_copyout_l
1159  type (*), dimension (..), contiguous :: a
1160  call acc_copyout_l (a, sizeof (a))
1161end subroutine
1162
1163subroutine acc_copyout_finalize_32_h (a, len)
1164  use iso_c_binding, only: c_int32_t, c_size_t
1165  use openacc_internal, only: acc_copyout_finalize_l
1166  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1167  type (*), dimension (*) :: a
1168  integer (c_int32_t) len
1169  call acc_copyout_finalize_l (a, int (len, kind = c_size_t))
1170end subroutine
1171
1172subroutine acc_copyout_finalize_64_h (a, len)
1173  use iso_c_binding, only: c_int64_t, c_size_t
1174  use openacc_internal, only: acc_copyout_finalize_l
1175  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1176  type (*), dimension (*) :: a
1177  integer (c_int64_t) len
1178  call acc_copyout_finalize_l (a, int (len, kind = c_size_t))
1179end subroutine
1180
1181subroutine acc_copyout_finalize_array_h (a)
1182  use openacc_internal, only: acc_copyout_finalize_l
1183  type (*), dimension (..), contiguous :: a
1184  call acc_copyout_finalize_l (a, sizeof (a))
1185end subroutine
1186
1187subroutine acc_delete_32_h (a, len)
1188  use iso_c_binding, only: c_int32_t, c_size_t
1189  use openacc_internal, only: acc_delete_l
1190  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1191  type (*), dimension (*) :: a
1192  integer (c_int32_t) len
1193  call acc_delete_l (a, int (len, kind = c_size_t))
1194end subroutine
1195
1196subroutine acc_delete_64_h (a, len)
1197  use iso_c_binding, only: c_int64_t, c_size_t
1198  use openacc_internal, only: acc_delete_l
1199  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1200  type (*), dimension (*) :: a
1201  integer (c_int64_t) len
1202  call acc_delete_l (a, int (len, kind = c_size_t))
1203end subroutine
1204
1205subroutine acc_delete_array_h (a)
1206  use openacc_internal, only: acc_delete_l
1207  type (*), dimension (..), contiguous :: a
1208  call acc_delete_l (a, sizeof (a))
1209end subroutine
1210
1211subroutine acc_delete_finalize_32_h (a, len)
1212  use iso_c_binding, only: c_int32_t, c_size_t
1213  use openacc_internal, only: acc_delete_finalize_l
1214  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1215  type (*), dimension (*) :: a
1216  integer (c_int32_t) len
1217  call acc_delete_finalize_l (a, int (len, kind = c_size_t))
1218end subroutine
1219
1220subroutine acc_delete_finalize_64_h (a, len)
1221  use iso_c_binding, only: c_int64_t, c_size_t
1222  use openacc_internal, only: acc_delete_finalize_l
1223  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1224  type (*), dimension (*) :: a
1225  integer (c_int64_t) len
1226  call acc_delete_finalize_l (a, int (len, kind = c_size_t))
1227end subroutine
1228
1229subroutine acc_delete_finalize_array_h (a)
1230  use openacc_internal, only: acc_delete_finalize_l
1231  type (*), dimension (..), contiguous :: a
1232  call acc_delete_finalize_l (a, sizeof (a))
1233end subroutine
1234
1235subroutine acc_update_device_32_h (a, len)
1236  use iso_c_binding, only: c_int32_t, c_size_t
1237  use openacc_internal, only: acc_update_device_l
1238  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1239  type (*), dimension (*) :: a
1240  integer (c_int32_t) len
1241  call acc_update_device_l (a, int (len, kind = c_size_t))
1242end subroutine
1243
1244subroutine acc_update_device_64_h (a, len)
1245  use iso_c_binding, only: c_int64_t, c_size_t
1246  use openacc_internal, only: acc_update_device_l
1247  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1248  type (*), dimension (*) :: a
1249  integer (c_int64_t) len
1250  call acc_update_device_l (a, int (len, kind = c_size_t))
1251end subroutine
1252
1253subroutine acc_update_device_array_h (a)
1254  use openacc_internal, only: acc_update_device_l
1255  type (*), dimension (..), contiguous :: a
1256  call acc_update_device_l (a, sizeof (a))
1257end subroutine
1258
1259subroutine acc_update_self_32_h (a, len)
1260  use iso_c_binding, only: c_int32_t, c_size_t
1261  use openacc_internal, only: acc_update_self_l
1262  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1263  type (*), dimension (*) :: a
1264  integer (c_int32_t) len
1265  call acc_update_self_l (a, int (len, kind = c_size_t))
1266end subroutine
1267
1268subroutine acc_update_self_64_h (a, len)
1269  use iso_c_binding, only: c_int64_t, c_size_t
1270  use openacc_internal, only: acc_update_self_l
1271  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1272  type (*), dimension (*) :: a
1273  integer (c_int64_t) len
1274  call acc_update_self_l (a, int (len, kind = c_size_t))
1275end subroutine
1276
1277subroutine acc_update_self_array_h (a)
1278  use openacc_internal, only: acc_update_self_l
1279  type (*), dimension (..), contiguous :: a
1280  call acc_update_self_l (a, sizeof (a))
1281end subroutine
1282
1283function acc_is_present_32_h (a, len)
1284  use iso_c_binding, only: c_int32_t, c_size_t
1285  use openacc_internal, only: acc_is_present_l
1286  logical acc_is_present_32_h
1287  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1288  type (*), dimension (*) :: a
1289  integer (c_int32_t) len
1290  if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
1291    acc_is_present_32_h = .TRUE.
1292  else
1293    acc_is_present_32_h = .FALSE.
1294  end if
1295end function
1296
1297function acc_is_present_64_h (a, len)
1298  use iso_c_binding, only: c_int64_t, c_size_t
1299  use openacc_internal, only: acc_is_present_l
1300  logical acc_is_present_64_h
1301  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1302  type (*), dimension (*) :: a
1303  integer (c_int64_t) len
1304  if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
1305    acc_is_present_64_h = .TRUE.
1306  else
1307    acc_is_present_64_h = .FALSE.
1308  end if
1309end function
1310
1311function acc_is_present_array_h (a)
1312  use openacc_internal, only: acc_is_present_l
1313  logical acc_is_present_array_h
1314  type (*), dimension (..), contiguous :: a
1315  acc_is_present_array_h = acc_is_present_l (a, sizeof (a)) == 1
1316end function
1317
1318subroutine acc_copyin_async_32_h (a, len, async)
1319  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1320  use openacc_internal, only: acc_copyin_async_l
1321  use openacc_kinds, only: acc_handle_kind
1322  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1323  type (*), dimension (*) :: a
1324  integer (c_int32_t) len
1325  integer (acc_handle_kind) async
1326  call acc_copyin_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1327end subroutine
1328
1329subroutine acc_copyin_async_64_h (a, len, async)
1330  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1331  use openacc_internal, only: acc_copyin_async_l
1332  use openacc_kinds, only: acc_handle_kind
1333  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1334  type (*), dimension (*) :: a
1335  integer (c_int64_t) len
1336  integer (acc_handle_kind) async
1337  call acc_copyin_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1338end subroutine
1339
1340subroutine acc_copyin_async_array_h (a, async)
1341  use iso_c_binding, only: c_int
1342  use openacc_internal, only: acc_copyin_async_l
1343  use openacc_kinds, only: acc_handle_kind
1344  type (*), dimension (..), contiguous :: a
1345  integer (acc_handle_kind) async
1346  call acc_copyin_async_l (a, sizeof (a), int (async, kind = c_int))
1347end subroutine
1348
1349subroutine acc_create_async_32_h (a, len, async)
1350  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1351  use openacc_internal, only: acc_create_async_l
1352  use openacc_kinds, only: acc_handle_kind
1353  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1354  type (*), dimension (*) :: a
1355  integer (c_int32_t) len
1356  integer (acc_handle_kind) async
1357  call acc_create_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1358end subroutine
1359
1360subroutine acc_create_async_64_h (a, len, async)
1361  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1362  use openacc_internal, only: acc_create_async_l
1363  use openacc_kinds, only: acc_handle_kind
1364  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1365  type (*), dimension (*) :: a
1366  integer (c_int64_t) len
1367  integer (acc_handle_kind) async
1368  call acc_create_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1369end subroutine
1370
1371subroutine acc_create_async_array_h (a, async)
1372  use iso_c_binding, only: c_int
1373  use openacc_internal, only: acc_create_async_l
1374  use openacc_kinds, only: acc_handle_kind
1375  type (*), dimension (..), contiguous :: a
1376  integer (acc_handle_kind) async
1377  call acc_create_async_l (a, sizeof (a), int (async, kind = c_int))
1378end subroutine
1379
1380subroutine acc_copyout_async_32_h (a, len, async)
1381  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1382  use openacc_internal, only: acc_copyout_async_l
1383  use openacc_kinds, only: acc_handle_kind
1384  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1385  type (*), dimension (*) :: a
1386  integer (c_int32_t) len
1387  integer (acc_handle_kind) async
1388  call acc_copyout_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1389end subroutine
1390
1391subroutine acc_copyout_async_64_h (a, len, async)
1392  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1393  use openacc_internal, only: acc_copyout_async_l
1394  use openacc_kinds, only: acc_handle_kind
1395  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1396  type (*), dimension (*) :: a
1397  integer (c_int64_t) len
1398  integer (acc_handle_kind) async
1399  call acc_copyout_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1400end subroutine
1401
1402subroutine acc_copyout_async_array_h (a, async)
1403  use iso_c_binding, only: c_int
1404  use openacc_internal, only: acc_copyout_async_l
1405  use openacc_kinds, only: acc_handle_kind
1406  type (*), dimension (..), contiguous :: a
1407  integer (acc_handle_kind) async
1408  call acc_copyout_async_l (a, sizeof (a), int (async, kind = c_int))
1409end subroutine
1410
1411subroutine acc_delete_async_32_h (a, len, async)
1412  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1413  use openacc_internal, only: acc_delete_async_l
1414  use openacc_kinds, only: acc_handle_kind
1415  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1416  type (*), dimension (*) :: a
1417  integer (c_int32_t) len
1418  integer (acc_handle_kind) async
1419  call acc_delete_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1420end subroutine
1421
1422subroutine acc_delete_async_64_h (a, len, async)
1423  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1424  use openacc_internal, only: acc_delete_async_l
1425  use openacc_kinds, only: acc_handle_kind
1426  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1427  type (*), dimension (*) :: a
1428  integer (c_int64_t) len
1429  integer (acc_handle_kind) async
1430  call acc_delete_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1431end subroutine
1432
1433subroutine acc_delete_async_array_h (a, async)
1434  use iso_c_binding, only: c_int
1435  use openacc_internal, only: acc_delete_async_l
1436  use openacc_kinds, only: acc_handle_kind
1437  type (*), dimension (..), contiguous :: a
1438  integer (acc_handle_kind) async
1439  call acc_delete_async_l (a, sizeof (a), int (async, kind = c_int))
1440end subroutine
1441
1442subroutine acc_update_device_async_32_h (a, len, async)
1443  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1444  use openacc_internal, only: acc_update_device_async_l
1445  use openacc_kinds, only: acc_handle_kind
1446  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1447  type (*), dimension (*) :: a
1448  integer (c_int32_t) len
1449  integer (acc_handle_kind) async
1450  call acc_update_device_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1451end subroutine
1452
1453subroutine acc_update_device_async_64_h (a, len, async)
1454  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1455  use openacc_internal, only: acc_update_device_async_l
1456  use openacc_kinds, only: acc_handle_kind
1457  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1458  type (*), dimension (*) :: a
1459  integer (c_int64_t) len
1460  integer (acc_handle_kind) async
1461  call acc_update_device_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1462end subroutine
1463
1464subroutine acc_update_device_async_array_h (a, async)
1465  use iso_c_binding, only: c_int
1466  use openacc_internal, only: acc_update_device_async_l
1467  use openacc_kinds, only: acc_handle_kind
1468  type (*), dimension (..), contiguous :: a
1469  integer (acc_handle_kind) async
1470  call acc_update_device_async_l (a, sizeof (a), int (async, kind = c_int))
1471end subroutine
1472
1473subroutine acc_update_self_async_32_h (a, len, async)
1474  use iso_c_binding, only: c_int32_t, c_size_t, c_int
1475  use openacc_internal, only: acc_update_self_async_l
1476  use openacc_kinds, only: acc_handle_kind
1477  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1478  type (*), dimension (*) :: a
1479  integer (c_int32_t) len
1480  integer (acc_handle_kind) async
1481  call acc_update_self_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1482end subroutine
1483
1484subroutine acc_update_self_async_64_h (a, len, async)
1485  use iso_c_binding, only: c_int64_t, c_size_t, c_int
1486  use openacc_internal, only: acc_update_self_async_l
1487  use openacc_kinds, only: acc_handle_kind
1488  !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1489  type (*), dimension (*) :: a
1490  integer (c_int64_t) len
1491  integer (acc_handle_kind) async
1492  call acc_update_self_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1493end subroutine
1494
1495subroutine acc_update_self_async_array_h (a, async)
1496  use iso_c_binding, only: c_int
1497  use openacc_internal, only: acc_update_self_async_l
1498  use openacc_kinds, only: acc_handle_kind
1499  type (*), dimension (..), contiguous :: a
1500  integer (acc_handle_kind) async
1501  call acc_update_self_async_l (a, sizeof (a), int (async, kind = c_int))
1502end subroutine
1503