1! include/omp_lib.f90.var
2
3!
4!//===----------------------------------------------------------------------===//
5!//
6!// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
7!// See https://llvm.org/LICENSE.txt for license information.
8!// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
9!//
10!//===----------------------------------------------------------------------===//
11!
12
13      module omp_lib_kinds
14
15        use, intrinsic :: iso_c_binding
16
17        integer, parameter :: omp_integer_kind       = c_int
18        integer, parameter :: omp_logical_kind       = 4
19        integer, parameter :: omp_real_kind          = c_float
20        integer, parameter :: kmp_double_kind        = c_double
21        integer, parameter :: omp_lock_kind          = c_intptr_t
22        integer, parameter :: omp_nest_lock_kind     = c_intptr_t
23        integer, parameter :: omp_sched_kind         = omp_integer_kind
24        integer, parameter :: omp_proc_bind_kind     = omp_integer_kind
25        integer, parameter :: kmp_pointer_kind       = c_intptr_t
26        integer, parameter :: kmp_size_t_kind        = c_size_t
27        integer, parameter :: kmp_affinity_mask_kind = c_intptr_t
28        integer, parameter :: kmp_cancel_kind        = omp_integer_kind
29        integer, parameter :: omp_sync_hint_kind     = omp_integer_kind
30        integer, parameter :: omp_lock_hint_kind     = omp_sync_hint_kind
31        integer, parameter :: omp_control_tool_kind  = omp_integer_kind
32        integer, parameter :: omp_control_tool_result_kind = omp_integer_kind
33        integer, parameter :: omp_allocator_handle_kind = c_intptr_t
34        integer, parameter :: omp_memspace_handle_kind = c_intptr_t
35        integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind
36        integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
37        integer, parameter :: omp_interop_kind = c_intptr_t
38        integer, parameter :: omp_interop_fr_kind = omp_integer_kind
39
40        type omp_alloctrait
41          integer(kind=omp_alloctrait_key_kind) key
42          integer(kind=omp_alloctrait_val_kind) value
43        end type omp_alloctrait
44
45        integer, parameter :: omp_pause_resource_kind = omp_integer_kind
46        integer, parameter :: omp_depend_kind = c_intptr_t
47        integer, parameter :: omp_event_handle_kind = c_intptr_t
48
49      end module omp_lib_kinds
50
51      module omp_lib
52
53        use omp_lib_kinds
54
55        integer (kind=omp_integer_kind), parameter :: openmp_version    = @LIBOMP_OMP_YEAR_MONTH@
56        integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@
57        integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@
58        integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@
59        character(*)               kmp_build_date
60        parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' )
61
62        integer(kind=omp_sched_kind), parameter :: omp_sched_static  = 1
63        integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2
64        integer(kind=omp_sched_kind), parameter :: omp_sched_guided  = 3
65        integer(kind=omp_sched_kind), parameter :: omp_sched_auto    = 4
66        integer(kind=omp_sched_kind), parameter :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind)
67
68        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0
69        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1
70        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2
71        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3
72        integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
73
74        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1
75        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2
76        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3
77        integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4
78
79        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_none           = 0
80        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended    = 1
81        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_contended      = 2
82        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4
83        integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_speculative    = 8
84        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = omp_sync_hint_none
85        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = omp_sync_hint_uncontended
86        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = omp_sync_hint_contended
87        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative
88        integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = omp_sync_hint_speculative
89        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle         = 65536
90        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm         = 131072
91        integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive    = 262144
92
93        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_start = 1
94        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_pause = 2
95        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_flush = 3
96        integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_end = 4
97
98        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_notool = -2
99        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_nocallback = -1
100        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_success = 0
101        integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_ignored = 1
102
103        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_sync_hint = 1
104        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2
105        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_access = 3
106        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4
107        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5
108        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6
109        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pinned = 7
110        integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8
111
112        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default = -1
113        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_false = 0
114        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_true = 1
115        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3
116        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4
117        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_serialized = 5
118        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_sequential = omp_atv_serialized
119        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_private = 6
120        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_all = 7
121        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8
122        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9
123        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10
124        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11
125        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12
126        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13
127        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14
128        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15
129        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16
130        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17
131        integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18
132
133        integer (kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0
134        integer (kind=omp_allocator_handle_kind), parameter :: omp_default_mem_alloc = 1
135        integer (kind=omp_allocator_handle_kind), parameter :: omp_large_cap_mem_alloc = 2
136        integer (kind=omp_allocator_handle_kind), parameter :: omp_const_mem_alloc = 3
137        integer (kind=omp_allocator_handle_kind), parameter :: omp_high_bw_mem_alloc = 4
138        integer (kind=omp_allocator_handle_kind), parameter :: omp_low_lat_mem_alloc = 5
139        integer (kind=omp_allocator_handle_kind), parameter :: omp_cgroup_mem_alloc = 6
140        integer (kind=omp_allocator_handle_kind), parameter :: omp_pteam_mem_alloc = 7
141        integer (kind=omp_allocator_handle_kind), parameter :: omp_thread_mem_alloc = 8
142        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_host_mem_alloc = 100
143        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_shared_mem_alloc = 101
144        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_device_mem_alloc = 102
145
146        integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0
147        integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1
148        integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2
149        integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3
150        integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4
151        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_host_mem_space = 100
152        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_shared_mem_space = 101
153        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_device_mem_space = 102
154
155        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0
156        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1
157        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2
158
159        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda = 1
160        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda_driver = 2
161        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_opencl = 3
162        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_sycl = 4
163        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_hip = 5
164        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_level_zero = 6
165        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_last = 7
166
167        integer (kind=omp_interop_kind), parameter :: omp_interop_none = 0
168
169        interface
170
171!         ***
172!         *** omp_* entry points
173!         ***
174
175          subroutine omp_set_num_threads(num_threads) bind(c)
176            use omp_lib_kinds
177            integer (kind=omp_integer_kind), value :: num_threads
178          end subroutine omp_set_num_threads
179
180          subroutine omp_set_dynamic(dynamic_threads) bind(c)
181            use omp_lib_kinds
182            logical (kind=omp_logical_kind), value :: dynamic_threads
183          end subroutine omp_set_dynamic
184
185          subroutine omp_set_nested(nested) bind(c)
186            use omp_lib_kinds
187            logical (kind=omp_logical_kind), value :: nested
188          end subroutine omp_set_nested
189
190          function omp_get_num_threads() bind(c)
191            use omp_lib_kinds
192            integer (kind=omp_integer_kind) omp_get_num_threads
193          end function omp_get_num_threads
194
195          function omp_get_max_threads() bind(c)
196            use omp_lib_kinds
197            integer (kind=omp_integer_kind) omp_get_max_threads
198          end function omp_get_max_threads
199
200          function omp_get_thread_num() bind(c)
201            use omp_lib_kinds
202            integer (kind=omp_integer_kind) omp_get_thread_num
203          end function omp_get_thread_num
204
205          function omp_get_num_procs() bind(c)
206            use omp_lib_kinds
207            integer (kind=omp_integer_kind) omp_get_num_procs
208          end function omp_get_num_procs
209
210          function omp_in_parallel() bind(c)
211            use omp_lib_kinds
212            logical (kind=omp_logical_kind) omp_in_parallel
213          end function omp_in_parallel
214
215          function omp_in_final() bind(c)
216            use omp_lib_kinds
217            logical (kind=omp_logical_kind) omp_in_final
218          end function omp_in_final
219
220          function omp_get_dynamic() bind(c)
221            use omp_lib_kinds
222            logical (kind=omp_logical_kind) omp_get_dynamic
223          end function omp_get_dynamic
224
225          function omp_get_nested() bind(c)
226            use omp_lib_kinds
227            logical (kind=omp_logical_kind) omp_get_nested
228          end function omp_get_nested
229
230          function omp_get_thread_limit() bind(c)
231            use omp_lib_kinds
232            integer (kind=omp_integer_kind) omp_get_thread_limit
233          end function omp_get_thread_limit
234
235          subroutine omp_set_max_active_levels(max_levels) bind(c)
236            use omp_lib_kinds
237            integer (kind=omp_integer_kind), value :: max_levels
238          end subroutine omp_set_max_active_levels
239
240          function omp_get_max_active_levels() bind(c)
241            use omp_lib_kinds
242            integer (kind=omp_integer_kind) omp_get_max_active_levels
243          end function omp_get_max_active_levels
244
245          function omp_get_level() bind(c)
246            use omp_lib_kinds
247            integer (kind=omp_integer_kind) omp_get_level
248          end function omp_get_level
249
250          function omp_get_active_level() bind(c)
251            use omp_lib_kinds
252            integer (kind=omp_integer_kind) omp_get_active_level
253          end function omp_get_active_level
254
255          function omp_get_ancestor_thread_num(level) bind(c)
256            use omp_lib_kinds
257            integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
258            integer (kind=omp_integer_kind), value :: level
259          end function omp_get_ancestor_thread_num
260
261          function omp_get_team_size(level) bind(c)
262            use omp_lib_kinds
263            integer (kind=omp_integer_kind) omp_get_team_size
264            integer (kind=omp_integer_kind), value :: level
265          end function omp_get_team_size
266
267          subroutine omp_set_schedule(kind, chunk_size) bind(c)
268            use omp_lib_kinds
269            integer (kind=omp_sched_kind), value :: kind
270            integer (kind=omp_integer_kind), value :: chunk_size
271          end subroutine omp_set_schedule
272
273          subroutine omp_get_schedule(kind, chunk_size) bind(c)
274            use omp_lib_kinds
275            integer (kind=omp_sched_kind) kind
276            integer (kind=omp_integer_kind) chunk_size
277          end subroutine omp_get_schedule
278
279          function omp_get_proc_bind() bind(c)
280            use omp_lib_kinds
281            integer (kind=omp_proc_bind_kind) omp_get_proc_bind
282          end function omp_get_proc_bind
283
284          function omp_get_num_places() bind(c)
285            use omp_lib_kinds
286            integer (kind=omp_integer_kind) omp_get_num_places
287          end function omp_get_num_places
288
289          function omp_get_place_num_procs(place_num) bind(c)
290            use omp_lib_kinds
291            integer (kind=omp_integer_kind), value :: place_num
292            integer (kind=omp_integer_kind) omp_get_place_num_procs
293          end function omp_get_place_num_procs
294
295          subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
296            use omp_lib_kinds
297            integer (kind=omp_integer_kind), value :: place_num
298            integer (kind=omp_integer_kind) ids(*)
299          end subroutine omp_get_place_proc_ids
300
301          function omp_get_place_num() bind(c)
302            use omp_lib_kinds
303            integer (kind=omp_integer_kind) omp_get_place_num
304          end function omp_get_place_num
305
306          function omp_get_partition_num_places() bind(c)
307            use omp_lib_kinds
308            integer (kind=omp_integer_kind) omp_get_partition_num_places
309          end function omp_get_partition_num_places
310
311          subroutine omp_get_partition_place_nums(place_nums) bind(c)
312            use omp_lib_kinds
313            integer (kind=omp_integer_kind) place_nums(*)
314          end subroutine omp_get_partition_place_nums
315
316          function omp_get_wtime() bind(c)
317            use omp_lib_kinds
318            real (kind=kmp_double_kind) omp_get_wtime
319          end function omp_get_wtime
320
321          function omp_get_wtick() bind(c)
322            use omp_lib_kinds
323            real (kind=kmp_double_kind) omp_get_wtick
324          end function omp_get_wtick
325
326          function omp_get_default_device() bind(c)
327            use omp_lib_kinds
328            integer (kind=omp_integer_kind) omp_get_default_device
329          end function omp_get_default_device
330
331          subroutine omp_set_default_device(device_num) bind(c)
332            use omp_lib_kinds
333            integer (kind=omp_integer_kind), value :: device_num
334          end subroutine omp_set_default_device
335
336          function omp_get_num_devices() bind(c)
337            use omp_lib_kinds
338            integer (kind=omp_integer_kind) omp_get_num_devices
339          end function omp_get_num_devices
340
341          function omp_get_num_teams() bind(c)
342            use omp_lib_kinds
343            integer (kind=omp_integer_kind) omp_get_num_teams
344          end function omp_get_num_teams
345
346          function omp_get_team_num() bind(c)
347            use omp_lib_kinds
348            integer (kind=omp_integer_kind) omp_get_team_num
349          end function omp_get_team_num
350
351          function omp_get_cancellation() bind(c)
352            use omp_lib_kinds
353            integer (kind=omp_integer_kind) omp_get_cancellation
354          end function omp_get_cancellation
355
356          function omp_is_initial_device() bind(c)
357            use omp_lib_kinds
358            logical (kind=omp_logical_kind) omp_is_initial_device
359          end function omp_is_initial_device
360
361          function omp_get_initial_device() bind(c)
362            use omp_lib_kinds
363            integer (kind=omp_integer_kind) omp_get_initial_device
364          end function omp_get_initial_device
365
366          function omp_get_device_num() bind(c)
367            use omp_lib_kinds
368            integer (kind=omp_integer_kind) omp_get_device_num
369          end function omp_get_device_num
370
371          function omp_pause_resource(kind, device_num) bind(c)
372            use omp_lib_kinds
373            integer (kind=omp_pause_resource_kind), value :: kind
374            integer (kind=omp_integer_kind), value :: device_num
375            integer (kind=omp_integer_kind) omp_pause_resource
376          end function omp_pause_resource
377
378          function omp_pause_resource_all(kind) bind(c)
379            use omp_lib_kinds
380            integer (kind=omp_pause_resource_kind), value :: kind
381            integer (kind=omp_integer_kind) omp_pause_resource_all
382          end function omp_pause_resource_all
383
384          function omp_get_supported_active_levels() bind(c)
385            use omp_lib_kinds
386            integer (kind=omp_integer_kind) omp_get_supported_active_levels
387          end function omp_get_supported_active_levels
388
389          subroutine omp_fulfill_event(event) bind(c)
390            use omp_lib_kinds
391            integer (kind=omp_event_handle_kind), value :: event
392          end subroutine omp_fulfill_event
393
394          subroutine omp_init_lock(svar) bind(c)
395!DIR$ IF(__INTEL_COMPILER.GE.1400)
396!DIR$ attributes known_intrinsic :: omp_init_lock
397!DIR$ ENDIF
398            use omp_lib_kinds
399            integer (kind=omp_lock_kind) svar
400          end subroutine omp_init_lock
401
402          subroutine omp_destroy_lock(svar) bind(c)
403!DIR$ IF(__INTEL_COMPILER.GE.1400)
404!DIR$ attributes known_intrinsic :: omp_destroy_lock
405!DIR$ ENDIF
406            use omp_lib_kinds
407            integer (kind=omp_lock_kind) svar
408          end subroutine omp_destroy_lock
409
410          subroutine omp_set_lock(svar) bind(c)
411!DIR$ IF(__INTEL_COMPILER.GE.1400)
412!DIR$ attributes known_intrinsic :: omp_set_lock
413!DIR$ ENDIF
414            use omp_lib_kinds
415            integer (kind=omp_lock_kind) svar
416          end subroutine omp_set_lock
417
418          subroutine omp_unset_lock(svar) bind(c)
419!DIR$ IF(__INTEL_COMPILER.GE.1400)
420!DIR$ attributes known_intrinsic :: omp_unset_lock
421!DIR$ ENDIF
422            use omp_lib_kinds
423            integer (kind=omp_lock_kind) svar
424          end subroutine omp_unset_lock
425
426          function omp_test_lock(svar) bind(c)
427!DIR$ IF(__INTEL_COMPILER.GE.1400)
428!DIR$ attributes known_intrinsic :: omp_test_lock
429!DIR$ ENDIF
430            use omp_lib_kinds
431            logical (kind=omp_logical_kind) omp_test_lock
432            integer (kind=omp_lock_kind) svar
433          end function omp_test_lock
434
435          subroutine omp_init_nest_lock(nvar) bind(c)
436!DIR$ IF(__INTEL_COMPILER.GE.1400)
437!DIR$ attributes known_intrinsic :: omp_init_nest_lock
438!DIR$ ENDIF
439            use omp_lib_kinds
440            integer (kind=omp_nest_lock_kind) nvar
441          end subroutine omp_init_nest_lock
442
443          subroutine omp_destroy_nest_lock(nvar) bind(c)
444!DIR$ IF(__INTEL_COMPILER.GE.1400)
445!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
446!DIR$ ENDIF
447            use omp_lib_kinds
448            integer (kind=omp_nest_lock_kind) nvar
449          end subroutine omp_destroy_nest_lock
450
451          subroutine omp_set_nest_lock(nvar) bind(c)
452!DIR$ IF(__INTEL_COMPILER.GE.1400)
453!DIR$ attributes known_intrinsic :: omp_set_nest_lock
454!DIR$ ENDIF
455            use omp_lib_kinds
456            integer (kind=omp_nest_lock_kind) nvar
457          end subroutine omp_set_nest_lock
458
459          subroutine omp_unset_nest_lock(nvar) bind(c)
460!DIR$ IF(__INTEL_COMPILER.GE.1400)
461!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
462!DIR$ ENDIF
463            use omp_lib_kinds
464            integer (kind=omp_nest_lock_kind) nvar
465          end subroutine omp_unset_nest_lock
466
467          function omp_test_nest_lock(nvar) bind(c)
468!DIR$ IF(__INTEL_COMPILER.GE.1400)
469!DIR$ attributes known_intrinsic :: omp_test_nest_lock
470!DIR$ ENDIF
471            use omp_lib_kinds
472            integer (kind=omp_integer_kind) omp_test_nest_lock
473            integer (kind=omp_nest_lock_kind) nvar
474          end function omp_test_nest_lock
475
476          function omp_get_max_task_priority() bind(c)
477            use omp_lib_kinds
478            integer (kind=omp_integer_kind) omp_get_max_task_priority
479          end function omp_get_max_task_priority
480
481          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
482            use omp_lib_kinds
483            integer (kind=omp_lock_kind) svar
484            integer (kind=omp_lock_hint_kind), value :: hint
485          end subroutine omp_init_lock_with_hint
486
487          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
488            use omp_lib_kinds
489            integer (kind=omp_nest_lock_kind) nvar
490            integer (kind=omp_lock_hint_kind), value :: hint
491          end subroutine omp_init_nest_lock_with_hint
492
493          function omp_control_tool(command, modifier, arg) bind(c)
494            use omp_lib_kinds
495            integer (kind=omp_integer_kind) omp_control_tool
496            integer (kind=omp_control_tool_kind), value :: command
497            integer (kind=omp_control_tool_kind), value :: modifier
498            integer (kind=kmp_pointer_kind), optional :: arg
499          end function omp_control_tool
500
501          function omp_init_allocator(memspace, ntraits, traits)
502            use omp_lib_kinds
503            integer (kind=omp_allocator_handle_kind) omp_init_allocator
504            integer (kind=omp_memspace_handle_kind) :: memspace
505            integer (kind=omp_integer_kind) :: ntraits
506            type(omp_alloctrait), intent(in) :: traits(*)
507          end function omp_init_allocator
508
509          subroutine omp_destroy_allocator(allocator) bind(c)
510            use omp_lib_kinds
511            integer (kind=omp_allocator_handle_kind), value :: allocator
512          end subroutine omp_destroy_allocator
513
514          subroutine omp_set_default_allocator(allocator) bind(c)
515            use omp_lib_kinds
516            integer (kind=omp_allocator_handle_kind), value :: allocator
517          end subroutine omp_set_default_allocator
518
519          function omp_get_default_allocator() bind(c)
520            use omp_lib_kinds
521            integer (kind=omp_allocator_handle_kind) omp_get_default_allocator
522          end function omp_get_default_allocator
523
524          subroutine omp_set_affinity_format(format)
525            character (len=*) :: format
526          end subroutine omp_set_affinity_format
527
528          function omp_get_affinity_format(buffer)
529            use omp_lib_kinds
530            character (len=*) :: buffer
531            integer (kind=kmp_size_t_kind) :: omp_get_affinity_format
532          end function omp_get_affinity_format
533
534          subroutine omp_display_affinity(format)
535            character (len=*) :: format
536          end subroutine omp_display_affinity
537
538          function omp_capture_affinity(buffer, format)
539            use omp_lib_kinds
540            character (len=*) :: format
541            character (len=*) :: buffer
542            integer (kind=kmp_size_t_kind) :: omp_capture_affinity
543          end function omp_capture_affinity
544
545          subroutine omp_set_num_teams(num_teams) bind(c)
546            use omp_lib_kinds
547            integer (kind=omp_integer_kind), value :: num_teams
548          end subroutine omp_set_num_teams
549
550          function omp_get_max_teams() bind(c)
551            use omp_lib_kinds
552            integer (kind=omp_integer_kind) omp_get_max_teams
553          end function omp_get_max_teams
554
555          subroutine omp_set_teams_thread_limit(thread_limit) bind(c)
556            use omp_lib_kinds
557            integer (kind=omp_integer_kind), value :: thread_limit
558          end subroutine omp_set_teams_thread_limit
559
560          function omp_get_teams_thread_limit() bind(c)
561            use omp_lib_kinds
562            integer (kind=omp_integer_kind) omp_get_teams_thread_limit
563          end function omp_get_teams_thread_limit
564
565          subroutine omp_display_env(verbose) bind(c)
566            use omp_lib_kinds
567            logical (kind=omp_logical_kind), value :: verbose
568          end subroutine omp_display_env
569
570          function omp_target_alloc(size, device_num) bind(c)
571            use omp_lib_kinds
572            type(c_ptr) omp_target_alloc
573            integer(c_size_t), value :: size
574            integer(c_int), value :: device_num
575          end function omp_target_alloc
576
577          subroutine omp_target_free(device_ptr, device_num) bind(c)
578            use omp_lib_kinds
579            type(c_ptr), value :: device_ptr
580            integer(c_int), value :: device_num
581          end subroutine omp_target_free
582
583          function omp_target_is_present(ptr, device_num) bind(c)
584            use omp_lib_kinds
585            integer(c_int) omp_target_is_present
586            type(c_ptr), value :: ptr
587            integer(c_int), value :: device_num
588          end function omp_target_is_present
589
590          function omp_target_memcpy(dst, src, length, dst_offset, src_offset, &
591              dst_device_num, src_device_num) bind(c)
592            use omp_lib_kinds
593            integer(c_int) omp_target_memcpy
594            type(c_ptr), value :: dst, src
595            integer(c_size_t), value :: length, dst_offset, src_offset
596            integer(c_int), value :: dst_device_num, src_device_num
597          end function omp_target_memcpy
598
599          function omp_target_memcpy_rect(dst, src, element_size, num_dims,    &
600              volume, dst_offsets, src_offsets, dst_dimensions,                &
601              src_dimensions, dst_device_num, src_device_num) bind(c)
602            use omp_lib_kinds
603            integer(c_int) omp_target_memcpy_rect
604            type(c_ptr), value :: dst, src
605            integer(c_size_t), value :: element_size
606            integer(c_int), value :: num_dims, dst_device_num, src_device_num
607            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
608                src_offsets(*), dst_dimensions(*), src_dimensions(*)
609          end function omp_target_memcpy_rect
610
611          function omp_target_memcpy_async(dst, src, length, dst_offset,       &
612              src_offset, dst_device_num, src_device_num, depobj_count,        &
613              depobj_list) bind(c)
614            use omp_lib_kinds
615            integer(c_int) omp_target_memcpy_async
616            type(c_ptr), value :: dst, src
617            integer(c_size_t), value :: length, dst_offset, src_offset
618            integer(c_int), value :: dst_device_num, src_device_num,           &
619                depobj_count
620            integer(omp_depend_kind), optional :: depobj_list(*)
621          end function omp_target_memcpy_async
622
623          function omp_target_memcpy_rect_async(dst, src, element_size,        &
624              num_dims, volume, dst_offsets, src_offsets, dst_dimensions,      &
625              src_dimensions, dst_device_num, src_device_num, depobj_count,    &
626              depobj_list) bind(c)
627            use omp_lib_kinds
628            integer(c_int) omp_target_memcpy_rect_async
629            type(c_ptr), value :: dst, src
630            integer(c_size_t), value :: element_size
631            integer(c_int), value :: num_dims, dst_device_num, src_device_num, &
632                depobj_count
633            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
634                src_offsets(*), dst_dimensions(*), src_dimensions(*)
635            integer (omp_depend_kind), optional :: depobj_list(*)
636          end function omp_target_memcpy_rect_async
637
638          function omp_target_associate_ptr(host_ptr, device_ptr, size,        &
639              device_offset, device_num) bind(c)
640            use omp_lib_kinds
641            integer(c_int) omp_target_associate_ptr
642            type(c_ptr), value :: host_ptr, device_ptr
643            integer(c_size_t), value :: size, device_offset
644            integer(c_int), value :: device_num
645          end function omp_target_associate_ptr
646
647          function omp_get_mapped_ptr(ptr, device_num) bind(c)
648            use omp_lib_kinds
649            type(c_ptr) omp_get_mapped_ptr
650            type(c_ptr), value :: ptr
651            integer(c_int), value :: device_num
652          end function omp_get_mapped_ptr
653
654          function omp_target_disassociate_ptr(ptr, device_num) bind(c)
655            use omp_lib_kinds
656            integer(c_int) omp_target_disassociate_ptr
657            type(c_ptr), value :: ptr
658            integer(c_int), value :: device_num
659          end function omp_target_disassociate_ptr
660
661          function omp_target_is_accessible(ptr, size, device_num) bind(c)
662            use omp_lib_kinds
663            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
664            integer(c_int) omp_target_is_accessible
665            type(c_ptr), value :: ptr
666            integer(c_size_t), value :: size
667            integer(c_int), value :: device_num
668          end function omp_target_is_accessible
669
670          function omp_alloc(size, allocator) bind(c)
671            use omp_lib_kinds
672            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
673            type(c_ptr) omp_alloc
674            integer(c_size_t), value :: size
675            integer(omp_allocator_handle_kind), value :: allocator
676          end function omp_alloc
677
678          function omp_aligned_alloc(alignment, size, allocator) bind(c)
679            use omp_lib_kinds
680            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
681            type(c_ptr) omp_aligned_alloc
682            integer(c_size_t), value :: alignment, size
683            integer(omp_allocator_handle_kind), value :: allocator
684          end function omp_aligned_alloc
685
686          function omp_calloc(nmemb, size, allocator) bind(c)
687            use omp_lib_kinds
688            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
689            type(c_ptr) omp_calloc
690            integer(c_size_t), value :: nmemb, size
691            integer(omp_allocator_handle_kind), value :: allocator
692          end function omp_calloc
693
694          function omp_aligned_calloc(alignment, nmemb, size, allocator) bind(c)
695            use omp_lib_kinds
696            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
697            type(c_ptr) omp_aligned_calloc
698            integer(c_size_t), value :: alignment, nmemb, size
699            integer(omp_allocator_handle_kind), value :: allocator
700          end function omp_aligned_calloc
701
702          function omp_realloc(ptr, size, allocator, free_allocator) bind(c)
703            use omp_lib_kinds
704            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
705            type(c_ptr) omp_realloc
706            type(c_ptr), value :: ptr
707            integer(c_size_t), value :: size
708            integer(omp_allocator_handle_kind), value :: allocator
709            integer(omp_allocator_handle_kind), value :: free_allocator
710          end function omp_realloc
711
712          subroutine omp_free(ptr, allocator) bind(c)
713            use omp_lib_kinds
714            use, intrinsic :: iso_c_binding, only : c_ptr
715            type(c_ptr), value :: ptr
716            integer(omp_allocator_handle_kind), value :: allocator
717          end subroutine omp_free
718
719          function omp_in_explicit_task() bind(c)
720            use omp_lib_kinds
721            logical (kind=omp_logical_kind) omp_in_explicit_task
722          end function omp_in_explicit_task
723
724!         ***
725!         *** kmp_* entry points
726!         ***
727
728          subroutine kmp_set_stacksize(size) bind(c)
729            use omp_lib_kinds
730            integer (kind=omp_integer_kind), value :: size
731          end subroutine kmp_set_stacksize
732
733          subroutine kmp_set_stacksize_s(size) bind(c)
734            use omp_lib_kinds
735            integer (kind=kmp_size_t_kind), value :: size
736          end subroutine kmp_set_stacksize_s
737
738          subroutine kmp_set_blocktime(msec) bind(c)
739            use omp_lib_kinds
740            integer (kind=omp_integer_kind), value :: msec
741          end subroutine kmp_set_blocktime
742
743          subroutine kmp_set_library_serial() bind(c)
744          end subroutine kmp_set_library_serial
745
746          subroutine kmp_set_library_turnaround() bind(c)
747          end subroutine kmp_set_library_turnaround
748
749          subroutine kmp_set_library_throughput() bind(c)
750          end subroutine kmp_set_library_throughput
751
752          subroutine kmp_set_library(libnum) bind(c)
753            use omp_lib_kinds
754            integer (kind=omp_integer_kind), value :: libnum
755          end subroutine kmp_set_library
756
757          subroutine kmp_set_defaults(string) bind(c)
758            use, intrinsic :: iso_c_binding
759            character (kind=c_char) :: string(*)
760          end subroutine kmp_set_defaults
761
762          function kmp_get_stacksize() bind(c)
763            use omp_lib_kinds
764            integer (kind=omp_integer_kind) kmp_get_stacksize
765          end function kmp_get_stacksize
766
767          function kmp_get_stacksize_s() bind(c)
768            use omp_lib_kinds
769            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
770          end function kmp_get_stacksize_s
771
772          function kmp_get_blocktime() bind(c)
773            use omp_lib_kinds
774            integer (kind=omp_integer_kind) kmp_get_blocktime
775          end function kmp_get_blocktime
776
777          function kmp_get_library() bind(c)
778            use omp_lib_kinds
779            integer (kind=omp_integer_kind) kmp_get_library
780          end function kmp_get_library
781
782          subroutine kmp_set_disp_num_buffers(num) bind(c)
783            use omp_lib_kinds
784            integer (kind=omp_integer_kind), value :: num
785          end subroutine kmp_set_disp_num_buffers
786
787          function kmp_set_affinity(mask) bind(c)
788            use omp_lib_kinds
789            integer (kind=omp_integer_kind) kmp_set_affinity
790            integer (kind=kmp_affinity_mask_kind) mask
791          end function kmp_set_affinity
792
793          function kmp_get_affinity(mask) bind(c)
794            use omp_lib_kinds
795            integer (kind=omp_integer_kind) kmp_get_affinity
796            integer (kind=kmp_affinity_mask_kind) mask
797          end function kmp_get_affinity
798
799          function kmp_get_affinity_max_proc() bind(c)
800            use omp_lib_kinds
801            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
802          end function kmp_get_affinity_max_proc
803
804          subroutine kmp_create_affinity_mask(mask) bind(c)
805            use omp_lib_kinds
806            integer (kind=kmp_affinity_mask_kind) mask
807          end subroutine kmp_create_affinity_mask
808
809          subroutine kmp_destroy_affinity_mask(mask) bind(c)
810            use omp_lib_kinds
811            integer (kind=kmp_affinity_mask_kind) mask
812          end subroutine kmp_destroy_affinity_mask
813
814          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
815            use omp_lib_kinds
816            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
817            integer (kind=omp_integer_kind), value :: proc
818            integer (kind=kmp_affinity_mask_kind) mask
819          end function kmp_set_affinity_mask_proc
820
821          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
822            use omp_lib_kinds
823            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
824            integer (kind=omp_integer_kind), value :: proc
825            integer (kind=kmp_affinity_mask_kind) mask
826          end function kmp_unset_affinity_mask_proc
827
828          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
829            use omp_lib_kinds
830            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
831            integer (kind=omp_integer_kind), value :: proc
832            integer (kind=kmp_affinity_mask_kind) mask
833          end function kmp_get_affinity_mask_proc
834
835          function kmp_malloc(size) bind(c)
836            use omp_lib_kinds
837            integer (kind=kmp_pointer_kind) kmp_malloc
838            integer (kind=kmp_size_t_kind), value :: size
839          end function kmp_malloc
840
841          function kmp_aligned_malloc(size, alignment) bind(c)
842            use omp_lib_kinds
843            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
844            integer (kind=kmp_size_t_kind), value :: size
845            integer (kind=kmp_size_t_kind), value :: alignment
846          end function kmp_aligned_malloc
847
848          function kmp_calloc(nelem, elsize) bind(c)
849            use omp_lib_kinds
850            integer (kind=kmp_pointer_kind) kmp_calloc
851            integer (kind=kmp_size_t_kind), value :: nelem
852            integer (kind=kmp_size_t_kind), value :: elsize
853          end function kmp_calloc
854
855          function kmp_realloc(ptr, size) bind(c)
856            use omp_lib_kinds
857            integer (kind=kmp_pointer_kind) kmp_realloc
858            integer (kind=kmp_pointer_kind), value :: ptr
859            integer (kind=kmp_size_t_kind), value :: size
860          end function kmp_realloc
861
862          subroutine kmp_free(ptr) bind(c)
863            use omp_lib_kinds
864            integer (kind=kmp_pointer_kind), value :: ptr
865          end subroutine kmp_free
866
867          subroutine kmp_set_warnings_on() bind(c)
868          end subroutine kmp_set_warnings_on
869
870          subroutine kmp_set_warnings_off() bind(c)
871          end subroutine kmp_set_warnings_off
872
873          function kmp_get_cancellation_status(cancelkind) bind(c)
874            use omp_lib_kinds
875            integer (kind=kmp_cancel_kind), value :: cancelkind
876            logical (kind=omp_logical_kind) kmp_get_cancellation_status
877          end function kmp_get_cancellation_status
878
879        end interface
880
881      end module omp_lib
882