! include/50/omp_lib.h.var

!
!//===----------------------------------------------------------------------===//
!//
!// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
!// See https://llvm.org/LICENSE.txt for license information.
!// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
!//
!//===----------------------------------------------------------------------===//
!

      integer omp_integer_kind
      parameter(omp_integer_kind=4)
      integer omp_logical_kind
      parameter(omp_logical_kind=4)
      integer omp_real_kind
      parameter(omp_real_kind=4)
      integer omp_lock_kind
      parameter(omp_lock_kind=int_ptr_kind())
      integer omp_nest_lock_kind
      parameter(omp_nest_lock_kind=int_ptr_kind())
      integer omp_sched_kind
      parameter(omp_sched_kind=omp_integer_kind)
      integer omp_proc_bind_kind
      parameter(omp_proc_bind_kind=omp_integer_kind)
      integer kmp_pointer_kind
      parameter(kmp_pointer_kind=int_ptr_kind())
      integer kmp_size_t_kind
      parameter(kmp_size_t_kind=int_ptr_kind())
      integer kmp_affinity_mask_kind
      parameter(kmp_affinity_mask_kind=int_ptr_kind())
      integer omp_sync_hint_kind
      parameter(omp_sync_hint_kind=omp_integer_kind)
      integer omp_lock_hint_kind
      parameter(omp_lock_hint_kind=omp_sync_hint_kind)
      integer omp_control_tool_kind
      parameter(omp_control_tool_kind=omp_integer_kind)
      integer omp_control_tool_result_kind
      parameter(omp_control_tool_result_kind=omp_integer_kind)
      integer omp_allocator_kind
      parameter(omp_allocator_kind=int_ptr_kind())
      integer omp_pause_resource_kind
      parameter(omp_pause_resource_kind=omp_integer_kind)

      integer(kind=omp_integer_kind)openmp_version
      parameter(openmp_version=@LIBOMP_OMP_YEAR_MONTH@)
      integer(kind=omp_integer_kind)kmp_version_major
      parameter(kmp_version_major=@LIBOMP_VERSION_MAJOR@)
      integer(kind=omp_integer_kind)kmp_version_minor
      parameter(kmp_version_minor=@LIBOMP_VERSION_MINOR@)
      integer(kind=omp_integer_kind)kmp_version_build
      parameter(kmp_version_build=@LIBOMP_VERSION_BUILD@)
      character(*)kmp_build_date
      parameter(kmp_build_date='@LIBOMP_BUILD_DATE@')

      integer(kind=omp_sched_kind)omp_sched_static
      parameter(omp_sched_static=1)
      integer(kind=omp_sched_kind)omp_sched_dynamic
      parameter(omp_sched_dynamic=2)
      integer(kind=omp_sched_kind)omp_sched_guided
      parameter(omp_sched_guided=3)
      integer(kind=omp_sched_kind)omp_sched_auto
      parameter(omp_sched_auto=4)

      integer(kind=omp_proc_bind_kind)omp_proc_bind_false
      parameter(omp_proc_bind_false=0)
      integer(kind=omp_proc_bind_kind)omp_proc_bind_true
      parameter(omp_proc_bind_true=1)
      integer(kind=omp_proc_bind_kind)omp_proc_bind_master
      parameter(omp_proc_bind_master=2)
      integer(kind=omp_proc_bind_kind)omp_proc_bind_close
      parameter(omp_proc_bind_close=3)
      integer(kind=omp_proc_bind_kind)omp_proc_bind_spread
      parameter(omp_proc_bind_spread=4)

      integer(kind=omp_sync_hint_kind)omp_sync_hint_none
      parameter(omp_sync_hint_none=0)
      integer(kind=omp_sync_hint_kind)omp_sync_hint_uncontended
      parameter(omp_sync_hint_uncontended=1)
      integer(kind=omp_sync_hint_kind)omp_sync_hint_contended
      parameter(omp_sync_hint_contended=2)
      integer(kind=omp_sync_hint_kind)omp_sync_hint_nonspeculative
      parameter(omp_sync_hint_nonspeculative=4)
      integer(kind=omp_sync_hint_kind)omp_sync_hint_speculative
      parameter(omp_sync_hint_speculative=8)
      integer(kind=omp_lock_hint_kind)omp_lock_hint_none
      parameter(omp_lock_hint_none=omp_sync_hint_none)
      integer(kind=omp_lock_hint_kind)omp_lock_hint_uncontended
      parameter(omp_lock_hint_uncontended=omp_sync_hint_uncontended)
      integer(kind=omp_lock_hint_kind)omp_lock_hint_contended
      parameter(omp_lock_hint_contended=omp_sync_hint_contended)
      integer(kind=omp_lock_hint_kind)omp_lock_hint_nonspeculative
      parameter(omp_lock_hint_nonspeculative=4)
      integer(kind=omp_lock_hint_kind)omp_lock_hint_speculative
      parameter(omp_lock_hint_speculative=omp_sync_hint_speculative)
      integer(kind=omp_lock_hint_kind)kmp_lock_hint_hle
      parameter(kmp_lock_hint_hle=65536)
      integer(kind=omp_lock_hint_kind)kmp_lock_hint_rtm
      parameter(kmp_lock_hint_rtm=131072)
      integer(kind=omp_lock_hint_kind)kmp_lock_hint_adaptive
      parameter(kmp_lock_hint_adaptive=262144)

      integer(kind=omp_control_tool_kind)omp_control_tool_start
      parameter(omp_control_tool_start=1)
      integer(kind=omp_control_tool_kind)omp_control_tool_pause
      parameter(omp_control_tool_pause=2)
      integer(kind=omp_control_tool_kind)omp_control_tool_flush
      parameter(omp_control_tool_flush=3)
      integer(kind=omp_control_tool_kind)omp_control_tool_end
      parameter(omp_control_tool_end=4)

      integer(omp_control_tool_result_kind)omp_control_tool_notool
      parameter(omp_control_tool_notool=-2)
      integer(omp_control_tool_result_kind)omp_control_tool_nocallback
      parameter(omp_control_tool_nocallback=-1)
      integer(omp_control_tool_result_kind)omp_control_tool_success
      parameter(omp_control_tool_success=0)
      integer(omp_control_tool_result_kind)omp_control_tool_ignored
      parameter(omp_control_tool_ignored=1)

      integer(kind=omp_allocator_kind)omp_null_allocator
      parameter(omp_null_allocator=0)
      integer(kind=omp_allocator_kind)omp_default_mem_alloc
      parameter(omp_default_mem_alloc=1)
      integer(kind=omp_allocator_kind)omp_large_cap_mem_alloc
      parameter(omp_large_cap_mem_alloc=2)
      integer(kind=omp_allocator_kind)omp_const_mem_alloc
      parameter(omp_const_mem_alloc=3)
      integer(kind=omp_allocator_kind)omp_high_bw_mem_alloc
      parameter(omp_high_bw_mem_alloc=4)
      integer(kind=omp_allocator_kind)omp_low_lat_mem_alloc
      parameter(omp_low_lat_mem_alloc=5)
      integer(kind=omp_allocator_kind)omp_cgroup_mem_alloc
      parameter(omp_cgroup_mem_alloc=6)
      integer(kind=omp_allocator_kind)omp_pteam_mem_alloc
      parameter(omp_pteam_mem_alloc=7)
      integer(kind=omp_allocator_kind)omp_thread_mem_alloc
      parameter(omp_thread_mem_alloc=8)
      integer(kind=omp_pause_resource_kind)omp_pause_resume
      parameter(omp_pause_resume=0)
      integer(kind=omp_pause_resource_kind)omp_pause_soft
      parameter(omp_pause_soft=1)
      integer(kind=omp_pause_resource_kind)omp_pause_hard
      parameter(omp_pause_hard=2)

      interface

