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        ! Preview of target memory support
143        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_host_mem_alloc = 100
144        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_shared_mem_alloc = 101
145        integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_device_mem_alloc = 102
146
147        integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0
148        integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1
149        integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2
150        integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3
151        integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4
152        ! Preview of target memory support
153        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_host_mem_space = 100
154        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_shared_mem_space = 101
155        integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_device_mem_space = 102
156
157        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0
158        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1
159        integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2
160
161        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda = 1
162        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda_driver = 2
163        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_opencl = 3
164        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_sycl = 4
165        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_hip = 5
166        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_level_zero = 6
167        integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_last = 7
168
169        integer (kind=omp_interop_kind), parameter :: omp_interop_none = 0
170
171        interface
172
173!         ***
174!         *** omp_* entry points
175!         ***
176
177          subroutine omp_set_num_threads(num_threads) bind(c)
178            use omp_lib_kinds
179            integer (kind=omp_integer_kind), value :: num_threads
180          end subroutine omp_set_num_threads
181
182          subroutine omp_set_dynamic(dynamic_threads) bind(c)
183            use omp_lib_kinds
184            logical (kind=omp_logical_kind), value :: dynamic_threads
185          end subroutine omp_set_dynamic
186
187          subroutine omp_set_nested(nested) bind(c)
188            use omp_lib_kinds
189            logical (kind=omp_logical_kind), value :: nested
190          end subroutine omp_set_nested
191
192          function omp_get_num_threads() bind(c)
193            use omp_lib_kinds
194            integer (kind=omp_integer_kind) omp_get_num_threads
195          end function omp_get_num_threads
196
197          function omp_get_max_threads() bind(c)
198            use omp_lib_kinds
199            integer (kind=omp_integer_kind) omp_get_max_threads
200          end function omp_get_max_threads
201
202          function omp_get_thread_num() bind(c)
203            use omp_lib_kinds
204            integer (kind=omp_integer_kind) omp_get_thread_num
205          end function omp_get_thread_num
206
207          function omp_get_num_procs() bind(c)
208            use omp_lib_kinds
209            integer (kind=omp_integer_kind) omp_get_num_procs
210          end function omp_get_num_procs
211
212          function omp_in_parallel() bind(c)
213            use omp_lib_kinds
214            logical (kind=omp_logical_kind) omp_in_parallel
215          end function omp_in_parallel
216
217          function omp_in_final() bind(c)
218            use omp_lib_kinds
219            logical (kind=omp_logical_kind) omp_in_final
220          end function omp_in_final
221
222          function omp_get_dynamic() bind(c)
223            use omp_lib_kinds
224            logical (kind=omp_logical_kind) omp_get_dynamic
225          end function omp_get_dynamic
226
227          function omp_get_nested() bind(c)
228            use omp_lib_kinds
229            logical (kind=omp_logical_kind) omp_get_nested
230          end function omp_get_nested
231
232          function omp_get_thread_limit() bind(c)
233            use omp_lib_kinds
234            integer (kind=omp_integer_kind) omp_get_thread_limit
235          end function omp_get_thread_limit
236
237          subroutine omp_set_max_active_levels(max_levels) bind(c)
238            use omp_lib_kinds
239            integer (kind=omp_integer_kind), value :: max_levels
240          end subroutine omp_set_max_active_levels
241
242          function omp_get_max_active_levels() bind(c)
243            use omp_lib_kinds
244            integer (kind=omp_integer_kind) omp_get_max_active_levels
245          end function omp_get_max_active_levels
246
247          function omp_get_level() bind(c)
248            use omp_lib_kinds
249            integer (kind=omp_integer_kind) omp_get_level
250          end function omp_get_level
251
252          function omp_get_active_level() bind(c)
253            use omp_lib_kinds
254            integer (kind=omp_integer_kind) omp_get_active_level
255          end function omp_get_active_level
256
257          function omp_get_ancestor_thread_num(level) bind(c)
258            use omp_lib_kinds
259            integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
260            integer (kind=omp_integer_kind), value :: level
261          end function omp_get_ancestor_thread_num
262
263          function omp_get_team_size(level) bind(c)
264            use omp_lib_kinds
265            integer (kind=omp_integer_kind) omp_get_team_size
266            integer (kind=omp_integer_kind), value :: level
267          end function omp_get_team_size
268
269          subroutine omp_set_schedule(kind, chunk_size) bind(c)
270            use omp_lib_kinds
271            integer (kind=omp_sched_kind), value :: kind
272            integer (kind=omp_integer_kind), value :: chunk_size
273          end subroutine omp_set_schedule
274
275          subroutine omp_get_schedule(kind, chunk_size) bind(c)
276            use omp_lib_kinds
277            integer (kind=omp_sched_kind) kind
278            integer (kind=omp_integer_kind) chunk_size
279          end subroutine omp_get_schedule
280
281          function omp_get_proc_bind() bind(c)
282            use omp_lib_kinds
283            integer (kind=omp_proc_bind_kind) omp_get_proc_bind
284          end function omp_get_proc_bind
285
286          function omp_get_num_places() bind(c)
287            use omp_lib_kinds
288            integer (kind=omp_integer_kind) omp_get_num_places
289          end function omp_get_num_places
290
291          function omp_get_place_num_procs(place_num) bind(c)
292            use omp_lib_kinds
293            integer (kind=omp_integer_kind), value :: place_num
294            integer (kind=omp_integer_kind) omp_get_place_num_procs
295          end function omp_get_place_num_procs
296
297          subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
298            use omp_lib_kinds
299            integer (kind=omp_integer_kind), value :: place_num
300            integer (kind=omp_integer_kind) ids(*)
301          end subroutine omp_get_place_proc_ids
302
303          function omp_get_place_num() bind(c)
304            use omp_lib_kinds
305            integer (kind=omp_integer_kind) omp_get_place_num
306          end function omp_get_place_num
307
308          function omp_get_partition_num_places() bind(c)
309            use omp_lib_kinds
310            integer (kind=omp_integer_kind) omp_get_partition_num_places
311          end function omp_get_partition_num_places
312
313          subroutine omp_get_partition_place_nums(place_nums) bind(c)
314            use omp_lib_kinds
315            integer (kind=omp_integer_kind) place_nums(*)
316          end subroutine omp_get_partition_place_nums
317
318          function omp_get_wtime() bind(c)
319            use omp_lib_kinds
320            real (kind=kmp_double_kind) omp_get_wtime
321          end function omp_get_wtime
322
323          function omp_get_wtick() bind(c)
324            use omp_lib_kinds
325            real (kind=kmp_double_kind) omp_get_wtick
326          end function omp_get_wtick
327
328          function omp_get_default_device() bind(c)
329            use omp_lib_kinds
330            integer (kind=omp_integer_kind) omp_get_default_device
331          end function omp_get_default_device
332
333          subroutine omp_set_default_device(device_num) bind(c)
334            use omp_lib_kinds
335            integer (kind=omp_integer_kind), value :: device_num
336          end subroutine omp_set_default_device
337
338          function omp_get_num_devices() bind(c)
339            use omp_lib_kinds
340            integer (kind=omp_integer_kind) omp_get_num_devices
341          end function omp_get_num_devices
342
343          function omp_get_num_teams() bind(c)
344            use omp_lib_kinds
345            integer (kind=omp_integer_kind) omp_get_num_teams
346          end function omp_get_num_teams
347
348          function omp_get_team_num() bind(c)
349            use omp_lib_kinds
350            integer (kind=omp_integer_kind) omp_get_team_num
351          end function omp_get_team_num
352
353          function omp_get_cancellation() bind(c)
354            use omp_lib_kinds
355            integer (kind=omp_integer_kind) omp_get_cancellation
356          end function omp_get_cancellation
357
358          function omp_is_initial_device() bind(c)
359            use omp_lib_kinds
360            logical (kind=omp_logical_kind) omp_is_initial_device
361          end function omp_is_initial_device
362
363          function omp_get_initial_device() bind(c)
364            use omp_lib_kinds
365            integer (kind=omp_integer_kind) omp_get_initial_device
366          end function omp_get_initial_device
367
368          function omp_get_device_num() bind(c)
369            use omp_lib_kinds
370            integer (kind=omp_integer_kind) omp_get_device_num
371          end function omp_get_device_num
372
373          function omp_pause_resource(kind, device_num) bind(c)
374            use omp_lib_kinds
375            integer (kind=omp_pause_resource_kind), value :: kind
376            integer (kind=omp_integer_kind), value :: device_num
377            integer (kind=omp_integer_kind) omp_pause_resource
378          end function omp_pause_resource
379
380          function omp_pause_resource_all(kind) bind(c)
381            use omp_lib_kinds
382            integer (kind=omp_pause_resource_kind), value :: kind
383            integer (kind=omp_integer_kind) omp_pause_resource_all
384          end function omp_pause_resource_all
385
386          function omp_get_supported_active_levels() bind(c)
387            use omp_lib_kinds
388            integer (kind=omp_integer_kind) omp_get_supported_active_levels
389          end function omp_get_supported_active_levels
390
391          subroutine omp_fulfill_event(event) bind(c)
392            use omp_lib_kinds
393            integer (kind=omp_event_handle_kind), value :: event
394          end subroutine omp_fulfill_event
395
396          subroutine omp_init_lock(svar) bind(c)
397!DIR$ IF(__INTEL_COMPILER.GE.1400)
398!DIR$ attributes known_intrinsic :: omp_init_lock
399!DIR$ ENDIF
400            use omp_lib_kinds
401            integer (kind=omp_lock_kind) svar
402          end subroutine omp_init_lock
403
404          subroutine omp_destroy_lock(svar) bind(c)
405!DIR$ IF(__INTEL_COMPILER.GE.1400)
406!DIR$ attributes known_intrinsic :: omp_destroy_lock
407!DIR$ ENDIF
408            use omp_lib_kinds
409            integer (kind=omp_lock_kind) svar
410          end subroutine omp_destroy_lock
411
412          subroutine omp_set_lock(svar) bind(c)
413!DIR$ IF(__INTEL_COMPILER.GE.1400)
414!DIR$ attributes known_intrinsic :: omp_set_lock
415!DIR$ ENDIF
416            use omp_lib_kinds
417            integer (kind=omp_lock_kind) svar
418          end subroutine omp_set_lock
419
420          subroutine omp_unset_lock(svar) bind(c)
421!DIR$ IF(__INTEL_COMPILER.GE.1400)
422!DIR$ attributes known_intrinsic :: omp_unset_lock
423!DIR$ ENDIF
424            use omp_lib_kinds
425            integer (kind=omp_lock_kind) svar
426          end subroutine omp_unset_lock
427
428          function omp_test_lock(svar) bind(c)
429!DIR$ IF(__INTEL_COMPILER.GE.1400)
430!DIR$ attributes known_intrinsic :: omp_test_lock
431!DIR$ ENDIF
432            use omp_lib_kinds
433            logical (kind=omp_logical_kind) omp_test_lock
434            integer (kind=omp_lock_kind) svar
435          end function omp_test_lock
436
437          subroutine omp_init_nest_lock(nvar) bind(c)
438!DIR$ IF(__INTEL_COMPILER.GE.1400)
439!DIR$ attributes known_intrinsic :: omp_init_nest_lock
440!DIR$ ENDIF
441            use omp_lib_kinds
442            integer (kind=omp_nest_lock_kind) nvar
443          end subroutine omp_init_nest_lock
444
445          subroutine omp_destroy_nest_lock(nvar) bind(c)
446!DIR$ IF(__INTEL_COMPILER.GE.1400)
447!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
448!DIR$ ENDIF
449            use omp_lib_kinds
450            integer (kind=omp_nest_lock_kind) nvar
451          end subroutine omp_destroy_nest_lock
452
453          subroutine omp_set_nest_lock(nvar) bind(c)
454!DIR$ IF(__INTEL_COMPILER.GE.1400)
455!DIR$ attributes known_intrinsic :: omp_set_nest_lock
456!DIR$ ENDIF
457            use omp_lib_kinds
458            integer (kind=omp_nest_lock_kind) nvar
459          end subroutine omp_set_nest_lock
460
461          subroutine omp_unset_nest_lock(nvar) bind(c)
462!DIR$ IF(__INTEL_COMPILER.GE.1400)
463!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
464!DIR$ ENDIF
465            use omp_lib_kinds
466            integer (kind=omp_nest_lock_kind) nvar
467          end subroutine omp_unset_nest_lock
468
469          function omp_test_nest_lock(nvar) bind(c)
470!DIR$ IF(__INTEL_COMPILER.GE.1400)
471!DIR$ attributes known_intrinsic :: omp_test_nest_lock
472!DIR$ ENDIF
473            use omp_lib_kinds
474            integer (kind=omp_integer_kind) omp_test_nest_lock
475            integer (kind=omp_nest_lock_kind) nvar
476          end function omp_test_nest_lock
477
478          function omp_get_max_task_priority() bind(c)
479            use omp_lib_kinds
480            integer (kind=omp_integer_kind) omp_get_max_task_priority
481          end function omp_get_max_task_priority
482
483          subroutine omp_init_lock_with_hint(svar, hint) bind(c)
484            use omp_lib_kinds
485            integer (kind=omp_lock_kind) svar
486            integer (kind=omp_lock_hint_kind), value :: hint
487          end subroutine omp_init_lock_with_hint
488
489          subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
490            use omp_lib_kinds
491            integer (kind=omp_nest_lock_kind) nvar
492            integer (kind=omp_lock_hint_kind), value :: hint
493          end subroutine omp_init_nest_lock_with_hint
494
495          function omp_control_tool(command, modifier, arg) bind(c)
496            use omp_lib_kinds
497            integer (kind=omp_integer_kind) omp_control_tool
498            integer (kind=omp_control_tool_kind), value :: command
499            integer (kind=omp_control_tool_kind), value :: modifier
500            integer (kind=kmp_pointer_kind), optional :: arg
501          end function omp_control_tool
502
503          function omp_init_allocator(memspace, ntraits, traits)
504            use omp_lib_kinds
505            integer (kind=omp_allocator_handle_kind) omp_init_allocator
506            integer (kind=omp_memspace_handle_kind) :: memspace
507            integer (kind=omp_integer_kind) :: ntraits
508            type(omp_alloctrait), intent(in) :: traits(*)
509          end function omp_init_allocator
510
511          subroutine omp_destroy_allocator(allocator) bind(c)
512            use omp_lib_kinds
513            integer (kind=omp_allocator_handle_kind), value :: allocator
514          end subroutine omp_destroy_allocator
515
516          subroutine omp_set_default_allocator(allocator) bind(c)
517            use omp_lib_kinds
518            integer (kind=omp_allocator_handle_kind), value :: allocator
519          end subroutine omp_set_default_allocator
520
521          function omp_get_default_allocator() bind(c)
522            use omp_lib_kinds
523            integer (kind=omp_allocator_handle_kind) omp_get_default_allocator
524          end function omp_get_default_allocator
525
526          subroutine omp_set_affinity_format(format)
527            character (len=*) :: format
528          end subroutine omp_set_affinity_format
529
530          function omp_get_affinity_format(buffer)
531            use omp_lib_kinds
532            character (len=*) :: buffer
533            integer (kind=kmp_size_t_kind) :: omp_get_affinity_format
534          end function omp_get_affinity_format
535
536          subroutine omp_display_affinity(format)
537            character (len=*) :: format
538          end subroutine omp_display_affinity
539
540          function omp_capture_affinity(buffer, format)
541            use omp_lib_kinds
542            character (len=*) :: format
543            character (len=*) :: buffer
544            integer (kind=kmp_size_t_kind) :: omp_capture_affinity
545          end function omp_capture_affinity
546
547          subroutine omp_set_num_teams(num_teams) bind(c)
548            use omp_lib_kinds
549            integer (kind=omp_integer_kind), value :: num_teams
550          end subroutine omp_set_num_teams
551
552          function omp_get_max_teams() bind(c)
553            use omp_lib_kinds
554            integer (kind=omp_integer_kind) omp_get_max_teams
555          end function omp_get_max_teams
556
557          subroutine omp_set_teams_thread_limit(thread_limit) bind(c)
558            use omp_lib_kinds
559            integer (kind=omp_integer_kind), value :: thread_limit
560          end subroutine omp_set_teams_thread_limit
561
562          function omp_get_teams_thread_limit() bind(c)
563            use omp_lib_kinds
564            integer (kind=omp_integer_kind) omp_get_teams_thread_limit
565          end function omp_get_teams_thread_limit
566
567          subroutine omp_display_env(verbose) bind(c)
568            use omp_lib_kinds
569            logical (kind=omp_logical_kind), value :: verbose
570          end subroutine omp_display_env
571
572          function omp_target_alloc(size, device_num) bind(c)
573            use omp_lib_kinds
574            type(c_ptr) omp_target_alloc
575            integer(c_size_t), value :: size
576            integer(c_int), value :: device_num
577          end function omp_target_alloc
578
579          subroutine omp_target_free(device_ptr, device_num) bind(c)
580            use omp_lib_kinds
581            type(c_ptr), value :: device_ptr
582            integer(c_int), value :: device_num
583          end subroutine omp_target_free
584
585          function omp_target_is_present(ptr, device_num) bind(c)
586            use omp_lib_kinds
587            integer(c_int) omp_target_is_present
588            type(c_ptr), value :: ptr
589            integer(c_int), value :: device_num
590          end function omp_target_is_present
591
592          function omp_target_memcpy(dst, src, length, dst_offset, src_offset, &
593              dst_device_num, src_device_num) bind(c)
594            use omp_lib_kinds
595            integer(c_int) omp_target_memcpy
596            type(c_ptr), value :: dst, src
597            integer(c_size_t), value :: length, dst_offset, src_offset
598            integer(c_int), value :: dst_device_num, src_device_num
599          end function omp_target_memcpy
600
601          function omp_target_memcpy_rect(dst, src, element_size, num_dims,    &
602              volume, dst_offsets, src_offsets, dst_dimensions,                &
603              src_dimensions, dst_device_num, src_device_num) bind(c)
604            use omp_lib_kinds
605            integer(c_int) omp_target_memcpy_rect
606            type(c_ptr), value :: dst, src
607            integer(c_size_t), value :: element_size
608            integer(c_int), value :: num_dims, dst_device_num, src_device_num
609            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
610                src_offsets(*), dst_dimensions(*), src_dimensions(*)
611          end function omp_target_memcpy_rect
612
613          function omp_target_memcpy_async(dst, src, length, dst_offset,       &
614              src_offset, dst_device_num, src_device_num, depobj_count,        &
615              depobj_list) bind(c)
616            use omp_lib_kinds
617            integer(c_int) omp_target_memcpy_async
618            type(c_ptr), value :: dst, src
619            integer(c_size_t), value :: length, dst_offset, src_offset
620            integer(c_int), value :: dst_device_num, src_device_num,           &
621                depobj_count
622            integer(omp_depend_kind), optional :: depobj_list(*)
623          end function omp_target_memcpy_async
624
625          function omp_target_memcpy_rect_async(dst, src, element_size,        &
626              num_dims, volume, dst_offsets, src_offsets, dst_dimensions,      &
627              src_dimensions, dst_device_num, src_device_num, depobj_count,    &
628              depobj_list) bind(c)
629            use omp_lib_kinds
630            integer(c_int) omp_target_memcpy_rect_async
631            type(c_ptr), value :: dst, src
632            integer(c_size_t), value :: element_size
633            integer(c_int), value :: num_dims, dst_device_num, src_device_num, &
634                depobj_count
635            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),        &
636                src_offsets(*), dst_dimensions(*), src_dimensions(*)
637            integer (omp_depend_kind), optional :: depobj_list(*)
638          end function omp_target_memcpy_rect_async
639
640          function omp_target_associate_ptr(host_ptr, device_ptr, size,        &
641              device_offset, device_num) bind(c)
642            use omp_lib_kinds
643            integer(c_int) omp_target_associate_ptr
644            type(c_ptr), value :: host_ptr, device_ptr
645            integer(c_size_t), value :: size, device_offset
646            integer(c_int), value :: device_num
647          end function omp_target_associate_ptr
648
649          function omp_get_mapped_ptr(ptr, device_num) bind(c)
650            use omp_lib_kinds
651            type(c_ptr) omp_get_mapped_ptr
652            type(c_ptr), value :: ptr
653            integer(c_int), value :: device_num
654          end function omp_get_mapped_ptr
655
656          function omp_target_disassociate_ptr(ptr, device_num) bind(c)
657            use omp_lib_kinds
658            integer(c_int) omp_target_disassociate_ptr
659            type(c_ptr), value :: ptr
660            integer(c_int), value :: device_num
661          end function omp_target_disassociate_ptr
662
663          function omp_target_is_accessible(ptr, size, device_num) bind(c)
664            use omp_lib_kinds
665            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
666            integer(c_int) omp_target_is_accessible
667            type(c_ptr), value :: ptr
668            integer(c_size_t), value :: size
669            integer(c_int), value :: device_num
670          end function omp_target_is_accessible
671
672          function omp_alloc(size, allocator) bind(c)
673            use omp_lib_kinds
674            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
675            type(c_ptr) omp_alloc
676            integer(c_size_t), value :: size
677            integer(omp_allocator_handle_kind), value :: allocator
678          end function omp_alloc
679
680          function omp_aligned_alloc(alignment, size, allocator) bind(c)
681            use omp_lib_kinds
682            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
683            type(c_ptr) omp_aligned_alloc
684            integer(c_size_t), value :: alignment, size
685            integer(omp_allocator_handle_kind), value :: allocator
686          end function omp_aligned_alloc
687
688          function omp_calloc(nmemb, size, allocator) bind(c)
689            use omp_lib_kinds
690            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
691            type(c_ptr) omp_calloc
692            integer(c_size_t), value :: nmemb, size
693            integer(omp_allocator_handle_kind), value :: allocator
694          end function omp_calloc
695
696          function omp_aligned_calloc(alignment, nmemb, size, allocator) bind(c)
697            use omp_lib_kinds
698            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
699            type(c_ptr) omp_aligned_calloc
700            integer(c_size_t), value :: alignment, nmemb, size
701            integer(omp_allocator_handle_kind), value :: allocator
702          end function omp_aligned_calloc
703
704          function omp_realloc(ptr, size, allocator, free_allocator) bind(c)
705            use omp_lib_kinds
706            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
707            type(c_ptr) omp_realloc
708            type(c_ptr), value :: ptr
709            integer(c_size_t), value :: size
710            integer(omp_allocator_handle_kind), value :: allocator
711            integer(omp_allocator_handle_kind), value :: free_allocator
712          end function omp_realloc
713
714          subroutine omp_free(ptr, allocator) bind(c)
715            use omp_lib_kinds
716            use, intrinsic :: iso_c_binding, only : c_ptr
717            type(c_ptr), value :: ptr
718            integer(omp_allocator_handle_kind), value :: allocator
719          end subroutine omp_free
720
721          function omp_in_explicit_task() bind(c)
722            use omp_lib_kinds
723            logical (kind=omp_logical_kind) omp_in_explicit_task
724          end function omp_in_explicit_task
725
726!         ***
727!         *** kmp_* entry points
728!         ***
729
730          subroutine kmp_set_stacksize(size) bind(c)
731            use omp_lib_kinds
732            integer (kind=omp_integer_kind), value :: size
733          end subroutine kmp_set_stacksize
734
735          subroutine kmp_set_stacksize_s(size) bind(c)
736            use omp_lib_kinds
737            integer (kind=kmp_size_t_kind), value :: size
738          end subroutine kmp_set_stacksize_s
739
740          subroutine kmp_set_blocktime(msec) bind(c)
741            use omp_lib_kinds
742            integer (kind=omp_integer_kind), value :: msec
743          end subroutine kmp_set_blocktime
744
745          subroutine kmp_set_library_serial() bind(c)
746          end subroutine kmp_set_library_serial
747
748          subroutine kmp_set_library_turnaround() bind(c)
749          end subroutine kmp_set_library_turnaround
750
751          subroutine kmp_set_library_throughput() bind(c)
752          end subroutine kmp_set_library_throughput
753
754          subroutine kmp_set_library(libnum) bind(c)
755            use omp_lib_kinds
756            integer (kind=omp_integer_kind), value :: libnum
757          end subroutine kmp_set_library
758
759          subroutine kmp_set_defaults(string) bind(c)
760            use, intrinsic :: iso_c_binding
761            character (kind=c_char) :: string(*)
762          end subroutine kmp_set_defaults
763
764          function kmp_get_stacksize() bind(c)
765            use omp_lib_kinds
766            integer (kind=omp_integer_kind) kmp_get_stacksize
767          end function kmp_get_stacksize
768
769          function kmp_get_stacksize_s() bind(c)
770            use omp_lib_kinds
771            integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
772          end function kmp_get_stacksize_s
773
774          function kmp_get_blocktime() bind(c)
775            use omp_lib_kinds
776            integer (kind=omp_integer_kind) kmp_get_blocktime
777          end function kmp_get_blocktime
778
779          function kmp_get_library() bind(c)
780            use omp_lib_kinds
781            integer (kind=omp_integer_kind) kmp_get_library
782          end function kmp_get_library
783
784          subroutine kmp_set_disp_num_buffers(num) bind(c)
785            use omp_lib_kinds
786            integer (kind=omp_integer_kind), value :: num
787          end subroutine kmp_set_disp_num_buffers
788
789          function kmp_set_affinity(mask) bind(c)
790            use omp_lib_kinds
791            integer (kind=omp_integer_kind) kmp_set_affinity
792            integer (kind=kmp_affinity_mask_kind) mask
793          end function kmp_set_affinity
794
795          function kmp_get_affinity(mask) bind(c)
796            use omp_lib_kinds
797            integer (kind=omp_integer_kind) kmp_get_affinity
798            integer (kind=kmp_affinity_mask_kind) mask
799          end function kmp_get_affinity
800
801          function kmp_get_affinity_max_proc() bind(c)
802            use omp_lib_kinds
803            integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
804          end function kmp_get_affinity_max_proc
805
806          subroutine kmp_create_affinity_mask(mask) bind(c)
807            use omp_lib_kinds
808            integer (kind=kmp_affinity_mask_kind) mask
809          end subroutine kmp_create_affinity_mask
810
811          subroutine kmp_destroy_affinity_mask(mask) bind(c)
812            use omp_lib_kinds
813            integer (kind=kmp_affinity_mask_kind) mask
814          end subroutine kmp_destroy_affinity_mask
815
816          function kmp_set_affinity_mask_proc(proc, mask) bind(c)
817            use omp_lib_kinds
818            integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
819            integer (kind=omp_integer_kind), value :: proc
820            integer (kind=kmp_affinity_mask_kind) mask
821          end function kmp_set_affinity_mask_proc
822
823          function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
824            use omp_lib_kinds
825            integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
826            integer (kind=omp_integer_kind), value :: proc
827            integer (kind=kmp_affinity_mask_kind) mask
828          end function kmp_unset_affinity_mask_proc
829
830          function kmp_get_affinity_mask_proc(proc, mask) bind(c)
831            use omp_lib_kinds
832            integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
833            integer (kind=omp_integer_kind), value :: proc
834            integer (kind=kmp_affinity_mask_kind) mask
835          end function kmp_get_affinity_mask_proc
836
837          function kmp_malloc(size) bind(c)
838            use omp_lib_kinds
839            integer (kind=kmp_pointer_kind) kmp_malloc
840            integer (kind=kmp_size_t_kind), value :: size
841          end function kmp_malloc
842
843          function kmp_aligned_malloc(size, alignment) bind(c)
844            use omp_lib_kinds
845            integer (kind=kmp_pointer_kind) kmp_aligned_malloc
846            integer (kind=kmp_size_t_kind), value :: size
847            integer (kind=kmp_size_t_kind), value :: alignment
848          end function kmp_aligned_malloc
849
850          function kmp_calloc(nelem, elsize) bind(c)
851            use omp_lib_kinds
852            integer (kind=kmp_pointer_kind) kmp_calloc
853            integer (kind=kmp_size_t_kind), value :: nelem
854            integer (kind=kmp_size_t_kind), value :: elsize
855          end function kmp_calloc
856
857          function kmp_realloc(ptr, size) bind(c)
858            use omp_lib_kinds
859            integer (kind=kmp_pointer_kind) kmp_realloc
860            integer (kind=kmp_pointer_kind), value :: ptr
861            integer (kind=kmp_size_t_kind), value :: size
862          end function kmp_realloc
863
864          subroutine kmp_free(ptr) bind(c)
865            use omp_lib_kinds
866            integer (kind=kmp_pointer_kind), value :: ptr
867          end subroutine kmp_free
868
869          subroutine kmp_set_warnings_on() bind(c)
870          end subroutine kmp_set_warnings_on
871
872          subroutine kmp_set_warnings_off() bind(c)
873          end subroutine kmp_set_warnings_off
874
875          function kmp_get_cancellation_status(cancelkind) bind(c)
876            use omp_lib_kinds
877            integer (kind=kmp_cancel_kind), value :: cancelkind
878            logical (kind=omp_logical_kind) kmp_get_cancellation_status
879          end function kmp_get_cancellation_status
880
881        end interface
882
883      end module omp_lib
884