1!  OpenACC Runtime Library Definitions.			-*- mode: fortran -*-
2
3!  Copyright (C) 2014-2015 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
30! NOTE: Due to the use of dimension (..), the code only works when compiled
31! with -std=f2008ts/gnu/legacy but not with other standard settings.
32! Alternatively, the user can use the module version, which permits
33! compilation with -std=f95.
34
35      integer, parameter :: acc_device_kind = 4
36
37!     Keep in sync with include/gomp-constants.h.
38      integer (acc_device_kind), parameter :: acc_device_none = 0
39      integer (acc_device_kind), parameter :: acc_device_default = 1
40      integer (acc_device_kind), parameter :: acc_device_host = 2
41      integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
42      integer (acc_device_kind), parameter :: acc_device_not_host = 4
43      integer (acc_device_kind), parameter :: acc_device_nvidia = 5
44
45      integer, parameter :: acc_handle_kind = 4
46
47!     Keep in sync with include/gomp-constants.h.
48      integer (acc_handle_kind), parameter :: acc_async_noval = -1
49      integer (acc_handle_kind), parameter :: acc_async_sync = -2
50
51      integer, parameter :: openacc_version = 201306
52
53      interface acc_get_num_devices
54        function acc_get_num_devices_h (d)
55          import acc_device_kind
56          integer acc_get_num_devices_h
57          integer (acc_device_kind) d
58        end function
59      end interface
60
61      interface acc_set_device_type
62        subroutine acc_set_device_type_h (d)
63          import acc_device_kind
64          integer (acc_device_kind) d
65        end subroutine
66      end interface
67
68      interface acc_get_device_type
69        function acc_get_device_type_h ()
70          import acc_device_kind
71          integer (acc_device_kind) acc_get_device_type_h
72        end function
73      end interface
74
75      interface acc_set_device_num
76        subroutine acc_set_device_num_h (n, d)
77          import acc_device_kind
78          integer n
79          integer (acc_device_kind) d
80        end subroutine
81      end interface
82
83      interface acc_get_device_num
84        function acc_get_device_num_h (d)
85          import acc_device_kind
86          integer acc_get_device_num_h
87          integer (acc_device_kind) d
88        end function
89      end interface
90
91      interface acc_async_test
92        function acc_async_test_h (a)
93          logical acc_async_test_h
94          integer a
95        end function
96      end interface
97
98      interface acc_async_test_all
99        function acc_async_test_all_h ()
100          logical acc_async_test_all_h
101        end function
102      end interface
103
104      interface acc_wait
105        subroutine acc_wait_h (a)
106          integer a
107        end subroutine
108      end interface
109
110      interface acc_wait_async
111        subroutine acc_wait_async_h (a1, a2)
112          integer a1, a2
113        end subroutine
114      end interface
115
116      interface acc_wait_all
117        subroutine acc_wait_all_h ()
118        end subroutine
119      end interface
120
121      interface acc_wait_all_async
122        subroutine acc_wait_all_async_h (a)
123          integer a
124        end subroutine
125      end interface
126
127      interface acc_init
128        subroutine acc_init_h (devicetype)
129          import acc_device_kind
130          integer (acc_device_kind) devicetype
131        end subroutine
132      end interface
133
134      interface acc_shutdown
135        subroutine acc_shutdown_h (devicetype)
136          import acc_device_kind
137          integer (acc_device_kind) devicetype
138        end subroutine
139      end interface
140
141      interface acc_on_device
142        function acc_on_device_h (devicetype)
143          import acc_device_kind
144          logical acc_on_device_h
145          integer (acc_device_kind) devicetype
146        end function
147      end interface
148
149      ! acc_malloc: Only available in C/C++
150      ! acc_free: Only available in C/C++
151
152      interface acc_copyin
153        subroutine acc_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_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_copyin_array_h (a)
168          type (*), dimension (..), contiguous :: a
169          end subroutine
170      end interface
171
172      interface acc_present_or_copyin
173        subroutine acc_present_or_copyin_32_h (a, len)
174          use iso_c_binding, only: c_int32_t
175          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
176          type (*), dimension (*) :: a
177          integer (c_int32_t) len
178        end subroutine
179
180        subroutine acc_present_or_copyin_64_h (a, len)
181          use iso_c_binding, only: c_int64_t
182          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
183          type (*), dimension (*) :: a
184          integer (c_int64_t) len
185        end subroutine
186
187        subroutine acc_present_or_copyin_array_h (a)
188          type (*), dimension (..), contiguous :: a
189          end subroutine
190      end interface
191
192      interface acc_pcopyin
193        subroutine acc_pcopyin_32_h (a, len)
194          use iso_c_binding, only: c_int32_t
195          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
196          type (*), dimension (*) :: a
197          integer (c_int32_t) len
198        end subroutine
199
200        subroutine acc_pcopyin_64_h (a, len)
201          use iso_c_binding, only: c_int64_t
202          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
203          type (*), dimension (*) :: a
204          integer (c_int64_t) len
205        end subroutine
206
207        subroutine acc_pcopyin_array_h (a)
208          type (*), dimension (..), contiguous :: a
209          end subroutine
210      end interface
211
212      interface acc_create
213        subroutine acc_create_32_h (a, len)
214          use iso_c_binding, only: c_int32_t
215          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
216          type (*), dimension (*) :: a
217          integer (c_int32_t) len
218        end subroutine
219
220        subroutine acc_create_64_h (a, len)
221          use iso_c_binding, only: c_int64_t
222          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
223          type (*), dimension (*) :: a
224          integer (c_int64_t) len
225        end subroutine
226
227        subroutine acc_create_array_h (a)
228          type (*), dimension (..), contiguous :: a
229          end subroutine
230      end interface
231
232      interface acc_present_or_create
233        subroutine acc_present_or_create_32_h (a, len)
234          use iso_c_binding, only: c_int32_t
235          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
236          type (*), dimension (*) :: a
237          integer (c_int32_t) len
238        end subroutine
239
240        subroutine acc_present_or_create_64_h (a, len)
241          use iso_c_binding, only: c_int64_t
242          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
243          type (*), dimension (*) :: a
244          integer (c_int64_t) len
245        end subroutine
246
247        subroutine acc_present_or_create_array_h (a)
248          type (*), dimension (..), contiguous :: a
249          end subroutine
250      end interface
251
252      interface acc_pcreate
253        subroutine acc_pcreate_32_h (a, len)
254          use iso_c_binding, only: c_int32_t
255          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
256          type (*), dimension (*) :: a
257          integer (c_int32_t) len
258        end subroutine
259
260        subroutine acc_pcreate_64_h (a, len)
261          use iso_c_binding, only: c_int64_t
262          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
263          type (*), dimension (*) :: a
264          integer (c_int64_t) len
265        end subroutine
266
267        subroutine acc_pcreate_array_h (a)
268          type (*), dimension (..), contiguous :: a
269          end subroutine
270      end interface
271
272      interface acc_copyout
273        subroutine acc_copyout_32_h (a, len)
274          use iso_c_binding, only: c_int32_t
275          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
276          type (*), dimension (*) :: a
277          integer (c_int32_t) len
278        end subroutine
279
280        subroutine acc_copyout_64_h (a, len)
281          use iso_c_binding, only: c_int64_t
282          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
283          type (*), dimension (*) :: a
284          integer (c_int64_t) len
285        end subroutine
286
287        subroutine acc_copyout_array_h (a)
288          type (*), dimension (..), contiguous :: a
289        end subroutine
290      end interface
291
292      interface acc_delete
293        subroutine acc_delete_32_h (a, len)
294          use iso_c_binding, only: c_int32_t
295          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
296          type (*), dimension (*) :: a
297          integer (c_int32_t) len
298        end subroutine
299
300        subroutine acc_delete_64_h (a, len)
301          use iso_c_binding, only: c_int64_t
302          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
303          type (*), dimension (*) :: a
304          integer (c_int64_t) len
305        end subroutine
306
307        subroutine acc_delete_array_h (a)
308          type (*), dimension (..), contiguous :: a
309        end subroutine
310      end interface
311
312      interface acc_update_device
313        subroutine acc_update_device_32_h (a, len)
314          use iso_c_binding, only: c_int32_t
315          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
316          type (*), dimension (*) :: a
317          integer (c_int32_t) len
318        end subroutine
319
320        subroutine acc_update_device_64_h (a, len)
321          use iso_c_binding, only: c_int64_t
322          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
323          type (*), dimension (*) :: a
324          integer (c_int64_t) len
325        end subroutine
326
327        subroutine acc_update_device_array_h (a)
328          type (*), dimension (..), contiguous :: a
329        end subroutine
330      end interface
331
332      interface acc_update_self
333        subroutine acc_update_self_32_h (a, len)
334          use iso_c_binding, only: c_int32_t
335          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
336          type (*), dimension (*) :: a
337          integer (c_int32_t) len
338        end subroutine
339
340        subroutine acc_update_self_64_h (a, len)
341          use iso_c_binding, only: c_int64_t
342          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
343          type (*), dimension (*) :: a
344          integer (c_int64_t) len
345        end subroutine
346
347        subroutine acc_update_self_array_h (a)
348          type (*), dimension (..), contiguous :: a
349        end subroutine
350      end interface
351
352      ! acc_map_data: Only available in C/C++
353      ! acc_unmap_data: Only available in C/C++
354      ! acc_deviceptr: Only available in C/C++
355      ! acc_ostptr: Only available in C/C++
356
357      interface acc_is_present
358        function acc_is_present_32_h (a, len)
359          use iso_c_binding, only: c_int32_t
360          logical acc_is_present_32_h
361          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
362          type (*), dimension (*) :: a
363          integer (c_int32_t) len
364        end function
365
366        function acc_is_present_64_h (a, len)
367          use iso_c_binding, only: c_int64_t
368          logical acc_is_present_64_h
369          !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
370          type (*), dimension (*) :: a
371          integer (c_int64_t) len
372        end function
373
374        function acc_is_present_array_h (a)
375          logical acc_is_present_array_h
376          type (*), dimension (..), contiguous :: a
377        end function
378      end interface
379
380      ! acc_memcpy_to_device: Only available in C/C++
381      ! acc_memcpy_from_device: Only available in C/C++
382