!       ***
!       *** omp_* entry points
!       ***

        subroutine omp_set_num_threads(num_threads) bind(c)
          import
          integer (kind=omp_integer_kind), value :: num_threads
        end subroutine omp_set_num_threads

        subroutine omp_set_dynamic(dynamic_threads) bind(c)
          import
          logical (kind=omp_logical_kind), value :: dynamic_threads
        end subroutine omp_set_dynamic

        subroutine omp_set_nested(nested) bind(c)
          import
          logical (kind=omp_logical_kind), value :: nested
        end subroutine omp_set_nested

        function omp_get_num_threads() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_num_threads
        end function omp_get_num_threads

        function omp_get_max_threads() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_max_threads
        end function omp_get_max_threads

        function omp_get_thread_num() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_thread_num
        end function omp_get_thread_num

        function omp_get_num_procs() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_num_procs
        end function omp_get_num_procs

        function omp_in_parallel() bind(c)
          import
          logical (kind=omp_logical_kind) omp_in_parallel
        end function omp_in_parallel

        function omp_in_final() bind(c)
          import
          logical (kind=omp_logical_kind) omp_in_final
        end function omp_in_final

        function omp_get_dynamic() bind(c)
          import
          logical (kind=omp_logical_kind) omp_get_dynamic
        end function omp_get_dynamic

        function omp_get_nested() bind(c)
          import
          logical (kind=omp_logical_kind) omp_get_nested
        end function omp_get_nested

        function omp_get_thread_limit() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_thread_limit
        end function omp_get_thread_limit

        subroutine omp_set_max_active_levels(max_levels) bind(c)
          import
          integer (kind=omp_integer_kind), value :: max_levels
        end subroutine omp_set_max_active_levels

        function omp_get_max_active_levels() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_max_active_levels
        end function omp_get_max_active_levels

        function omp_get_level() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_level
        end function omp_get_level

        function omp_get_active_level() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_active_level
        end function omp_get_active_level

        function omp_get_ancestor_thread_num(level) bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_ancestor_thread_num
          integer (kind=omp_integer_kind), value :: level
        end function omp_get_ancestor_thread_num

        function omp_get_team_size(level) bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_team_size
          integer (kind=omp_integer_kind), value :: level
        end function omp_get_team_size

        subroutine omp_set_schedule(kind, chunk_size) bind(c)
          import
          integer (kind=omp_sched_kind), value :: kind
          integer (kind=omp_integer_kind), value :: chunk_size
        end subroutine omp_set_schedule

        subroutine omp_get_schedule(kind, chunk_size) bind(c)
          import
          integer (kind=omp_sched_kind) kind
          integer (kind=omp_integer_kind) chunk_size
        end subroutine omp_get_schedule

        function omp_get_proc_bind() bind(c)
          import
          integer (kind=omp_proc_bind_kind) omp_get_proc_bind
        end function omp_get_proc_bind

        function omp_get_num_places() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_num_places
        end function omp_get_num_places

        function omp_get_place_num_procs(place_num) bind(c)
          import
          integer (kind=omp_integer_kind), value :: place_num
          integer (kind=omp_integer_kind) omp_get_place_num_procs
        end function omp_get_place_num_procs

        subroutine omp_get_place_proc_ids(place_num, ids) bind(c)
          import
          integer (kind=omp_integer_kind), value :: place_num
          integer (kind=omp_integer_kind) ids(*)
        end subroutine omp_get_place_proc_ids

        function omp_get_place_num() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_place_num
        end function omp_get_place_num

        function omp_get_partition_num_places() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_partition_num_places
        end function omp_get_partition_num_places

        subroutine omp_get_partition_place_nums(place_nums) bind(c)
          import
          integer (kind=omp_integer_kind) place_nums(*)
        end subroutine omp_get_partition_place_nums

        function omp_get_wtime() bind(c)
          double precision omp_get_wtime
        end function omp_get_wtime

        function omp_get_wtick() bind(c)
          double precision omp_get_wtick
        end function omp_get_wtick

        function omp_get_default_device() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_default_device
        end function omp_get_default_device

        subroutine omp_set_default_device(device_num) bind(c)
          import
          integer (kind=omp_integer_kind), value :: device_num
        end subroutine omp_set_default_device

        function omp_get_num_devices() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_num_devices
        end function omp_get_num_devices

        function omp_get_num_teams() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_num_teams
        end function omp_get_num_teams

        function omp_get_team_num() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_team_num
        end function omp_get_team_num

        function omp_is_initial_device() bind(c)
          import
          logical (kind=omp_logical_kind) omp_is_initial_device
        end function omp_is_initial_device

        function omp_get_initial_device() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_initial_device
        end function omp_get_initial_device

        function omp_get_device_num() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_device_num
        end function omp_get_device_num

        function omp_pause_resource(kind, device_num) bind(c)
          import
          integer (kind=omp_pause_resource_kind), value :: kind
          integer (kind=omp_integer_kind), value :: device_num
          integer (kind=omp_integer_kind) omp_pause_resource
        end function omp_pause_resource

        function omp_pause_resource_all(kind) bind(c)
          import
          integer (kind=omp_pause_resource_kind), value :: kind
          integer (kind=omp_integer_kind) omp_pause_resource_all
        end function omp_pause_resource_all

        subroutine omp_init_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_lock
