Import pre-release gcc-5.0 to new vendor branch
[dragonfly.git] / contrib / gcc-5.0 / libgomp / openacc_lib.h
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++