!  Copyright (C) 2005-2021 Free Software Foundation, Inc.
!  Contributed by Jakub Jelinek <jakub@redhat.com>.

!  This file is part of the GNU Offloading and Multi Processing Library
!  (libgomp).

!  Libgomp is free software; you can redistribute it and/or modify it
!  under the terms of the GNU General Public License as published by
!  the Free Software Foundation; either version 3, or (at your option)
!  any later version.

!  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
!  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
!  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
!  more details.

!  Under Section 7 of GPL version 3, you are granted additional
!  permissions described in the GCC Runtime Library Exception, version
!  3.1, as published by the Free Software Foundation.

!  You should have received a copy of the GNU General Public License and
!  a copy of the GCC Runtime Library Exception along with this program;
!  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
!  <http://www.gnu.org/licenses/>.

      module omp_lib_kinds
        use iso_c_binding, only: c_int, c_intptr_t
        implicit none
        private :: c_int, c_intptr_t
        integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@
        integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@
        integer, parameter :: omp_sched_kind = 4
        integer, parameter :: omp_proc_bind_kind = 4
        integer, parameter :: omp_sync_hint_kind = 4
        integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind
        integer, parameter :: omp_pause_resource_kind = 4
        integer, parameter :: omp_allocator_handle_kind = c_intptr_t
        integer, parameter :: omp_alloctrait_key_kind = c_int
        integer, parameter :: omp_alloctrait_val_kind = c_intptr_t
        integer, parameter :: omp_memspace_handle_kind = c_intptr_t
        integer, parameter :: omp_depend_kind = @OMP_DEPEND_KIND@
        integer, parameter :: omp_event_handle_kind = c_intptr_t
        integer (omp_sched_kind), parameter :: omp_sched_static = 1
        integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2
        integer (omp_sched_kind), parameter :: omp_sched_guided = 3
        integer (omp_sched_kind), parameter :: omp_sched_auto = 4
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_false = 0
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_true = 1
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_primary = 2
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_master = 2
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_close = 3
        integer (omp_proc_bind_kind), &
                 parameter :: omp_proc_bind_spread = 4
        integer (omp_lock_hint_kind), &
                 parameter :: omp_sync_hint_none = 0
        integer (omp_lock_hint_kind), &
                 parameter :: omp_lock_hint_none = omp_sync_hint_none
        integer (omp_lock_hint_kind), &
                 parameter :: omp_sync_hint_uncontended = 1
        integer (omp_lock_hint_kind), &
                 parameter :: omp_lock_hint_uncontended &
                 = omp_sync_hint_uncontended
        integer (omp_lock_hint_kind), &
                 parameter :: omp_sync_hint_contended = 2
        integer (omp_lock_hint_kind), &
                 parameter :: omp_lock_hint_contended &
                 = omp_sync_hint_contended
        integer (omp_lock_hint_kind), &
                 parameter :: omp_sync_hint_nonspeculative = 4
        integer (omp_lock_hint_kind), &
                 parameter :: omp_lock_hint_nonspeculative &
                 = omp_sync_hint_nonspeculative
        integer (omp_lock_hint_kind), &
                 parameter :: omp_sync_hint_speculative = 8
        integer (omp_lock_hint_kind), &
                 parameter :: omp_lock_hint_speculative &
                 = omp_sync_hint_speculative
        integer (kind=omp_pause_resource_kind), &
                 parameter :: omp_pause_soft = 1
        integer (kind=omp_pause_resource_kind), &
                 parameter :: omp_pause_hard = 2
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_sync_hint = 1
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_alignment = 2
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_access = 3
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_pool_size = 4
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_fallback = 5
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_fb_data = 6
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_pinned = 7
        integer (kind=omp_alloctrait_key_kind), &
                 parameter :: omp_atk_partition = 8
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_default = -1
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_false = 0
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_true = 1
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_contended = 3
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_uncontended = 4
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_serialized = 5
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_sequential = omp_atv_serialized
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_private = 6
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_all = 7
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_thread = 8
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_pteam = 9
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_cgroup = 10
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_default_mem_fb = 11
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_null_fb = 12
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_abort_fb = 13
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_allocator_fb = 14
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_environment = 15
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_nearest = 16
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_blocked = 17
        integer (kind=omp_alloctrait_val_kind), &
                 parameter :: omp_atv_interleaved = 18
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_null_allocator = 0
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_default_mem_alloc = 1
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_large_cap_mem_alloc = 2
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_const_mem_alloc = 3
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_high_bw_mem_alloc = 4
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_low_lat_mem_alloc = 5
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_cgroup_mem_alloc = 6
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_pteam_mem_alloc = 7
        integer (kind=omp_allocator_handle_kind), &
                 parameter :: omp_thread_mem_alloc = 8
        integer (omp_memspace_handle_kind), &
                 parameter :: omp_default_mem_space = 0
        integer (omp_memspace_handle_kind), &
                 parameter :: omp_large_cap_mem_space = 1
        integer (omp_memspace_handle_kind), &
                 parameter :: omp_const_mem_space = 2
        integer (omp_memspace_handle_kind), &
                 parameter :: omp_high_bw_mem_space = 3
        integer (omp_memspace_handle_kind), &
                 parameter :: omp_low_lat_mem_space = 4

        type omp_alloctrait
          integer (kind=omp_alloctrait_key_kind) key
          integer (kind=omp_alloctrait_val_kind) value
        end type omp_alloctrait
      end module

      module omp_lib
        use omp_lib_kinds
        implicit none
        integer, parameter :: openmp_version = 201511

        interface
          subroutine omp_init_lock (svar)
            use omp_lib_kinds
            integer (omp_lock_kind), intent (out) :: svar
          end subroutine omp_init_lock
        end interface

        interface
          subroutine omp_init_lock_with_hint (svar, hint)
            use omp_lib_kinds
            integer (omp_lock_kind), intent (out) :: svar
            integer (omp_lock_hint_kind), intent (in) :: hint
          end subroutine omp_init_lock_with_hint
        end interface

        interface
          subroutine omp_init_nest_lock (nvar)
            use omp_lib_kinds
            integer (omp_nest_lock_kind), intent (out) :: nvar
          end subroutine omp_init_nest_lock
        end interface

        interface
          subroutine omp_init_nest_lock_with_hint (nvar, hint)
            use omp_lib_kinds
            integer (omp_nest_lock_kind), intent (out) :: nvar
            integer (omp_lock_hint_kind), intent (in) :: hint
          end subroutine omp_init_nest_lock_with_hint
        end interface

        interface
          subroutine omp_destroy_lock (svar)
            use omp_lib_kinds
            integer (omp_lock_kind), intent (inout) :: svar
          end subroutine omp_destroy_lock
        end interface

        interface
          subroutine omp_destroy_nest_lock (nvar)
            use omp_lib_kinds
            integer (omp_nest_lock_kind), intent (inout) :: nvar
          end subroutine omp_destroy_nest_lock
        end interface

        interface
          subroutine omp_set_lock (svar)
            use omp_lib_kinds
            integer (omp_lock_kind), intent (inout) :: svar
          end subroutine omp_set_lock
        end interface

        interface
          subroutine omp_set_nest_lock (nvar)
            use omp_lib_kinds
            integer (omp_nest_lock_kind), intent (inout) :: nvar
          end subroutine omp_set_nest_lock
        end interface

        interface
          subroutine omp_unset_lock (svar)
            use omp_lib_kinds
            integer (omp_lock_kind), intent (inout) :: svar
          end subroutine omp_unset_lock
        end interface

        interface
          subroutine omp_unset_nest_lock (nvar)
            use omp_lib_kinds
            integer (omp_nest_lock_kind), intent (inout) :: nvar
          end subroutine omp_unset_nest_lock
        end interface

        interface omp_set_dynamic
          subroutine omp_set_dynamic (dynamic_threads)
            logical (4), intent (in) :: dynamic_threads
          end subroutine omp_set_dynamic
          subroutine omp_set_dynamic_8 (dynamic_threads)
            logical (8), intent (in) :: dynamic_threads
          end subroutine omp_set_dynamic_8
        end interface

        interface omp_set_nested
          subroutine omp_set_nested (nested)
            logical (4), intent (in) :: nested
          end subroutine omp_set_nested
          subroutine omp_set_nested_8 (nested)
            logical (8), intent (in) :: nested
          end subroutine omp_set_nested_8
        end interface

        interface omp_set_num_threads
          subroutine omp_set_num_threads (num_threads)
            integer (4), intent (in) :: num_threads
          end subroutine omp_set_num_threads
          subroutine omp_set_num_threads_8 (num_threads)
            integer (8), intent (in) :: num_threads
          end subroutine omp_set_num_threads_8
        end interface

        interface
          function omp_get_dynamic ()
            logical (4) :: omp_get_dynamic
          end function omp_get_dynamic
        end interface

        interface
          function omp_get_nested ()
            logical (4) :: omp_get_nested
          end function omp_get_nested
        end interface

        interface
          function omp_in_parallel ()
            logical (4) :: omp_in_parallel
          end function omp_in_parallel
        end interface

        interface
          function omp_test_lock (svar)
            use omp_lib_kinds
            logical (4) :: omp_test_lock
            integer (omp_lock_kind), intent (inout) :: svar
          end function omp_test_lock
        end interface

        interface
          function omp_get_max_threads ()
            integer (4) :: omp_get_max_threads
          end function omp_get_max_threads
        end interface

        interface
          function omp_get_num_procs ()
            integer (4) :: omp_get_num_procs
          end function omp_get_num_procs
        end interface

        interface
          function omp_get_num_threads ()
            integer (4) :: omp_get_num_threads
          end function omp_get_num_threads
        end interface

        interface
          function omp_get_thread_num ()
            integer (4) :: omp_get_thread_num
          end function omp_get_thread_num
        end interface

        interface
          function omp_test_nest_lock (nvar)
            use omp_lib_kinds
            integer (4) :: omp_test_nest_lock
            integer (omp_nest_lock_kind), intent (inout) :: nvar
          end function omp_test_nest_lock
        end interface

        interface
          function omp_get_wtick ()
            double precision :: omp_get_wtick
          end function omp_get_wtick
        end interface

        interface
          function omp_get_wtime ()
            double precision :: omp_get_wtime
          end function omp_get_wtime
        end interface

        interface omp_set_schedule
          subroutine omp_set_schedule (kind, chunk_size)
            use omp_lib_kinds
            integer (omp_sched_kind), intent (in) :: kind
            integer (4), intent (in) :: chunk_size
          end subroutine omp_set_schedule
          subroutine omp_set_schedule_8 (kind, chunk_size)
            use omp_lib_kinds
            integer (omp_sched_kind), intent (in) :: kind
            integer (8), intent (in) :: chunk_size
          end subroutine omp_set_schedule_8
         end interface

        interface omp_get_schedule
          subroutine omp_get_schedule (kind, chunk_size)
            use omp_lib_kinds
            integer (omp_sched_kind), intent (out) :: kind
            integer (4), intent (out) :: chunk_size
          end subroutine omp_get_schedule
          subroutine omp_get_schedule_8 (kind, chunk_size)
            use omp_lib_kinds
            integer (omp_sched_kind), intent (out) :: kind
            integer (8), intent (out) :: chunk_size
          end subroutine omp_get_schedule_8
         end interface

        interface
          function omp_get_thread_limit ()
            integer (4) :: omp_get_thread_limit
          end function omp_get_thread_limit
        end interface

        interface omp_set_max_active_levels
          subroutine omp_set_max_active_levels (max_levels)
            integer (4), intent (in) :: max_levels
          end subroutine omp_set_max_active_levels
          subroutine omp_set_max_active_levels_8 (max_levels)
            integer (8), intent (in) :: max_levels
          end subroutine omp_set_max_active_levels_8
        end interface

        interface
          function omp_get_max_active_levels ()
            integer (4) :: omp_get_max_active_levels
          end function omp_get_max_active_levels
        end interface

        interface
          function omp_get_supported_active_levels ()
            integer (4) :: omp_get_supported_active_levels
          end function omp_get_supported_active_levels
        end interface

        interface
          function omp_get_level ()
            integer (4) :: omp_get_level
          end function omp_get_level
        end interface

        interface omp_get_ancestor_thread_num
          function omp_get_ancestor_thread_num (level)
            integer (4), intent (in) :: level
            integer (4) :: omp_get_ancestor_thread_num
          end function omp_get_ancestor_thread_num
          function omp_get_ancestor_thread_num_8 (level)
            integer (8), intent (in) :: level
            integer (4) :: omp_get_ancestor_thread_num_8
          end function omp_get_ancestor_thread_num_8
        end interface

        interface omp_get_team_size
          function omp_get_team_size (level)
            integer (4), intent (in) :: level
            integer (4) :: omp_get_team_size
          end function omp_get_team_size
          function omp_get_team_size_8 (level)
            integer (8), intent (in) :: level
            integer (4) :: omp_get_team_size_8
          end function omp_get_team_size_8
        end interface

        interface
          function omp_get_active_level ()
            integer (4) :: omp_get_active_level
          end function omp_get_active_level
        end interface

        interface
          function omp_in_final ()
            logical (4) :: omp_in_final
          end function omp_in_final
        end interface

        interface
          function omp_get_cancellation ()
            logical (4) :: omp_get_cancellation
          end function omp_get_cancellation
        end interface

        interface
          function omp_get_proc_bind ()
            use omp_lib_kinds
            integer (omp_proc_bind_kind) :: omp_get_proc_bind
          end function omp_get_proc_bind
        end interface

        interface
          function omp_get_num_places ()
            integer (4) :: omp_get_num_places
          end function omp_get_num_places
        end interface

        interface omp_get_place_num_procs
          function omp_get_place_num_procs (place_num)
            integer (4), intent(in) :: place_num
            integer (4) :: omp_get_place_num_procs
          end function omp_get_place_num_procs

          function omp_get_place_num_procs_8 (place_num)
            integer (8), intent(in) :: place_num
            integer (4) :: omp_get_place_num_procs_8
          end function omp_get_place_num_procs_8
        end interface

        interface omp_get_place_proc_ids
          subroutine omp_get_place_proc_ids (place_num, ids)
            integer (4), intent(in) :: place_num
            integer (4), intent(out) :: ids(*)
          end subroutine omp_get_place_proc_ids

          subroutine omp_get_place_proc_ids_8 (place_num, ids)
            integer (8), intent(in) :: place_num
            integer (8), intent(out) :: ids(*)
          end subroutine omp_get_place_proc_ids_8
        end interface

        interface
          function omp_get_place_num ()
            integer (4) :: omp_get_place_num
          end function omp_get_place_num
        end interface

        interface
          function omp_get_partition_num_places ()
            integer (4) :: omp_get_partition_num_places
          end function omp_get_partition_num_places
        end interface

        interface omp_get_partition_place_nums
          subroutine omp_get_partition_place_nums (place_nums)
            integer (4), intent(out) :: place_nums(*)
          end subroutine omp_get_partition_place_nums

          subroutine omp_get_partition_place_nums_8 (place_nums)
            integer (8), intent(out) :: place_nums(*)
          end subroutine omp_get_partition_place_nums_8
        end interface

        interface omp_set_default_device
          subroutine omp_set_default_device (device_num)
            integer (4), intent (in) :: device_num
          end subroutine omp_set_default_device
          subroutine omp_set_default_device_8 (device_num)
            integer (8), intent (in) :: device_num
          end subroutine omp_set_default_device_8
        end interface

        interface
          function omp_get_default_device ()
            integer (4) :: omp_get_default_device
          end function omp_get_default_device
        end interface

        interface
          function omp_get_num_devices ()
            integer (4) :: omp_get_num_devices
          end function omp_get_num_devices
        end interface

        interface
          function omp_get_num_teams ()
            integer (4) :: omp_get_num_teams
          end function omp_get_num_teams
        end interface

        interface
          function omp_get_team_num ()
            integer (4) :: omp_get_team_num
          end function omp_get_team_num
        end interface

        interface
          function omp_is_initial_device ()
            logical (4) :: omp_is_initial_device
          end function omp_is_initial_device
        end interface

        interface
          function omp_get_initial_device ()
            integer (4) :: omp_get_initial_device
          end function omp_get_initial_device
        end interface

        interface
          function omp_get_device_num ()
            integer (4) :: omp_get_device_num
          end function omp_get_device_num
        end interface

        interface
          function omp_get_max_task_priority ()
            integer (4) :: omp_get_max_task_priority
          end function omp_get_max_task_priority
        end interface

        interface
          subroutine omp_fulfill_event (event)
            use omp_lib_kinds
            integer (kind=omp_event_handle_kind), &
              value, intent(in) :: event
          end subroutine omp_fulfill_event
        end interface

        interface
          subroutine omp_set_affinity_format (format)
            character(len=*), intent(in) :: format
          end subroutine omp_set_affinity_format
        end interface

        interface
          function omp_get_affinity_format (buffer)
            integer (4) :: omp_get_affinity_format
            character(len=*), intent(out) :: buffer
          end function omp_get_affinity_format
        end interface

        interface
          subroutine omp_display_affinity (format)
            character(len=*), intent(in) :: format
          end subroutine omp_display_affinity
        end interface

        interface
          function omp_capture_affinity (buffer, format)
            integer (4) :: omp_capture_affinity
            character(len=*), intent(out) :: buffer
            character(len=*), intent(in) :: format
          end function omp_capture_affinity
        end interface

        interface
          function omp_pause_resource (kind, device_num)
            use omp_lib_kinds
            integer (4) :: omp_pause_resource
            integer (kind=omp_pause_resource_kind), &
              intent(in) :: kind
            integer (4) :: device_num
          end function
        end interface

        interface
          function omp_pause_resource_all (kind)
            use omp_lib_kinds
            integer (4) :: omp_pause_resource_all
            integer (kind=omp_pause_resource_kind), &
              intent(in) :: kind
          end function
        end interface

        interface omp_init_allocator
          function omp_init_allocator (memspace, ntraits, traits)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind) omp_init_allocator
            integer (kind=omp_memspace_handle_kind), &
              intent(in) :: memspace
            integer (4), intent(in) :: ntraits
            type (omp_alloctrait), intent(in) :: traits(*)
          end function
          function omp_init_allocator_8 (memspace, ntraits, traits)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind) omp_init_allocator_8
            integer (kind=omp_memspace_handle_kind), &
              intent(in) :: memspace
            integer (8), intent(in) :: ntraits
            type (omp_alloctrait), intent(in) :: traits(*)
          end function
        end interface

        interface
          subroutine omp_destroy_allocator (allocator)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind), &
              intent(in) :: allocator
          end subroutine
        end interface

        interface
          subroutine omp_set_default_allocator (allocator)
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind), &
              intent(in) :: allocator
          end subroutine
        end interface

        interface
          function omp_get_default_allocator ()
            use omp_lib_kinds
            integer (kind=omp_allocator_handle_kind) &
               omp_get_default_allocator
          end function
        end interface

        interface omp_display_env
          subroutine omp_display_env (verbose)
            logical (4),intent (in) :: verbose
          end subroutine omp_display_env
          subroutine omp_display_env_8 (verbose)
            logical (8),intent (in) :: verbose
          end subroutine omp_display_env_8
        end interface

        interface
          function omp_alloc (size, allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
            import :: omp_allocator_handle_kind
            type(c_ptr) :: omp_alloc
            integer(c_size_t), value :: size
            integer(omp_allocator_handle_kind), value :: allocator
          end function omp_alloc
        end interface

        interface
          function omp_aligned_alloc (alignment, size, allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
            import :: omp_allocator_handle_kind
            type(c_ptr) :: omp_aligned_alloc
            integer(c_size_t), value :: alignment, size
            integer(omp_allocator_handle_kind), value :: allocator
          end function omp_aligned_alloc
        end interface

        interface
          subroutine omp_free(ptr, allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr
            import :: omp_allocator_handle_kind
            type(c_ptr), value :: ptr
            integer(omp_allocator_handle_kind), value :: allocator
          end subroutine omp_free
        end interface

        interface
          function omp_calloc (nmemb, size, allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
            import :: omp_allocator_handle_kind
            type(c_ptr) :: omp_calloc
            integer(c_size_t), value :: nmemb, size
            integer(omp_allocator_handle_kind), value :: allocator
          end function omp_calloc
        end interface

        interface
          function omp_aligned_calloc (alignment, nmemb, size, allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
            import :: omp_allocator_handle_kind
            type(c_ptr) :: omp_aligned_calloc
            integer(c_size_t), value :: alignment, nmemb, size
            integer(omp_allocator_handle_kind), value :: allocator
          end function omp_aligned_calloc
        end interface

        interface
          function omp_realloc (ptr, size, allocator, free_allocator) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
            import :: omp_allocator_handle_kind
            type(c_ptr) :: omp_realloc
            type(c_ptr), value :: ptr
            integer(c_size_t), value :: size
            integer(omp_allocator_handle_kind), value :: allocator, free_allocator
          end function omp_realloc
        end interface

        interface
          function omp_target_alloc (size, device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
            type(c_ptr) :: omp_target_alloc
            integer(c_size_t), value :: size
            integer(c_int), value :: device_num
          end function omp_target_alloc
        end interface

        interface
          subroutine omp_target_free (device_ptr, device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
            type(c_ptr), value :: device_ptr
            integer(c_int), value :: device_num
          end subroutine omp_target_free
        end interface

        interface
          function omp_target_is_present (ptr, device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
            integer(c_int) :: omp_target_is_present
            type(c_ptr), value :: ptr
            integer(c_int), value :: device_num
          end function omp_target_is_present
        end interface

        interface
          function omp_target_memcpy (dst, src, length, dst_offset, &
                                      src_offset, dst_device_num, &
                                      src_device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
            integer(c_int) :: omp_target_memcpy
            type(c_ptr), value :: dst, src
            integer(c_size_t), value :: length, dst_offset, src_offset
            integer(c_int), value :: dst_device_num, src_device_num
          end function omp_target_memcpy
        end interface

        interface
          function omp_target_memcpy_rect (dst,src,element_size, num_dims, &
                                           volume, dst_offsets, src_offsets, &
                                           dst_dimensions, src_dimensions, &
                                           dst_device_num, src_device_num) &
              bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
            integer(c_int) :: omp_target_memcpy_rect
            type(c_ptr), value :: dst, src
            integer(c_size_t), value :: element_size
            integer(c_int), value :: num_dims, dst_device_num, src_device_num
            integer(c_size_t), intent(in) :: volume(*), dst_offsets(*),  &
                                             src_offsets(*), dst_dimensions(*), &
                                             src_dimensions(*)
          end function omp_target_memcpy_rect
        end interface

        interface
          function omp_target_associate_ptr (host_ptr, device_ptr, size, &
                                             device_offset, device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
            integer(c_int) :: omp_target_associate_ptr
            type(c_ptr), value :: host_ptr, device_ptr
            integer(c_size_t), value :: size, device_offset
            integer(c_int), value :: device_num
          end function omp_target_associate_ptr
        end interface

        interface
          function omp_target_disassociate_ptr (ptr, device_num) bind(c)
            use, intrinsic :: iso_c_binding, only : c_ptr, c_int
            integer(c_int) :: omp_target_disassociate_ptr
            type(c_ptr), value :: ptr
            integer(c_int), value :: device_num
          end function omp_target_disassociate_ptr
        end interface

#if _OPENMP >= 201811
!GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested
#endif

#if _OPENMP >= 202011
!GCC$ ATTRIBUTES DEPRECATED :: omp_proc_bind_master
#endif

      end module omp_lib