!DIR$ ENDIF
          import
          integer (kind=omp_lock_kind) svar
        end subroutine omp_init_lock

        subroutine omp_destroy_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_lock
!DIR$ ENDIF
          import
          integer (kind=omp_lock_kind) svar
        end subroutine omp_destroy_lock

        subroutine omp_set_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_lock
!DIR$ ENDIF
          import
          integer (kind=omp_lock_kind) svar
        end subroutine omp_set_lock

        subroutine omp_unset_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_lock
!DIR$ ENDIF
          import
          integer (kind=omp_lock_kind) svar
        end subroutine omp_unset_lock

        function omp_test_lock(svar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_lock
!DIR$ ENDIF
          import
          logical (kind=omp_logical_kind) omp_test_lock
          integer (kind=omp_lock_kind) svar
        end function omp_test_lock

        subroutine omp_init_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_init_nest_lock
!DIR$ ENDIF
          import
          integer (kind=omp_nest_lock_kind) nvar
        end subroutine omp_init_nest_lock

        subroutine omp_destroy_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock
!DIR$ ENDIF
          import
          integer (kind=omp_nest_lock_kind) nvar
        end subroutine omp_destroy_nest_lock

        subroutine omp_set_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_set_nest_lock
!DIR$ ENDIF
          import
          integer (kind=omp_nest_lock_kind) nvar
        end subroutine omp_set_nest_lock

        subroutine omp_unset_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_unset_nest_lock
!DIR$ ENDIF
          import
          integer (kind=omp_nest_lock_kind) nvar
        end subroutine omp_unset_nest_lock

        function omp_test_nest_lock(nvar) bind(c)
!DIR$ IF(__INTEL_COMPILER.GE.1400)
!DIR$ attributes known_intrinsic :: omp_test_nest_lock
!DIR$ ENDIF
          import
          integer (kind=omp_integer_kind) omp_test_nest_lock
          integer (kind=omp_nest_lock_kind) nvar
        end function omp_test_nest_lock

        function omp_get_max_task_priority() bind(c)
          import
          integer (kind=omp_integer_kind) omp_get_max_task_priority
        end function omp_get_max_task_priority

        subroutine omp_set_default_allocator(svar) bind(c)
          import
          integer (kind=omp_allocator_kind), value :: svar
        end subroutine omp_set_default_allocator

        function omp_get_default_allocator() bind(c)
          import
          integer (kind=omp_allocator_kind) omp_get_default_allocator
        end function omp_get_default_allocator

        subroutine omp_set_affinity_format(format)
          character (len=*) :: format
        end subroutine omp_set_affinity_format

        function omp_get_affinity_format(buffer)
          import
          character (len=*) :: buffer
          integer (kind=kmp_size_t_kind) :: omp_get_affinity_format
        end function omp_get_affinity_format

        subroutine omp_display_affinity(format)
          character (len=*) :: format
        end subroutine omp_display_affinity

        function omp_capture_affinity(buffer, format)
          import
          character (len=*) :: format
          character (len=*) :: buffer
          integer (kind=kmp_size_t_kind) :: omp_capture_affinity
        end function omp_capture_affinity

!       ***
!       *** kmp_* entry points
!       ***

        subroutine kmp_set_stacksize(size) bind(c)
          import
          integer (kind=omp_integer_kind), value :: size
        end subroutine kmp_set_stacksize

        subroutine kmp_set_stacksize_s(size) bind(c)
          import
          integer (kind=kmp_size_t_kind), value :: size
        end subroutine kmp_set_stacksize_s

        subroutine kmp_set_blocktime(msec) bind(c)
          import
          integer (kind=omp_integer_kind), value :: msec
        end subroutine kmp_set_blocktime

        subroutine kmp_set_library_serial() bind(c)
        end subroutine kmp_set_library_serial

        subroutine kmp_set_library_turnaround() bind(c)
        end subroutine kmp_set_library_turnaround

        subroutine kmp_set_library_throughput() bind(c)
        end subroutine kmp_set_library_throughput

        subroutine kmp_set_library(libnum) bind(c)
          import
          integer (kind=omp_integer_kind), value :: libnum
        end subroutine kmp_set_library

        subroutine kmp_set_defaults(string) bind(c)
          character string(*)
        end subroutine kmp_set_defaults

        function kmp_get_stacksize() bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_stacksize
        end function kmp_get_stacksize

        function kmp_get_stacksize_s() bind(c)
          import
          integer (kind=kmp_size_t_kind) kmp_get_stacksize_s
        end function kmp_get_stacksize_s

        function kmp_get_blocktime() bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_blocktime
        end function kmp_get_blocktime

        function kmp_get_library() bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_library
        end function kmp_get_library

        subroutine kmp_set_disp_num_buffers(num) bind(c)
          import
          integer (kind=omp_integer_kind), value :: num
        end subroutine kmp_set_disp_num_buffers

        function kmp_set_affinity(mask) bind(c)
          import
          integer (kind=omp_integer_kind) kmp_set_affinity
          integer (kind=kmp_affinity_mask_kind) mask
        end function kmp_set_affinity

        function kmp_get_affinity(mask) bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_affinity
          integer (kind=kmp_affinity_mask_kind) mask
        end function kmp_get_affinity

        function kmp_get_affinity_max_proc() bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_affinity_max_proc
        end function kmp_get_affinity_max_proc

        subroutine kmp_create_affinity_mask(mask) bind(c)
          import
          integer (kind=kmp_affinity_mask_kind) mask
        end subroutine kmp_create_affinity_mask

        subroutine kmp_destroy_affinity_mask(mask) bind(c)
          import
          integer (kind=kmp_affinity_mask_kind) mask
        end subroutine kmp_destroy_affinity_mask

        function kmp_set_affinity_mask_proc(proc, mask) bind(c)
          import
          integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc
          integer (kind=omp_integer_kind), value :: proc
          integer (kind=kmp_affinity_mask_kind) mask
        end function kmp_set_affinity_mask_proc

        function kmp_unset_affinity_mask_proc(proc, mask) bind(c)
          import
          integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc
          integer (kind=omp_integer_kind), value :: proc
          integer (kind=kmp_affinity_mask_kind) mask
        end function kmp_unset_affinity_mask_proc

        function kmp_get_affinity_mask_proc(proc, mask) bind(c)
          import
          integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc
          integer (kind=omp_integer_kind), value :: proc
          integer (kind=kmp_affinity_mask_kind) mask
        end function kmp_get_affinity_mask_proc

        function kmp_malloc(size) bind(c)
          import
          integer (kind=kmp_pointer_kind) kmp_malloc
          integer (kind=kmp_size_t_kind), value :: size
        end function kmp_malloc

        function kmp_aligned_malloc(size, alignment) bind(c)
          import
          integer (kind=kmp_pointer_kind) kmp_aligned_malloc
          integer (kind=kmp_size_t_kind), value :: size
          integer (kind=kmp_size_t_kind), value :: alignment
        end function kmp_aligned_malloc

        function kmp_calloc(nelem, elsize) bind(c)
          import
          integer (kind=kmp_pointer_kind) kmp_calloc
          integer (kind=kmp_size_t_kind), value :: nelem
          integer (kind=kmp_size_t_kind), value :: elsize
        end function kmp_calloc

        function kmp_realloc(ptr, size) bind(c)
          import
          integer (kind=kmp_pointer_kind) kmp_realloc
          integer (kind=kmp_pointer_kind), value :: ptr
          integer (kind=kmp_size_t_kind), value :: size
        end function kmp_realloc

        subroutine kmp_free(ptr) bind(c)
          import
          integer (kind=kmp_pointer_kind), value :: ptr
        end subroutine kmp_free

        subroutine kmp_set_warnings_on() bind(c)
        end subroutine kmp_set_warnings_on

        subroutine kmp_set_warnings_off() bind(c)
        end subroutine kmp_set_warnings_off

        subroutine omp_init_lock_with_hint(svar, hint) bind(c)
          import
          integer (kind=omp_lock_kind) svar
          integer (kind=omp_lock_hint_kind), value :: hint
        end subroutine omp_init_lock_with_hint

        subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c)
          import
          integer (kind=omp_nest_lock_kind) nvar
          integer (kind=omp_lock_hint_kind), value :: hint
        end subroutine omp_init_nest_lock_with_hint

        function omp_control_tool(command, modifier, arg) bind(c)
          import
          integer (kind=omp_integer_kind) omp_control_tool
          integer (kind=omp_control_tool_kind), value :: command
          integer (kind=omp_control_tool_kind), value :: modifier
          integer (kind=kmp_pointer_kind), optional :: arg
        end function omp_control_tool

      end interface

