1!  Copyright (C) 2005, 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
2!  Contributed by Jakub Jelinek <jakub@redhat.com>.
3
4!  This file is part of the GNU OpenMP Library (libgomp).
5
6!  Libgomp is free software; you can redistribute it and/or modify it
7!  under the terms of the GNU General Public License as published by
8!  the Free Software Foundation; either version 3, or (at your option)
9!  any later version.
10
11!  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
12!  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13!  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14!  more details.
15
16!  Under Section 7 of GPL version 3, you are granted additional
17!  permissions described in the GCC Runtime Library Exception, version
18!  3.1, as published by the Free Software Foundation.
19
20!  You should have received a copy of the GNU General Public License and
21!  a copy of the GCC Runtime Library Exception along with this program;
22!  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23!  <http://www.gnu.org/licenses/>.
24
25      module omp_lib_kinds
26        implicit none
27        integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
28        integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
29        integer, parameter :: omp_sched_kind = 4
30      end module
31
32      module omp_lib
33        use omp_lib_kinds
34        implicit none
35        integer, parameter :: openmp_version = 201107
36        integer (omp_sched_kind), parameter :: omp_sched_static = 1
37        integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2
38        integer (omp_sched_kind), parameter :: omp_sched_guided = 3
39        integer (omp_sched_kind), parameter :: omp_sched_auto = 4
40
41        interface
42          subroutine omp_init_lock (lock)
43            use omp_lib_kinds
44            integer (omp_lock_kind), intent (out) :: lock
45          end subroutine omp_init_lock
46        end interface
47
48        interface
49          subroutine omp_init_nest_lock (lock)
50            use omp_lib_kinds
51            integer (omp_nest_lock_kind), intent (out) :: lock
52          end subroutine omp_init_nest_lock
53        end interface
54
55        interface
56          subroutine omp_destroy_lock (lock)
57            use omp_lib_kinds
58            integer (omp_lock_kind), intent (inout) :: lock
59          end subroutine omp_destroy_lock
60        end interface
61
62        interface
63          subroutine omp_destroy_nest_lock (lock)
64            use omp_lib_kinds
65            integer (omp_nest_lock_kind), intent (inout) :: lock
66          end subroutine omp_destroy_nest_lock
67        end interface
68
69        interface
70          subroutine omp_set_lock (lock)
71            use omp_lib_kinds
72            integer (omp_lock_kind), intent (inout) :: lock
73          end subroutine omp_set_lock
74        end interface
75
76        interface
77          subroutine omp_set_nest_lock (lock)
78            use omp_lib_kinds
79            integer (omp_nest_lock_kind), intent (inout) :: lock
80          end subroutine omp_set_nest_lock
81        end interface
82
83        interface
84          subroutine omp_unset_lock (lock)
85            use omp_lib_kinds
86            integer (omp_lock_kind), intent (inout) :: lock
87          end subroutine omp_unset_lock
88        end interface
89
90        interface
91          subroutine omp_unset_nest_lock (lock)
92            use omp_lib_kinds
93            integer (omp_nest_lock_kind), intent (inout) :: lock
94          end subroutine omp_unset_nest_lock
95        end interface
96
97        interface omp_set_dynamic
98          subroutine omp_set_dynamic (set)
99            logical (4), intent (in) :: set
100          end subroutine omp_set_dynamic
101          subroutine omp_set_dynamic_8 (set)
102            logical (8), intent (in) :: set
103          end subroutine omp_set_dynamic_8
104        end interface
105
106        interface omp_set_nested
107          subroutine omp_set_nested (set)
108            logical (4), intent (in) :: set
109          end subroutine omp_set_nested
110          subroutine omp_set_nested_8 (set)
111            logical (8), intent (in) :: set
112          end subroutine omp_set_nested_8
113        end interface
114
115        interface omp_set_num_threads
116          subroutine omp_set_num_threads (set)
117            integer (4), intent (in) :: set
118          end subroutine omp_set_num_threads
119          subroutine omp_set_num_threads_8 (set)
120            integer (8), intent (in) :: set
121          end subroutine omp_set_num_threads_8
122        end interface
123
124        interface
125          function omp_get_dynamic ()
126            use omp_lib_kinds
127            logical (4) :: omp_get_dynamic
128          end function omp_get_dynamic
129        end interface
130
131        interface
132          function omp_get_nested ()
133            use omp_lib_kinds
134            logical (4) :: omp_get_nested
135          end function omp_get_nested
136        end interface
137
138        interface
139          function omp_in_parallel ()
140            use omp_lib_kinds
141            logical (4) :: omp_in_parallel
142          end function omp_in_parallel
143        end interface
144
145        interface
146          function omp_test_lock (lock)
147            use omp_lib_kinds
148            logical (4) :: omp_test_lock
149            integer (omp_lock_kind), intent (inout) :: lock
150          end function omp_test_lock
151        end interface
152
153        interface
154          function omp_get_max_threads ()
155            use omp_lib_kinds
156            integer (4) :: omp_get_max_threads
157          end function omp_get_max_threads
158        end interface
159
160        interface
161          function omp_get_num_procs ()
162            use omp_lib_kinds
163            integer (4) :: omp_get_num_procs
164          end function omp_get_num_procs
165        end interface
166
167        interface
168          function omp_get_num_threads ()
169            use omp_lib_kinds
170            integer (4) :: omp_get_num_threads
171          end function omp_get_num_threads
172        end interface
173
174        interface
175          function omp_get_thread_num ()
176            use omp_lib_kinds
177            integer (4) :: omp_get_thread_num
178          end function omp_get_thread_num
179        end interface
180
181        interface
182          function omp_test_nest_lock (lock)
183            use omp_lib_kinds
184            integer (4) :: omp_test_nest_lock
185            integer (omp_nest_lock_kind), intent (inout) :: lock
186          end function omp_test_nest_lock
187        end interface
188
189        interface
190          function omp_get_wtick ()
191            double precision :: omp_get_wtick
192          end function omp_get_wtick
193        end interface
194
195        interface
196          function omp_get_wtime ()
197            double precision :: omp_get_wtime
198          end function omp_get_wtime
199        end interface
200
201        interface omp_set_schedule
202          subroutine omp_set_schedule (kind, modifier)
203            use omp_lib_kinds
204            integer (omp_sched_kind), intent (in) :: kind
205            integer (4), intent (in) :: modifier
206          end subroutine omp_set_schedule
207          subroutine omp_set_schedule_8 (kind, modifier)
208            use omp_lib_kinds
209            integer (omp_sched_kind), intent (in) :: kind
210            integer (8), intent (in) :: modifier
211          end subroutine omp_set_schedule_8
212         end interface
213
214        interface omp_get_schedule
215          subroutine omp_get_schedule (kind, modifier)
216            use omp_lib_kinds
217            integer (omp_sched_kind), intent (out) :: kind
218            integer (4), intent (out) :: modifier
219          end subroutine omp_get_schedule
220          subroutine omp_get_schedule_8 (kind, modifier)
221            use omp_lib_kinds
222            integer (omp_sched_kind), intent (out) :: kind
223            integer (8), intent (out) :: modifier
224          end subroutine omp_get_schedule_8
225         end interface
226
227        interface
228          function omp_get_thread_limit ()
229            use omp_lib_kinds
230            integer (4) :: omp_get_thread_limit
231          end function omp_get_thread_limit
232        end interface
233
234        interface omp_set_max_active_levels
235          subroutine omp_set_max_active_levels (max_levels)
236            use omp_lib_kinds
237            integer (4), intent (in) :: max_levels
238          end subroutine omp_set_max_active_levels
239          subroutine omp_set_max_active_levels_8 (max_levels)
240            use omp_lib_kinds
241            integer (8), intent (in) :: max_levels
242          end subroutine omp_set_max_active_levels_8
243        end interface
244
245        interface
246          function omp_get_max_active_levels ()
247            use omp_lib_kinds
248            integer (4) :: omp_get_max_active_levels
249          end function omp_get_max_active_levels
250        end interface
251
252        interface
253          function omp_get_level ()
254            use omp_lib_kinds
255            integer (4) :: omp_get_level
256          end function omp_get_level
257        end interface
258
259        interface omp_get_ancestor_thread_num
260          function omp_get_ancestor_thread_num (level)
261            use omp_lib_kinds
262            integer (4), intent (in) :: level
263            integer (4) :: omp_get_ancestor_thread_num
264          end function omp_get_ancestor_thread_num
265          function omp_get_ancestor_thread_num_8 (level)
266            use omp_lib_kinds
267            integer (8), intent (in) :: level
268            integer (4) :: omp_get_ancestor_thread_num_8
269          end function omp_get_ancestor_thread_num_8
270        end interface
271
272        interface omp_get_team_size
273          function omp_get_team_size (level)
274            use omp_lib_kinds
275            integer (4), intent (in) :: level
276            integer (4) :: omp_get_team_size
277          end function omp_get_team_size
278          function omp_get_team_size_8 (level)
279            use omp_lib_kinds
280            integer (8), intent (in) :: level
281            integer (4) :: omp_get_team_size_8
282          end function omp_get_team_size_8
283        end interface
284
285        interface
286          function omp_get_active_level ()
287            use omp_lib_kinds
288            integer (4) :: omp_get_active_level
289          end function omp_get_active_level
290        end interface
291
292        interface
293          function omp_in_final ()
294            use omp_lib_kinds
295            logical (4) :: omp_in_final
296          end function omp_in_final
297        end interface
298
299      end module omp_lib
300