xref: /netbsd-src/external/gpl3/gcc/dist/libgomp/omp_lib.f90.in (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1!  Copyright (C) 2005-2022 Free Software Foundation, Inc.
2!  Contributed by Jakub Jelinek <jakub@redhat.com>.
3
4!  This file is part of the GNU Offloading and Multi Processing Library
5!  (libgomp).
6
7!  Libgomp is free software; you can redistribute it and/or modify it
8!  under the terms of the GNU General Public License as published by
9!  the Free Software Foundation; either version 3, or (at your option)
10!  any later version.
11
12!  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
13!  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14!  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15!  more details.
16
17!  Under Section 7 of GPL version 3, you are granted additional
18!  permissions described in the GCC Runtime Library Exception, version
19!  3.1, as published by the Free Software Foundation.
20
21!  You should have received a copy of the GNU General Public License and
22!  a copy of the GCC Runtime Library Exception along with this program;
23!  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
24!  <http://www.gnu.org/licenses/>.
25
26      module omp_lib_kinds
27        use iso_c_binding, only: c_int, c_intptr_t
28        implicit none
29        private :: c_int, c_intptr_t
30        integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
31        integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
32        integer, parameter :: omp_sched_kind = 4
33        integer, parameter :: omp_proc_bind_kind = 4
34        integer, parameter :: omp_sync_hint_kind = 4
35        integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind
36        integer, parameter :: omp_pause_resource_kind = 4
37        integer, parameter :: omp_allocator_handle_kind = c_intptr_t
38        integer, parameter :: omp_alloctrait_key_kind = c_int
39        integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
40        integer, parameter :: omp_memspace_handle_kind = c_intptr_t
41        integer, parameter :: omp_depend_kind = @OMP_DEPEND_KIND@
42        integer, parameter :: omp_event_handle_kind = c_intptr_t
43        integer (omp_sched_kind), parameter :: omp_sched_static = 1
44        integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2
45        integer (omp_sched_kind), parameter :: omp_sched_guided = 3
46        integer (omp_sched_kind), parameter :: omp_sched_auto = 4
47        integer (omp_proc_bind_kind), &
48                 parameter :: omp_proc_bind_false = 0
49        integer (omp_proc_bind_kind), &
50                 parameter :: omp_proc_bind_true = 1
51        integer (omp_proc_bind_kind), &
52                 parameter :: omp_proc_bind_primary = 2
53        integer (omp_proc_bind_kind), &
54                 parameter :: omp_proc_bind_master = 2
55        integer (omp_proc_bind_kind), &
56                 parameter :: omp_proc_bind_close = 3
57        integer (omp_proc_bind_kind), &
58                 parameter :: omp_proc_bind_spread = 4
59        integer (omp_lock_hint_kind), &
60                 parameter :: omp_sync_hint_none = 0
61        integer (omp_lock_hint_kind), &
62                 parameter :: omp_lock_hint_none = omp_sync_hint_none
63        integer (omp_lock_hint_kind), &
64                 parameter :: omp_sync_hint_uncontended = 1
65        integer (omp_lock_hint_kind), &
66                 parameter :: omp_lock_hint_uncontended &
67                 = omp_sync_hint_uncontended
68        integer (omp_lock_hint_kind), &
69                 parameter :: omp_sync_hint_contended = 2
70        integer (omp_lock_hint_kind), &
71                 parameter :: omp_lock_hint_contended &
72                 = omp_sync_hint_contended
73        integer (omp_lock_hint_kind), &
74                 parameter :: omp_sync_hint_nonspeculative = 4
75        integer (omp_lock_hint_kind), &
76                 parameter :: omp_lock_hint_nonspeculative &
77                 = omp_sync_hint_nonspeculative
78        integer (omp_lock_hint_kind), &
79                 parameter :: omp_sync_hint_speculative = 8
80        integer (omp_lock_hint_kind), &
81                 parameter :: omp_lock_hint_speculative &
82                 = omp_sync_hint_speculative
83        integer (kind=omp_pause_resource_kind), &
84                 parameter :: omp_pause_soft = 1
85        integer (kind=omp_pause_resource_kind), &
86                 parameter :: omp_pause_hard = 2
87        integer (kind=omp_alloctrait_key_kind), &
88                 parameter :: omp_atk_sync_hint = 1
89        integer (kind=omp_alloctrait_key_kind), &
90                 parameter :: omp_atk_alignment = 2
91        integer (kind=omp_alloctrait_key_kind), &
92                 parameter :: omp_atk_access = 3
93        integer (kind=omp_alloctrait_key_kind), &
94                 parameter :: omp_atk_pool_size = 4
95        integer (kind=omp_alloctrait_key_kind), &
96                 parameter :: omp_atk_fallback = 5
97        integer (kind=omp_alloctrait_key_kind), &
98                 parameter :: omp_atk_fb_data = 6
99        integer (kind=omp_alloctrait_key_kind), &
100                 parameter :: omp_atk_pinned = 7
101        integer (kind=omp_alloctrait_key_kind), &
102                 parameter :: omp_atk_partition = 8
103        integer (kind=omp_alloctrait_val_kind), &
104                 parameter :: omp_atv_default = -1
105        integer (kind=omp_alloctrait_val_kind), &
106                 parameter :: omp_atv_false = 0
107        integer (kind=omp_alloctrait_val_kind), &
108                 parameter :: omp_atv_true = 1
109        integer (kind=omp_alloctrait_val_kind), &
110                 parameter :: omp_atv_contended = 3
111        integer (kind=omp_alloctrait_val_kind), &
112                 parameter :: omp_atv_uncontended = 4
113        integer (kind=omp_alloctrait_val_kind), &
114                 parameter :: omp_atv_serialized = 5
115        integer (kind=omp_alloctrait_val_kind), &
116                 parameter :: omp_atv_sequential = omp_atv_serialized
117        integer (kind=omp_alloctrait_val_kind), &
118                 parameter :: omp_atv_private = 6
119        integer (kind=omp_alloctrait_val_kind), &
120                 parameter :: omp_atv_all = 7
121        integer (kind=omp_alloctrait_val_kind), &
122                 parameter :: omp_atv_thread = 8
123        integer (kind=omp_alloctrait_val_kind), &
124                 parameter :: omp_atv_pteam = 9
125        integer (kind=omp_alloctrait_val_kind), &
126                 parameter :: omp_atv_cgroup = 10
127        integer (kind=omp_alloctrait_val_kind), &
128                 parameter :: omp_atv_default_mem_fb = 11
129        integer (kind=omp_alloctrait_val_kind), &
130                 parameter :: omp_atv_null_fb = 12
131        integer (kind=omp_alloctrait_val_kind), &
132                 parameter :: omp_atv_abort_fb = 13
133        integer (kind=omp_alloctrait_val_kind), &
134                 parameter :: omp_atv_allocator_fb = 14
135        integer (kind=omp_alloctrait_val_kind), &
136                 parameter :: omp_atv_environment = 15
137        integer (kind=omp_alloctrait_val_kind), &
138                 parameter :: omp_atv_nearest = 16
139        integer (kind=omp_alloctrait_val_kind), &
140                 parameter :: omp_atv_blocked = 17
141        integer (kind=omp_alloctrait_val_kind), &
142                 parameter :: omp_atv_interleaved = 18
143        integer (kind=omp_allocator_handle_kind), &
144                 parameter :: omp_null_allocator = 0
145        integer (kind=omp_allocator_handle_kind), &
146                 parameter :: omp_default_mem_alloc = 1
147        integer (kind=omp_allocator_handle_kind), &
148                 parameter :: omp_large_cap_mem_alloc = 2
149        integer (kind=omp_allocator_handle_kind), &
150                 parameter :: omp_const_mem_alloc = 3
151        integer (kind=omp_allocator_handle_kind), &
152                 parameter :: omp_high_bw_mem_alloc = 4
153        integer (kind=omp_allocator_handle_kind), &
154                 parameter :: omp_low_lat_mem_alloc = 5
155        integer (kind=omp_allocator_handle_kind), &
156                 parameter :: omp_cgroup_mem_alloc = 6
157        integer (kind=omp_allocator_handle_kind), &
158                 parameter :: omp_pteam_mem_alloc = 7
159        integer (kind=omp_allocator_handle_kind), &
160                 parameter :: omp_thread_mem_alloc = 8
161        integer (omp_memspace_handle_kind), &
162                 parameter :: omp_default_mem_space = 0
163        integer (omp_memspace_handle_kind), &
164                 parameter :: omp_large_cap_mem_space = 1
165        integer (omp_memspace_handle_kind), &
166                 parameter :: omp_const_mem_space = 2
167        integer (omp_memspace_handle_kind), &
168                 parameter :: omp_high_bw_mem_space = 3
169        integer (omp_memspace_handle_kind), &
170                 parameter :: omp_low_lat_mem_space = 4
171
172        type omp_alloctrait
173          integer (kind=omp_alloctrait_key_kind) key
174          integer (kind=omp_alloctrait_val_kind) value
175        end type omp_alloctrait
176      end module
177
178      module omp_lib
179        use omp_lib_kinds
180        implicit none
181        integer, parameter :: openmp_version = 201511
182
183        interface
184          subroutine omp_init_lock (svar)
185            use omp_lib_kinds
186            integer (omp_lock_kind), intent (out) :: svar
187          end subroutine omp_init_lock
188        end interface
189
190        interface
191          subroutine omp_init_lock_with_hint (svar, hint)
192            use omp_lib_kinds
193            integer (omp_lock_kind), intent (out) :: svar
194            integer (omp_lock_hint_kind), intent (in) :: hint
195          end subroutine omp_init_lock_with_hint
196        end interface
197
198        interface
199          subroutine omp_init_nest_lock (nvar)
200            use omp_lib_kinds
201            integer (omp_nest_lock_kind), intent (out) :: nvar
202          end subroutine omp_init_nest_lock
203        end interface
204
205        interface
206          subroutine omp_init_nest_lock_with_hint (nvar, hint)
207            use omp_lib_kinds
208            integer (omp_nest_lock_kind), intent (out) :: nvar
209            integer (omp_lock_hint_kind), intent (in) :: hint
210          end subroutine omp_init_nest_lock_with_hint
211        end interface
212
213        interface
214          subroutine omp_destroy_lock (svar)
215            use omp_lib_kinds
216            integer (omp_lock_kind), intent (inout) :: svar
217          end subroutine omp_destroy_lock
218        end interface
219
220        interface
221          subroutine omp_destroy_nest_lock (nvar)
222            use omp_lib_kinds
223            integer (omp_nest_lock_kind), intent (inout) :: nvar
224          end subroutine omp_destroy_nest_lock
225        end interface
226
227        interface
228          subroutine omp_set_lock (svar)
229            use omp_lib_kinds
230            integer (omp_lock_kind), intent (inout) :: svar
231          end subroutine omp_set_lock
232        end interface
233
234        interface
235          subroutine omp_set_nest_lock (nvar)
236            use omp_lib_kinds
237            integer (omp_nest_lock_kind), intent (inout) :: nvar
238          end subroutine omp_set_nest_lock
239        end interface
240
241        interface
242          subroutine omp_unset_lock (svar)
243            use omp_lib_kinds
244            integer (omp_lock_kind), intent (inout) :: svar
245          end subroutine omp_unset_lock
246        end interface
247
248        interface
249          subroutine omp_unset_nest_lock (nvar)
250            use omp_lib_kinds
251            integer (omp_nest_lock_kind), intent (inout) :: nvar
252          end subroutine omp_unset_nest_lock
253        end interface
254
255        interface omp_set_dynamic
256          subroutine omp_set_dynamic (dynamic_threads)
257            logical (4), intent (in) :: dynamic_threads
258          end subroutine omp_set_dynamic
259          subroutine omp_set_dynamic_8 (dynamic_threads)
260            logical (8), intent (in) :: dynamic_threads
261          end subroutine omp_set_dynamic_8
262        end interface
263
264        interface omp_set_nested
265          subroutine omp_set_nested (nested)
266            logical (4), intent (in) :: nested
267          end subroutine omp_set_nested
268          subroutine omp_set_nested_8 (nested)
269            logical (8), intent (in) :: nested
270          end subroutine omp_set_nested_8
271        end interface
272
273        interface omp_set_num_threads
274          subroutine omp_set_num_threads (num_threads)
275            integer (4), intent (in) :: num_threads
276          end subroutine omp_set_num_threads
277          subroutine omp_set_num_threads_8 (num_threads)
278            integer (8), intent (in) :: num_threads
279          end subroutine omp_set_num_threads_8
280        end interface
281
282        interface
283          function omp_get_dynamic ()
284            logical (4) :: omp_get_dynamic
285          end function omp_get_dynamic
286        end interface
287
288        interface
289          function omp_get_nested ()
290            logical (4) :: omp_get_nested
291          end function omp_get_nested
292        end interface
293
294        interface
295          function omp_in_parallel ()
296            logical (4) :: omp_in_parallel
297          end function omp_in_parallel
298        end interface
299
300        interface
301          function omp_test_lock (svar)
302            use omp_lib_kinds
303            logical (4) :: omp_test_lock
304            integer (omp_lock_kind), intent (inout) :: svar
305          end function omp_test_lock
306        end interface
307
308        interface
309          function omp_get_max_threads ()
310            integer (4) :: omp_get_max_threads
311          end function omp_get_max_threads
312        end interface
313
314        interface
315          function omp_get_num_procs ()
316            integer (4) :: omp_get_num_procs
317          end function omp_get_num_procs
318        end interface
319
320        interface
321          function omp_get_num_threads ()
322            integer (4) :: omp_get_num_threads
323          end function omp_get_num_threads
324        end interface
325
326        interface
327          function omp_get_thread_num ()
328            integer (4) :: omp_get_thread_num
329          end function omp_get_thread_num
330        end interface
331
332        interface
333          function omp_test_nest_lock (nvar)
334            use omp_lib_kinds
335            integer (4) :: omp_test_nest_lock
336            integer (omp_nest_lock_kind), intent (inout) :: nvar
337          end function omp_test_nest_lock
338        end interface
339
340        interface
341          function omp_get_wtick ()
342            double precision :: omp_get_wtick
343          end function omp_get_wtick
344        end interface
345
346        interface
347          function omp_get_wtime ()
348            double precision :: omp_get_wtime
349          end function omp_get_wtime
350        end interface
351
352        interface omp_set_schedule
353          subroutine omp_set_schedule (kind, chunk_size)
354            use omp_lib_kinds
355            integer (omp_sched_kind), intent (in) :: kind
356            integer (4), intent (in) :: chunk_size
357          end subroutine omp_set_schedule
358          subroutine omp_set_schedule_8 (kind, chunk_size)
359            use omp_lib_kinds
360            integer (omp_sched_kind), intent (in) :: kind
361            integer (8), intent (in) :: chunk_size
362          end subroutine omp_set_schedule_8
363         end interface
364
365        interface omp_get_schedule
366          subroutine omp_get_schedule (kind, chunk_size)
367            use omp_lib_kinds
368            integer (omp_sched_kind), intent (out) :: kind
369            integer (4), intent (out) :: chunk_size
370          end subroutine omp_get_schedule
371          subroutine omp_get_schedule_8 (kind, chunk_size)
372            use omp_lib_kinds
373            integer (omp_sched_kind), intent (out) :: kind
374            integer (8), intent (out) :: chunk_size
375          end subroutine omp_get_schedule_8
376         end interface
377
378        interface
379          function omp_get_thread_limit ()
380            integer (4) :: omp_get_thread_limit
381          end function omp_get_thread_limit
382        end interface
383
384        interface omp_set_max_active_levels
385          subroutine omp_set_max_active_levels (max_levels)
386            integer (4), intent (in) :: max_levels
387          end subroutine omp_set_max_active_levels
388          subroutine omp_set_max_active_levels_8 (max_levels)
389            integer (8), intent (in) :: max_levels
390          end subroutine omp_set_max_active_levels_8
391        end interface
392
393        interface
394          function omp_get_max_active_levels ()
395            integer (4) :: omp_get_max_active_levels
396          end function omp_get_max_active_levels
397        end interface
398
399        interface
400          function omp_get_supported_active_levels ()
401            integer (4) :: omp_get_supported_active_levels
402          end function omp_get_supported_active_levels
403        end interface
404
405        interface
406          function omp_get_level ()
407            integer (4) :: omp_get_level
408          end function omp_get_level
409        end interface
410
411        interface omp_get_ancestor_thread_num
412          function omp_get_ancestor_thread_num (level)
413            integer (4), intent (in) :: level
414            integer (4) :: omp_get_ancestor_thread_num
415          end function omp_get_ancestor_thread_num
416          function omp_get_ancestor_thread_num_8 (level)
417            integer (8), intent (in) :: level
418            integer (4) :: omp_get_ancestor_thread_num_8
419          end function omp_get_ancestor_thread_num_8
420        end interface
421
422        interface omp_get_team_size
423          function omp_get_team_size (level)
424            integer (4), intent (in) :: level
425            integer (4) :: omp_get_team_size
426          end function omp_get_team_size
427          function omp_get_team_size_8 (level)
428            integer (8), intent (in) :: level
429            integer (4) :: omp_get_team_size_8
430          end function omp_get_team_size_8
431        end interface
432
433        interface
434          function omp_get_active_level ()
435            integer (4) :: omp_get_active_level
436          end function omp_get_active_level
437        end interface
438
439        interface
440          function omp_in_final ()
441            logical (4) :: omp_in_final
442          end function omp_in_final
443        end interface
444
445        interface
446          function omp_get_cancellation ()
447            logical (4) :: omp_get_cancellation
448          end function omp_get_cancellation
449        end interface
450
451        interface
452          function omp_get_proc_bind ()
453            use omp_lib_kinds
454            integer (omp_proc_bind_kind) :: omp_get_proc_bind
455          end function omp_get_proc_bind
456        end interface
457
458        interface
459          function omp_get_num_places ()
460            integer (4) :: omp_get_num_places
461          end function omp_get_num_places
462        end interface
463
464        interface omp_get_place_num_procs
465          function omp_get_place_num_procs (place_num)
466            integer (4), intent(in) :: place_num
467            integer (4) :: omp_get_place_num_procs
468          end function omp_get_place_num_procs
469
470          function omp_get_place_num_procs_8 (place_num)
471            integer (8), intent(in) :: place_num
472            integer (4) :: omp_get_place_num_procs_8
473          end function omp_get_place_num_procs_8
474        end interface
475
476        interface omp_get_place_proc_ids
477          subroutine omp_get_place_proc_ids (place_num, ids)
478            integer (4), intent(in) :: place_num
479            integer (4), intent(out) :: ids(*)
480          end subroutine omp_get_place_proc_ids
481
482          subroutine omp_get_place_proc_ids_8 (place_num, ids)
483            integer (8), intent(in) :: place_num
484            integer (8), intent(out) :: ids(*)
485          end subroutine omp_get_place_proc_ids_8
486        end interface
487
488        interface
489          function omp_get_place_num ()
490            integer (4) :: omp_get_place_num
491          end function omp_get_place_num
492        end interface
493
494        interface
495          function omp_get_partition_num_places ()
496            integer (4) :: omp_get_partition_num_places
497          end function omp_get_partition_num_places
498        end interface
499
500        interface omp_get_partition_place_nums
501          subroutine omp_get_partition_place_nums (place_nums)
502            integer (4), intent(out) :: place_nums(*)
503          end subroutine omp_get_partition_place_nums
504
505          subroutine omp_get_partition_place_nums_8 (place_nums)
506            integer (8), intent(out) :: place_nums(*)
507          end subroutine omp_get_partition_place_nums_8
508        end interface
509
510        interface omp_set_default_device
511          subroutine omp_set_default_device (device_num)
512            integer (4), intent (in) :: device_num
513          end subroutine omp_set_default_device
514          subroutine omp_set_default_device_8 (device_num)
515            integer (8), intent (in) :: device_num
516          end subroutine omp_set_default_device_8
517        end interface
518
519        interface
520          function omp_get_default_device ()
521            integer (4) :: omp_get_default_device
522          end function omp_get_default_device
523        end interface
524
525        interface
526          function omp_get_num_devices ()
527            integer (4) :: omp_get_num_devices
528          end function omp_get_num_devices
529        end interface
530
531        interface
532          function omp_get_num_teams ()
533            integer (4) :: omp_get_num_teams
534          end function omp_get_num_teams
535        end interface
536
537        interface
538          function omp_get_team_num ()
539            integer (4) :: omp_get_team_num
540          end function omp_get_team_num
541        end interface
542
543        interface
544          function omp_is_initial_device ()
545            logical (4) :: omp_is_initial_device
546          end function omp_is_initial_device
547        end interface
548
549        interface
550          function omp_get_initial_device ()
551            integer (4) :: omp_get_initial_device
552          end function omp_get_initial_device
553        end interface
554
555        interface
556          function omp_get_device_num ()
557            integer (4) :: omp_get_device_num
558          end function omp_get_device_num
559        end interface
560
561        interface
562          function omp_get_max_task_priority ()
563            integer (4) :: omp_get_max_task_priority
564          end function omp_get_max_task_priority
565        end interface
566
567        interface omp_set_num_teams
568          subroutine omp_set_num_teams (num_teams)
569            integer (4), intent (in) :: num_teams
570          end subroutine omp_set_num_teams
571          subroutine omp_set_num_teams_8 (num_teams)
572            integer (8), intent (in) :: num_teams
573          end subroutine omp_set_num_teams_8
574        end interface
575
576        interface
577          function omp_get_max_teams ()
578            integer (4) :: omp_get_max_teams
579          end function omp_get_max_teams
580        end interface
581
582        interface omp_set_teams_thread_limit
583          subroutine omp_set_teams_thread_limit (thread_limit)
584            integer (4), intent (in) :: thread_limit
585          end subroutine omp_set_teams_thread_limit
586          subroutine omp_set_teams_thread_limit_8 (thread_limit)
587            integer (8), intent (in) :: thread_limit
588          end subroutine omp_set_teams_thread_limit_8
589        end interface
590
591        interface
592          function omp_get_teams_thread_limit ()
593            integer (4) :: omp_get_teams_thread_limit
594          end function omp_get_teams_thread_limit
595        end interface
596
597        interface
598          subroutine omp_fulfill_event (event)
599            use omp_lib_kinds
600            integer (kind=omp_event_handle_kind), &
601              value, intent(in) :: event
602          end subroutine omp_fulfill_event
603        end interface
604
605        interface
606          subroutine omp_set_affinity_format (format)
607            character(len=*), intent(in) :: format
608          end subroutine omp_set_affinity_format
609        end interface
610
611        interface
612          function omp_get_affinity_format (buffer)
613            integer (4) :: omp_get_affinity_format
614            character(len=*), intent(out) :: buffer
615          end function omp_get_affinity_format
616        end interface
617
618        interface
619          subroutine omp_display_affinity (format)
620            character(len=*), intent(in) :: format
621          end subroutine omp_display_affinity
622        end interface
623
624        interface
625          function omp_capture_affinity (buffer, format)
626            integer (4) :: omp_capture_affinity
627            character(len=*), intent(out) :: buffer
628            character(len=*), intent(in) :: format
629          end function omp_capture_affinity
630        end interface
631
632        interface
633          function omp_pause_resource (kind, device_num)
634            use omp_lib_kinds
635            integer (4) :: omp_pause_resource
636            integer (kind=omp_pause_resource_kind), &
637              intent(in) :: kind
638            integer (4) :: device_num
639          end function
640        end interface
641
642        interface
643          function omp_pause_resource_all (kind)
644            use omp_lib_kinds
645            integer (4) :: omp_pause_resource_all
646            integer (kind=omp_pause_resource_kind), &
647              intent(in) :: kind
648          end function
649        end interface
650
651        interface omp_init_allocator
652          function omp_init_allocator (memspace, ntraits, traits)
653            use omp_lib_kinds
654            integer (kind=omp_allocator_handle_kind) omp_init_allocator
655            integer (kind=omp_memspace_handle_kind), &
656              intent(in) :: memspace
657            integer (4), intent(in) :: ntraits
658            type (omp_alloctrait), intent(in) :: traits(*)
659          end function
660          function omp_init_allocator_8 (memspace, ntraits, traits)
661            use omp_lib_kinds
662            integer (kind=omp_allocator_handle_kind) omp_init_allocator_8
663            integer (kind=omp_memspace_handle_kind), &
664              intent(in) :: memspace
665            integer (8), intent(in) :: ntraits
666            type (omp_alloctrait), intent(in) :: traits(*)
667          end function
668        end interface
669
670        interface
671          subroutine omp_destroy_allocator (allocator)
672            use omp_lib_kinds
673            integer (kind=omp_allocator_handle_kind), &
674              intent(in) :: allocator
675          end subroutine
676        end interface
677
678        interface
679          subroutine omp_set_default_allocator (allocator)
680            use omp_lib_kinds
681            integer (kind=omp_allocator_handle_kind), &
682              intent(in) :: allocator
683          end subroutine
684        end interface
685
686        interface
687          function omp_get_default_allocator ()
688            use omp_lib_kinds
689            integer (kind=omp_allocator_handle_kind) &
690               omp_get_default_allocator
691          end function
692        end interface
693
694        interface omp_display_env
695          subroutine omp_display_env (verbose)
696            logical (4),intent (in) :: verbose
697          end subroutine omp_display_env
698          subroutine omp_display_env_8 (verbose)
699            logical (8),intent (in) :: verbose
700          end subroutine omp_display_env_8
701        end interface
702
703        interface
704          function omp_alloc (size, allocator) bind(c)
705            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
706            import :: omp_allocator_handle_kind
707            type(c_ptr) :: omp_alloc
708            integer(c_size_t), value :: size
709            integer(omp_allocator_handle_kind), value :: allocator
710          end function omp_alloc
711        end interface
712
713        interface
714          function omp_aligned_alloc (alignment, size, allocator) bind(c)
715            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
716            import :: omp_allocator_handle_kind
717            type(c_ptr) :: omp_aligned_alloc
718            integer(c_size_t), value :: alignment, size
719            integer(omp_allocator_handle_kind), value :: allocator
720          end function omp_aligned_alloc
721        end interface
722
723        interface
724          subroutine omp_free(ptr, allocator) bind(c)
725            use, intrinsic :: iso_c_binding, only : c_ptr
726            import :: omp_allocator_handle_kind
727            type(c_ptr), value :: ptr
728            integer(omp_allocator_handle_kind), value :: allocator
729          end subroutine omp_free
730        end interface
731
732        interface
733          function omp_calloc (nmemb, size, allocator) bind(c)
734            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
735            import :: omp_allocator_handle_kind
736            type(c_ptr) :: omp_calloc
737            integer(c_size_t), value :: nmemb, size
738            integer(omp_allocator_handle_kind), value :: allocator
739          end function omp_calloc
740        end interface
741
742        interface
743          function omp_aligned_calloc (alignment, nmemb, size, allocator) bind(c)
744            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
745            import :: omp_allocator_handle_kind
746            type(c_ptr) :: omp_aligned_calloc
747            integer(c_size_t), value :: alignment, nmemb, size
748            integer(omp_allocator_handle_kind), value :: allocator
749          end function omp_aligned_calloc
750        end interface
751
752        interface
753          function omp_realloc (ptr, size, allocator, free_allocator) bind(c)
754            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
755            import :: omp_allocator_handle_kind
756            type(c_ptr) :: omp_realloc
757            type(c_ptr), value :: ptr
758            integer(c_size_t), value :: size
759            integer(omp_allocator_handle_kind), value :: allocator, free_allocator
760          end function omp_realloc
761        end interface
762
763        interface
764          function omp_target_alloc (size, device_num) bind(c)
765            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
766            type(c_ptr) :: omp_target_alloc
767            integer(c_size_t), value :: size
768            integer(c_int), value :: device_num
769          end function omp_target_alloc
770        end interface
771
772        interface
773          subroutine omp_target_free (device_ptr, device_num) bind(c)
774            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
775            type(c_ptr), value :: device_ptr
776            integer(c_int), value :: device_num
777          end subroutine omp_target_free
778        end interface
779
780        interface
781          function omp_target_is_present (ptr, device_num) bind(c)
782            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
783            integer(c_int) :: omp_target_is_present
784            type(c_ptr), value :: ptr
785            integer(c_int), value :: device_num
786          end function omp_target_is_present
787        end interface
788
789        interface
790          function omp_target_memcpy (dst, src, length, dst_offset, &
791                                      src_offset, dst_device_num, &
792                                      src_device_num) bind(c)
793            use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
794            integer(c_int) :: omp_target_memcpy
795            type(c_ptr), value :: dst, src
796            integer(c_size_t), value :: length, dst_offset, src_offset
797            integer(c_int), value :: dst_device_num, src_device_num
798          end function omp_target_memcpy
799        end interface
800
801        interface
802          function omp_target_memcpy_rect (dst,src,element_size, num_dims, &
803                                           volume, dst_offsets, src_offsets, &
804                                           dst_dimensions, src_dimensions, &
805                                           dst_device_num, src_device_num) &
806              bind(c)
807            use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
808            integer(c_int) :: omp_target_memcpy_rect
809            type(c_ptr), value :: dst, src
810            integer(c_size_t), value :: element_size
811            integer(c_int), value :: num_dims, dst_device_num, src_device_num
812            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),  &
813                                             src_offsets(*), dst_dimensions(*), &
814                                             src_dimensions(*)
815          end function omp_target_memcpy_rect
816        end interface
817
818        interface
819          function omp_target_associate_ptr (host_ptr, device_ptr, size, &
820                                             device_offset, device_num) bind(c)
821            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
822            integer(c_int) :: omp_target_associate_ptr
823            type(c_ptr), value :: host_ptr, device_ptr
824            integer(c_size_t), value :: size, device_offset
825            integer(c_int), value :: device_num
826          end function omp_target_associate_ptr
827        end interface
828
829        interface
830          function omp_target_disassociate_ptr (ptr, device_num) bind(c)
831            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
832            integer(c_int) :: omp_target_disassociate_ptr
833            type(c_ptr), value :: ptr
834            integer(c_int), value :: device_num
835          end function omp_target_disassociate_ptr
836        end interface
837
838#if _OPENMP >= 201811
839!GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested
840#endif
841
842#if _OPENMP >= 202011
843!GCC$ ATTRIBUTES DEPRECATED :: omp_proc_bind_master, omp_atv_sequential
844#endif
845
846      end module omp_lib
847