!DIR$ IF DEFINED (__INTEL_OFFLOAD)

!DIR$ IF(__INTEL_COMPILER.LT.1900)
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_num_threads
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_dynamic
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nested
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_threads
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_threads
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_num
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_procs
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_parallel
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_in_final
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_dynamic
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_nested
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_thread_limit
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_max_active_levels
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_active_levels
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_level
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_active_level
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_ancestor_thread_num
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_size
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_schedule
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_schedule
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_proc_bind
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtime
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_wtick
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_default_device
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_default_device
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_is_initial_device
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_initial_device
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_devices
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_device_num
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_pause_resource
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_pause_resource_all
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_num_teams
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_team_num
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_nest_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_destroy_nest_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_nest_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_unset_nest_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_test_nest_lock
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_max_task_priority
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_set_affinity_format
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_get_affinity_format
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_display_affinity
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_capture_affinity
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_stacksize_s
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_blocktime
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_serial
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_turnaround
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library_throughput
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_library
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_defaults
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_stacksize_s
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_blocktime
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_library
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_disp_num_buffers
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_max_proc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_create_affinity_mask
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_destroy_affinity_mask
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_affinity_mask_proc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_unset_affinity_mask_proc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_get_affinity_mask_proc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_malloc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_aligned_malloc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_calloc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_realloc
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_free
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_on
!DIR$ ATTRIBUTES OFFLOAD:MIC :: kmp_set_warnings_off
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_lock_with_hint
!DIR$ ATTRIBUTES OFFLOAD:MIC :: omp_init_nest_lock_with_hint
!DIR$ ENDIF

!DIR$ IF(__INTEL_COMPILER.GE.1400)
!$omp declare target(omp_set_num_threads )
!$omp declare target(omp_set_dynamic )
!$omp declare target(omp_set_nested )
!$omp declare target(omp_get_num_threads )
!$omp declare target(omp_get_max_threads )
!$omp declare target(omp_get_thread_num )
!$omp declare target(omp_get_num_procs )
!$omp declare target(omp_in_parallel )
!$omp declare target(omp_in_final )
!$omp declare target(omp_get_dynamic )
!$omp declare target(omp_get_nested )
!$omp declare target(omp_get_thread_limit )
!$omp declare target(omp_set_max_active_levels )
!$omp declare target(omp_get_max_active_levels )
!$omp declare target(omp_get_level )
!$omp declare target(omp_get_active_level )
!$omp declare target(omp_get_ancestor_thread_num )
!$omp declare target(omp_get_team_size )
!$omp declare target(omp_set_schedule )
!$omp declare target(omp_get_schedule )
!$omp declare target(omp_get_proc_bind )
!$omp declare target(omp_get_wtime )
!$omp declare target(omp_get_wtick )
!$omp declare target(omp_get_default_device )
!$omp declare target(omp_set_default_device )
!$omp declare target(omp_is_initial_device )
!$omp declare target(omp_get_initial_device )
!$omp declare target(omp_get_num_devices )
!$omp declare target(omp_get_device_num )
!$omp declare target(omp_pause_resource )
!$omp declare target(omp_pause_resource_all )
!$omp declare target(omp_get_num_teams )
!$omp declare target(omp_get_team_num )
!$omp declare target(omp_init_lock )
!$omp declare target(omp_destroy_lock )
!$omp declare target(omp_set_lock )
!$omp declare target(omp_unset_lock )
!$omp declare target(omp_test_lock )
!$omp declare target(omp_init_nest_lock )
!$omp declare target(omp_destroy_nest_lock )
!$omp declare target(omp_set_nest_lock )
!$omp declare target(omp_unset_nest_lock )
!$omp declare target(omp_test_nest_lock )
!$omp declare target(omp_get_max_task_priority )
!$omp declare target(omp_set_affinity_format )
!$omp declare target(omp_get_affinity_format )
!$omp declare target(omp_display_affinity )
!$omp declare target(omp_capture_affinity )
!$omp declare target(kmp_set_stacksize )
!$omp declare target(kmp_set_stacksize_s )
!$omp declare target(kmp_set_blocktime )
!$omp declare target(kmp_set_library_serial )
!$omp declare target(kmp_set_library_turnaround )
!$omp declare target(kmp_set_library_throughput )
!$omp declare target(kmp_set_library )
!$omp declare target(kmp_set_defaults )
!$omp declare target(kmp_get_stacksize )
!$omp declare target(kmp_get_stacksize_s )
!$omp declare target(kmp_get_blocktime )
!$omp declare target(kmp_get_library )
!$omp declare target(kmp_set_disp_num_buffers )
!$omp declare target(kmp_set_affinity )
!$omp declare target(kmp_get_affinity )
!$omp declare target(kmp_get_affinity_max_proc )
!$omp declare target(kmp_create_affinity_mask )
!$omp declare target(kmp_destroy_affinity_mask )
!$omp declare target(kmp_set_affinity_mask_proc )
!$omp declare target(kmp_unset_affinity_mask_proc )
!$omp declare target(kmp_get_affinity_mask_proc )
!$omp declare target(kmp_malloc )
!$omp declare target(kmp_aligned_malloc )
!$omp declare target(kmp_calloc )
!$omp declare target(kmp_realloc )
!$omp declare target(kmp_free )
!$omp declare target(kmp_set_warnings_on )
!$omp declare target(kmp_set_warnings_off )
!$omp declare target(omp_init_lock_with_hint )
!$omp declare target(omp_init_nest_lock_with_hint )
!DIR$ ENDIF
!DIR$ ENDIF
