first commit
This commit is contained in:
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,436 @@
|
||||
! Copyright (C) 2005-2018 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
|
||||
implicit none
|
||||
integer, parameter :: omp_lock_kind = 4
|
||||
integer, parameter :: omp_nest_lock_kind = 8
|
||||
integer, parameter :: omp_sched_kind = 4
|
||||
integer, parameter :: omp_proc_bind_kind = 4
|
||||
integer, parameter :: omp_lock_hint_kind = 4
|
||||
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_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_lock_hint_none = 0
|
||||
integer (omp_lock_hint_kind), &
|
||||
parameter :: omp_lock_hint_uncontended = 1
|
||||
integer (omp_lock_hint_kind), &
|
||||
parameter :: omp_lock_hint_contended = 2
|
||||
integer (omp_lock_hint_kind), &
|
||||
parameter :: omp_lock_hint_nonspeculative = 4
|
||||
integer (omp_lock_hint_kind), &
|
||||
parameter :: omp_lock_hint_speculative = 8
|
||||
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_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_max_task_priority ()
|
||||
integer (4) :: omp_get_max_task_priority
|
||||
end function omp_get_max_task_priority
|
||||
end interface
|
||||
|
||||
end module omp_lib
|
||||
@@ -0,0 +1,128 @@
|
||||
! Copyright (C) 2005-2018 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/>.
|
||||
|
||||
integer omp_lock_kind, omp_nest_lock_kind, openmp_version
|
||||
parameter (omp_lock_kind = 4)
|
||||
parameter (omp_nest_lock_kind = 8)
|
||||
integer omp_sched_kind
|
||||
parameter (omp_sched_kind = 4)
|
||||
integer (omp_sched_kind) omp_sched_static, omp_sched_dynamic
|
||||
integer (omp_sched_kind) omp_sched_guided, omp_sched_auto
|
||||
parameter (omp_sched_static = 1)
|
||||
parameter (omp_sched_dynamic = 2)
|
||||
parameter (omp_sched_guided = 3)
|
||||
parameter (omp_sched_auto = 4)
|
||||
integer omp_proc_bind_kind
|
||||
parameter (omp_proc_bind_kind = 4)
|
||||
integer (omp_proc_bind_kind) omp_proc_bind_false
|
||||
integer (omp_proc_bind_kind) omp_proc_bind_true
|
||||
integer (omp_proc_bind_kind) omp_proc_bind_master
|
||||
integer (omp_proc_bind_kind) omp_proc_bind_close
|
||||
integer (omp_proc_bind_kind) omp_proc_bind_spread
|
||||
parameter (omp_proc_bind_false = 0)
|
||||
parameter (omp_proc_bind_true = 1)
|
||||
parameter (omp_proc_bind_master = 2)
|
||||
parameter (omp_proc_bind_close = 3)
|
||||
parameter (omp_proc_bind_spread = 4)
|
||||
integer omp_lock_hint_kind
|
||||
parameter (omp_lock_hint_kind = 4)
|
||||
integer (omp_lock_hint_kind) omp_lock_hint_none
|
||||
integer (omp_lock_hint_kind) omp_lock_hint_uncontended
|
||||
integer (omp_lock_hint_kind) omp_lock_hint_contended
|
||||
integer (omp_lock_hint_kind) omp_lock_hint_nonspeculative
|
||||
integer (omp_lock_hint_kind) omp_lock_hint_speculative
|
||||
parameter (omp_lock_hint_none = 0)
|
||||
parameter (omp_lock_hint_uncontended = 1)
|
||||
parameter (omp_lock_hint_contended = 2)
|
||||
parameter (omp_lock_hint_nonspeculative = 4)
|
||||
parameter (omp_lock_hint_speculative = 8)
|
||||
parameter (openmp_version = 201511)
|
||||
|
||||
external omp_init_lock, omp_init_nest_lock
|
||||
external omp_init_lock_with_hint
|
||||
external omp_init_nest_lock_with_hint
|
||||
external omp_destroy_lock, omp_destroy_nest_lock
|
||||
external omp_set_lock, omp_set_nest_lock
|
||||
external omp_unset_lock, omp_unset_nest_lock
|
||||
external omp_set_dynamic, omp_set_nested
|
||||
external omp_set_num_threads
|
||||
|
||||
external omp_get_dynamic, omp_get_nested
|
||||
logical(4) omp_get_dynamic, omp_get_nested
|
||||
external omp_test_lock, omp_in_parallel
|
||||
logical(4) omp_test_lock, omp_in_parallel
|
||||
|
||||
external omp_get_max_threads, omp_get_num_procs
|
||||
integer(4) omp_get_max_threads, omp_get_num_procs
|
||||
external omp_get_num_threads, omp_get_thread_num
|
||||
integer(4) omp_get_num_threads, omp_get_thread_num
|
||||
external omp_test_nest_lock
|
||||
integer(4) omp_test_nest_lock
|
||||
|
||||
external omp_get_wtick, omp_get_wtime
|
||||
double precision omp_get_wtick, omp_get_wtime
|
||||
|
||||
external omp_set_schedule, omp_get_schedule
|
||||
external omp_get_thread_limit, omp_set_max_active_levels
|
||||
external omp_get_max_active_levels, omp_get_level
|
||||
external omp_get_ancestor_thread_num, omp_get_team_size
|
||||
external omp_get_active_level
|
||||
integer(4) omp_get_thread_limit, omp_get_max_active_levels
|
||||
integer(4) omp_get_level, omp_get_ancestor_thread_num
|
||||
integer(4) omp_get_team_size, omp_get_active_level
|
||||
|
||||
external omp_in_final
|
||||
logical(4) omp_in_final
|
||||
|
||||
external omp_get_cancelllation
|
||||
logical(4) omp_get_cancelllation
|
||||
|
||||
external omp_get_proc_bind
|
||||
integer(omp_proc_bind_kind) omp_get_proc_bind
|
||||
|
||||
integer(4) omp_get_num_places
|
||||
external omp_get_num_places
|
||||
integer(4) omp_get_place_num_procs
|
||||
external omp_get_place_num_procs
|
||||
external omp_get_place_proc_ids
|
||||
integer(4) omp_get_place_num
|
||||
external omp_get_place_num
|
||||
integer(4) omp_get_partition_num_places
|
||||
external omp_get_partition_num_places
|
||||
external omp_get_partition_place_nums
|
||||
|
||||
external omp_set_default_device, omp_get_default_device
|
||||
external omp_get_num_devices, omp_get_num_teams
|
||||
external omp_get_team_num
|
||||
integer(4) omp_get_default_device, omp_get_num_devices
|
||||
integer(4) omp_get_num_teams, omp_get_team_num
|
||||
|
||||
external omp_is_initial_device
|
||||
logical(4) omp_is_initial_device
|
||||
external omp_get_initial_device
|
||||
integer(4) omp_get_initial_device
|
||||
|
||||
external omp_get_max_task_priority
|
||||
integer(4) omp_get_max_task_priority
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,968 @@
|
||||
! OpenACC Runtime Library Definitions.
|
||||
|
||||
! Copyright (C) 2014-2018 Free Software Foundation, Inc.
|
||||
|
||||
! Contributed by Tobias Burnus <burnus@net-b.de>
|
||||
! and Mentor Embedded.
|
||||
|
||||
! 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 openacc_kinds
|
||||
use iso_fortran_env, only: int32
|
||||
implicit none
|
||||
|
||||
private :: int32
|
||||
public :: acc_device_kind
|
||||
|
||||
integer, parameter :: acc_device_kind = int32
|
||||
|
||||
public :: acc_device_none, acc_device_default, acc_device_host
|
||||
public :: acc_device_not_host, acc_device_nvidia
|
||||
|
||||
! Keep in sync with include/gomp-constants.h.
|
||||
integer (acc_device_kind), parameter :: acc_device_none = 0
|
||||
integer (acc_device_kind), parameter :: acc_device_default = 1
|
||||
integer (acc_device_kind), parameter :: acc_device_host = 2
|
||||
! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3 removed.
|
||||
integer (acc_device_kind), parameter :: acc_device_not_host = 4
|
||||
integer (acc_device_kind), parameter :: acc_device_nvidia = 5
|
||||
|
||||
public :: acc_handle_kind
|
||||
|
||||
integer, parameter :: acc_handle_kind = int32
|
||||
|
||||
public :: acc_async_noval, acc_async_sync
|
||||
|
||||
! Keep in sync with include/gomp-constants.h.
|
||||
integer (acc_handle_kind), parameter :: acc_async_noval = -1
|
||||
integer (acc_handle_kind), parameter :: acc_async_sync = -2
|
||||
|
||||
end module
|
||||
|
||||
module openacc_internal
|
||||
use openacc_kinds
|
||||
implicit none
|
||||
|
||||
interface
|
||||
function acc_get_num_devices_h (d)
|
||||
import
|
||||
integer acc_get_num_devices_h
|
||||
integer (acc_device_kind) d
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_type_h (d)
|
||||
import
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_type_h ()
|
||||
import
|
||||
integer (acc_device_kind) acc_get_device_type_h
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_num_h (n, d)
|
||||
import
|
||||
integer n
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_num_h (d)
|
||||
import
|
||||
integer acc_get_device_num_h
|
||||
integer (acc_device_kind) d
|
||||
end function
|
||||
|
||||
function acc_async_test_h (a)
|
||||
logical acc_async_test_h
|
||||
integer a
|
||||
end function
|
||||
|
||||
function acc_async_test_all_h ()
|
||||
logical acc_async_test_all_h
|
||||
end function
|
||||
|
||||
subroutine acc_wait_h (a)
|
||||
integer a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_async_h (a1, a2)
|
||||
integer a1, a2
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_h ()
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_async_h (a)
|
||||
integer a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_init_h (d)
|
||||
import
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
|
||||
subroutine acc_shutdown_h (d)
|
||||
import
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
|
||||
function acc_on_device_h (d)
|
||||
import
|
||||
integer (acc_device_kind) d
|
||||
logical acc_on_device_h
|
||||
end function
|
||||
|
||||
subroutine acc_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
|
||||
function acc_is_present_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
logical acc_is_present_32_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end function
|
||||
|
||||
function acc_is_present_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
logical acc_is_present_64_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end function
|
||||
|
||||
function acc_is_present_array_h (a)
|
||||
logical acc_is_present_array_h
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface
|
||||
function acc_get_num_devices_l (d) &
|
||||
bind (C, name = "acc_get_num_devices")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_get_num_devices_l
|
||||
integer (c_int), value :: d
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_type_l (d) &
|
||||
bind (C, name = "acc_set_device_type")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: d
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_type_l () &
|
||||
bind (C, name = "acc_get_device_type")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_get_device_type_l
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_num_l (n, d) &
|
||||
bind (C, name = "acc_set_device_num")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: n, d
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_num_l (d) &
|
||||
bind (C, name = "acc_get_device_num")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_get_device_num_l
|
||||
integer (c_int), value :: d
|
||||
end function
|
||||
|
||||
function acc_async_test_l (a) &
|
||||
bind (C, name = "acc_async_test")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_async_test_l
|
||||
integer (c_int), value :: a
|
||||
end function
|
||||
|
||||
function acc_async_test_all_l () &
|
||||
bind (C, name = "acc_async_test_all")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_async_test_all_l
|
||||
end function
|
||||
|
||||
subroutine acc_wait_l (a) &
|
||||
bind (C, name = "acc_wait")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_async_l (a1, a2) &
|
||||
bind (C, name = "acc_wait_async")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: a1, a2
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_l () &
|
||||
bind (C, name = "acc_wait_all")
|
||||
use iso_c_binding, only: c_int
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_async_l (a) &
|
||||
bind (C, name = "acc_wait_all_async")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: a
|
||||
end subroutine
|
||||
|
||||
subroutine acc_init_l (d) &
|
||||
bind (C, name = "acc_init")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: d
|
||||
end subroutine
|
||||
|
||||
subroutine acc_shutdown_l (d) &
|
||||
bind (C, name = "acc_shutdown")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int), value :: d
|
||||
end subroutine
|
||||
|
||||
function acc_on_device_l (d) &
|
||||
bind (C, name = "acc_on_device")
|
||||
use iso_c_binding, only: c_int
|
||||
integer (c_int) :: acc_on_device_l
|
||||
integer (c_int), value :: d
|
||||
end function
|
||||
|
||||
subroutine acc_copyin_l (a, len) &
|
||||
bind (C, name = "acc_copyin")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_l (a, len) &
|
||||
bind (C, name = "acc_present_or_copyin")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_l (a, len) &
|
||||
bind (C, name = "acc_create")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_l (a, len) &
|
||||
bind (C, name = "acc_present_or_create")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_l (a, len) &
|
||||
bind (C, name = "acc_copyout")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_l (a, len) &
|
||||
bind (C, name = "acc_delete")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_l (a, len) &
|
||||
bind (C, name = "acc_update_device")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_l (a, len) &
|
||||
bind (C, name = "acc_update_self")
|
||||
use iso_c_binding, only: c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end subroutine
|
||||
|
||||
function acc_is_present_l (a, len) &
|
||||
bind (C, name = "acc_is_present")
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
integer (c_int32_t) :: acc_is_present_l
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_size_t), value :: len
|
||||
end function
|
||||
end interface
|
||||
end module
|
||||
|
||||
module openacc
|
||||
use openacc_kinds
|
||||
use openacc_internal
|
||||
implicit none
|
||||
|
||||
public :: openacc_version
|
||||
|
||||
public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type
|
||||
public :: acc_set_device_num, acc_get_device_num, acc_async_test
|
||||
public :: acc_async_test_all
|
||||
public :: acc_wait, acc_async_wait, acc_wait_async
|
||||
public :: acc_wait_all, acc_async_wait_all, acc_wait_all_async
|
||||
public :: acc_init, acc_shutdown, acc_on_device
|
||||
public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create
|
||||
public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete
|
||||
public :: acc_update_device, acc_update_self, acc_is_present
|
||||
|
||||
integer, parameter :: openacc_version = 201306
|
||||
|
||||
interface acc_get_num_devices
|
||||
procedure :: acc_get_num_devices_h
|
||||
end interface
|
||||
|
||||
interface acc_set_device_type
|
||||
procedure :: acc_set_device_type_h
|
||||
end interface
|
||||
|
||||
interface acc_get_device_type
|
||||
procedure :: acc_get_device_type_h
|
||||
end interface
|
||||
|
||||
interface acc_set_device_num
|
||||
procedure :: acc_set_device_num_h
|
||||
end interface
|
||||
|
||||
interface acc_get_device_num
|
||||
procedure :: acc_get_device_num_h
|
||||
end interface
|
||||
|
||||
interface acc_async_test
|
||||
procedure :: acc_async_test_h
|
||||
end interface
|
||||
|
||||
interface acc_async_test_all
|
||||
procedure :: acc_async_test_all_h
|
||||
end interface
|
||||
|
||||
interface acc_wait
|
||||
procedure :: acc_wait_h
|
||||
end interface
|
||||
|
||||
! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
|
||||
interface acc_async_wait
|
||||
procedure :: acc_wait_h
|
||||
end interface
|
||||
|
||||
interface acc_wait_async
|
||||
procedure :: acc_wait_async_h
|
||||
end interface
|
||||
|
||||
interface acc_wait_all
|
||||
procedure :: acc_wait_all_h
|
||||
end interface
|
||||
|
||||
! acc_async_wait_all is an OpenACC 1.0 compatibility name for acc_wait_all.
|
||||
interface acc_async_wait_all
|
||||
procedure :: acc_wait_all_h
|
||||
end interface
|
||||
|
||||
interface acc_wait_all_async
|
||||
procedure :: acc_wait_all_async_h
|
||||
end interface
|
||||
|
||||
interface acc_init
|
||||
procedure :: acc_init_h
|
||||
end interface
|
||||
|
||||
interface acc_shutdown
|
||||
procedure :: acc_shutdown_h
|
||||
end interface
|
||||
|
||||
interface acc_on_device
|
||||
procedure :: acc_on_device_h
|
||||
end interface
|
||||
|
||||
! acc_malloc: Only available in C/C++
|
||||
! acc_free: Only available in C/C++
|
||||
|
||||
! As vendor extension, the following code supports both 32bit and 64bit
|
||||
! arguments for "size"; the OpenACC standard only permits default-kind
|
||||
! integers, which are of kind 4 (i.e. 32 bits).
|
||||
! Additionally, the two-argument version also takes arrays as argument.
|
||||
! and the one argument version also scalars. Note that the code assumes
|
||||
! that the arrays are contiguous.
|
||||
|
||||
interface acc_copyin
|
||||
procedure :: acc_copyin_32_h
|
||||
procedure :: acc_copyin_64_h
|
||||
procedure :: acc_copyin_array_h
|
||||
end interface
|
||||
|
||||
interface acc_present_or_copyin
|
||||
procedure :: acc_present_or_copyin_32_h
|
||||
procedure :: acc_present_or_copyin_64_h
|
||||
procedure :: acc_present_or_copyin_array_h
|
||||
end interface
|
||||
|
||||
interface acc_pcopyin
|
||||
procedure :: acc_present_or_copyin_32_h
|
||||
procedure :: acc_present_or_copyin_64_h
|
||||
procedure :: acc_present_or_copyin_array_h
|
||||
end interface
|
||||
|
||||
interface acc_create
|
||||
procedure :: acc_create_32_h
|
||||
procedure :: acc_create_64_h
|
||||
procedure :: acc_create_array_h
|
||||
end interface
|
||||
|
||||
interface acc_present_or_create
|
||||
procedure :: acc_present_or_create_32_h
|
||||
procedure :: acc_present_or_create_64_h
|
||||
procedure :: acc_present_or_create_array_h
|
||||
end interface
|
||||
|
||||
interface acc_pcreate
|
||||
procedure :: acc_present_or_create_32_h
|
||||
procedure :: acc_present_or_create_64_h
|
||||
procedure :: acc_present_or_create_array_h
|
||||
end interface
|
||||
|
||||
interface acc_copyout
|
||||
procedure :: acc_copyout_32_h
|
||||
procedure :: acc_copyout_64_h
|
||||
procedure :: acc_copyout_array_h
|
||||
end interface
|
||||
|
||||
interface acc_delete
|
||||
procedure :: acc_delete_32_h
|
||||
procedure :: acc_delete_64_h
|
||||
procedure :: acc_delete_array_h
|
||||
end interface
|
||||
|
||||
interface acc_update_device
|
||||
procedure :: acc_update_device_32_h
|
||||
procedure :: acc_update_device_64_h
|
||||
procedure :: acc_update_device_array_h
|
||||
end interface
|
||||
|
||||
interface acc_update_self
|
||||
procedure :: acc_update_self_32_h
|
||||
procedure :: acc_update_self_64_h
|
||||
procedure :: acc_update_self_array_h
|
||||
end interface
|
||||
|
||||
! acc_map_data: Only available in C/C++
|
||||
! acc_unmap_data: Only available in C/C++
|
||||
! acc_deviceptr: Only available in C/C++
|
||||
! acc_hostptr: Only available in C/C++
|
||||
|
||||
interface acc_is_present
|
||||
procedure :: acc_is_present_32_h
|
||||
procedure :: acc_is_present_64_h
|
||||
procedure :: acc_is_present_array_h
|
||||
end interface
|
||||
|
||||
! acc_memcpy_to_device: Only available in C/C++
|
||||
! acc_memcpy_from_device: Only available in C/C++
|
||||
|
||||
end module
|
||||
|
||||
function acc_get_num_devices_h (d)
|
||||
use openacc_internal, only: acc_get_num_devices_l
|
||||
use openacc_kinds
|
||||
integer acc_get_num_devices_h
|
||||
integer (acc_device_kind) d
|
||||
acc_get_num_devices_h = acc_get_num_devices_l (d)
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_type_h (d)
|
||||
use openacc_internal, only: acc_set_device_type_l
|
||||
use openacc_kinds
|
||||
integer (acc_device_kind) d
|
||||
call acc_set_device_type_l (d)
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_type_h ()
|
||||
use openacc_internal, only: acc_get_device_type_l
|
||||
use openacc_kinds
|
||||
integer (acc_device_kind) acc_get_device_type_h
|
||||
acc_get_device_type_h = acc_get_device_type_l ()
|
||||
end function
|
||||
|
||||
subroutine acc_set_device_num_h (n, d)
|
||||
use openacc_internal, only: acc_set_device_num_l
|
||||
use openacc_kinds
|
||||
integer n
|
||||
integer (acc_device_kind) d
|
||||
call acc_set_device_num_l (n, d)
|
||||
end subroutine
|
||||
|
||||
function acc_get_device_num_h (d)
|
||||
use openacc_internal, only: acc_get_device_num_l
|
||||
use openacc_kinds
|
||||
integer acc_get_device_num_h
|
||||
integer (acc_device_kind) d
|
||||
acc_get_device_num_h = acc_get_device_num_l (d)
|
||||
end function
|
||||
|
||||
function acc_async_test_h (a)
|
||||
use openacc_internal, only: acc_async_test_l
|
||||
logical acc_async_test_h
|
||||
integer a
|
||||
if (acc_async_test_l (a) .eq. 1) then
|
||||
acc_async_test_h = .TRUE.
|
||||
else
|
||||
acc_async_test_h = .FALSE.
|
||||
end if
|
||||
end function
|
||||
|
||||
function acc_async_test_all_h ()
|
||||
use openacc_internal, only: acc_async_test_all_l
|
||||
logical acc_async_test_all_h
|
||||
if (acc_async_test_all_l () .eq. 1) then
|
||||
acc_async_test_all_h = .TRUE.
|
||||
else
|
||||
acc_async_test_all_h = .FALSE.
|
||||
end if
|
||||
end function
|
||||
|
||||
subroutine acc_wait_h (a)
|
||||
use openacc_internal, only: acc_wait_l
|
||||
integer a
|
||||
call acc_wait_l (a)
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_async_h (a1, a2)
|
||||
use openacc_internal, only: acc_wait_async_l
|
||||
integer a1, a2
|
||||
call acc_wait_async_l (a1, a2)
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_h ()
|
||||
use openacc_internal, only: acc_wait_all_l
|
||||
call acc_wait_all_l ()
|
||||
end subroutine
|
||||
|
||||
subroutine acc_wait_all_async_h (a)
|
||||
use openacc_internal, only: acc_wait_all_async_l
|
||||
integer a
|
||||
call acc_wait_all_async_l (a)
|
||||
end subroutine
|
||||
|
||||
subroutine acc_init_h (d)
|
||||
use openacc_internal, only: acc_init_l
|
||||
use openacc_kinds
|
||||
integer (acc_device_kind) d
|
||||
call acc_init_l (d)
|
||||
end subroutine
|
||||
|
||||
subroutine acc_shutdown_h (d)
|
||||
use openacc_internal, only: acc_shutdown_l
|
||||
use openacc_kinds
|
||||
integer (acc_device_kind) d
|
||||
call acc_shutdown_l (d)
|
||||
end subroutine
|
||||
|
||||
function acc_on_device_h (d)
|
||||
use openacc_internal, only: acc_on_device_l
|
||||
use openacc_kinds
|
||||
integer (acc_device_kind) d
|
||||
logical acc_on_device_h
|
||||
if (acc_on_device_l (d) .eq. 1) then
|
||||
acc_on_device_h = .TRUE.
|
||||
else
|
||||
acc_on_device_h = .FALSE.
|
||||
end if
|
||||
end function
|
||||
|
||||
subroutine acc_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_copyin_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_copyin_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_copyin_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_copyin_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_array_h (a)
|
||||
use openacc_internal, only: acc_copyin_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_copyin_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_present_or_copyin_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_present_or_copyin_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_array_h (a)
|
||||
use openacc_internal, only: acc_present_or_copyin_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_present_or_copyin_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_create_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_create_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_create_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_create_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_array_h (a)
|
||||
use openacc_internal, only: acc_create_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_create_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_present_or_create_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_present_or_create_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_present_or_create_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_present_or_create_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_array_h (a)
|
||||
use openacc_internal, only: acc_present_or_create_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_present_or_create_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_copyout_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_copyout_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_copyout_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_copyout_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_array_h (a)
|
||||
use openacc_internal, only: acc_copyout_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_copyout_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_delete_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_delete_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_delete_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_delete_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_array_h (a)
|
||||
use openacc_internal, only: acc_delete_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_delete_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_update_device_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_update_device_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_update_device_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_update_device_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_array_h (a)
|
||||
use openacc_internal, only: acc_update_device_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_update_device_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_update_self_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
call acc_update_self_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_update_self_l
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
call acc_update_self_l (a, int (len, kind = c_size_t))
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_array_h (a)
|
||||
use openacc_internal, only: acc_update_self_l
|
||||
type (*), dimension (..), contiguous :: a
|
||||
call acc_update_self_l (a, sizeof (a))
|
||||
end subroutine
|
||||
|
||||
function acc_is_present_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t, c_size_t
|
||||
use openacc_internal, only: acc_is_present_l
|
||||
logical acc_is_present_32_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
|
||||
acc_is_present_32_h = .TRUE.
|
||||
else
|
||||
acc_is_present_32_h = .FALSE.
|
||||
end if
|
||||
end function
|
||||
|
||||
function acc_is_present_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t, c_size_t
|
||||
use openacc_internal, only: acc_is_present_l
|
||||
logical acc_is_present_64_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
|
||||
acc_is_present_64_h = .TRUE.
|
||||
else
|
||||
acc_is_present_64_h = .FALSE.
|
||||
end if
|
||||
end function
|
||||
|
||||
function acc_is_present_array_h (a)
|
||||
use openacc_internal, only: acc_is_present_l
|
||||
logical acc_is_present_array_h
|
||||
type (*), dimension (..), contiguous :: a
|
||||
acc_is_present_array_h = acc_is_present_l (a, sizeof (a)) == 1
|
||||
end function
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,365 @@
|
||||
! OpenACC Runtime Library Definitions. -*- mode: fortran -*-
|
||||
|
||||
! Copyright (C) 2014-2018 Free Software Foundation, Inc.
|
||||
|
||||
! Contributed by Tobias Burnus <burnus@net-b.de>
|
||||
! and Mentor Embedded.
|
||||
|
||||
! 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/>.
|
||||
|
||||
! NOTE: Due to the use of dimension (..), the code only works when compiled
|
||||
! with -std=f2008ts/gnu/legacy but not with other standard settings.
|
||||
! Alternatively, the user can use the module version, which permits
|
||||
! compilation with -std=f95.
|
||||
|
||||
integer, parameter :: acc_device_kind = 4
|
||||
|
||||
! Keep in sync with include/gomp-constants.h.
|
||||
integer (acc_device_kind), parameter :: acc_device_none = 0
|
||||
integer (acc_device_kind), parameter :: acc_device_default = 1
|
||||
integer (acc_device_kind), parameter :: acc_device_host = 2
|
||||
! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
|
||||
! removed.
|
||||
integer (acc_device_kind), parameter :: acc_device_not_host = 4
|
||||
integer (acc_device_kind), parameter :: acc_device_nvidia = 5
|
||||
|
||||
integer, parameter :: acc_handle_kind = 4
|
||||
|
||||
! Keep in sync with include/gomp-constants.h.
|
||||
integer (acc_handle_kind), parameter :: acc_async_noval = -1
|
||||
integer (acc_handle_kind), parameter :: acc_async_sync = -2
|
||||
|
||||
integer, parameter :: openacc_version = 201306
|
||||
|
||||
interface acc_get_num_devices
|
||||
function acc_get_num_devices_h (d)
|
||||
import acc_device_kind
|
||||
integer acc_get_num_devices_h
|
||||
integer (acc_device_kind) d
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface acc_set_device_type
|
||||
subroutine acc_set_device_type_h (d)
|
||||
import acc_device_kind
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_get_device_type
|
||||
function acc_get_device_type_h ()
|
||||
import acc_device_kind
|
||||
integer (acc_device_kind) acc_get_device_type_h
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface acc_set_device_num
|
||||
subroutine acc_set_device_num_h (n, d)
|
||||
import acc_device_kind
|
||||
integer n
|
||||
integer (acc_device_kind) d
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_get_device_num
|
||||
function acc_get_device_num_h (d)
|
||||
import acc_device_kind
|
||||
integer acc_get_device_num_h
|
||||
integer (acc_device_kind) d
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface acc_async_test
|
||||
function acc_async_test_h (a)
|
||||
logical acc_async_test_h
|
||||
integer a
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface acc_async_test_all
|
||||
function acc_async_test_all_h ()
|
||||
logical acc_async_test_all_h
|
||||
end function
|
||||
end interface
|
||||
|
||||
interface acc_wait
|
||||
subroutine acc_wait_h (a)
|
||||
integer a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
|
||||
interface acc_async_wait
|
||||
procedure :: acc_wait_h
|
||||
end interface
|
||||
|
||||
interface acc_wait_async
|
||||
subroutine acc_wait_async_h (a1, a2)
|
||||
integer a1, a2
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_wait_all
|
||||
subroutine acc_wait_all_h ()
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
! acc_async_wait_all is an OpenACC 1.0 compatibility name for
|
||||
! acc_wait_all.
|
||||
interface acc_async_wait_all
|
||||
procedure :: acc_wait_all_h
|
||||
end interface
|
||||
|
||||
interface acc_wait_all_async
|
||||
subroutine acc_wait_all_async_h (a)
|
||||
integer a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_init
|
||||
subroutine acc_init_h (devicetype)
|
||||
import acc_device_kind
|
||||
integer (acc_device_kind) devicetype
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_shutdown
|
||||
subroutine acc_shutdown_h (devicetype)
|
||||
import acc_device_kind
|
||||
integer (acc_device_kind) devicetype
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_on_device
|
||||
function acc_on_device_h (devicetype)
|
||||
import acc_device_kind
|
||||
logical acc_on_device_h
|
||||
integer (acc_device_kind) devicetype
|
||||
end function
|
||||
end interface
|
||||
|
||||
! acc_malloc: Only available in C/C++
|
||||
! acc_free: Only available in C/C++
|
||||
|
||||
interface acc_copyin
|
||||
subroutine acc_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyin_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_present_or_copyin
|
||||
subroutine acc_present_or_copyin_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_copyin_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_pcopyin
|
||||
procedure :: acc_present_or_copyin_32_h
|
||||
procedure :: acc_present_or_copyin_64_h
|
||||
procedure :: acc_present_or_copyin_array_h
|
||||
end interface
|
||||
|
||||
interface acc_create
|
||||
subroutine acc_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_create_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_present_or_create
|
||||
subroutine acc_present_or_create_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_present_or_create_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_pcreate
|
||||
procedure :: acc_present_or_create_32_h
|
||||
procedure :: acc_present_or_create_64_h
|
||||
procedure :: acc_present_or_create_array_h
|
||||
end interface
|
||||
|
||||
interface acc_copyout
|
||||
subroutine acc_copyout_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_copyout_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_delete
|
||||
subroutine acc_delete_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_delete_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_update_device
|
||||
subroutine acc_update_device_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_device_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
interface acc_update_self
|
||||
subroutine acc_update_self_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end subroutine
|
||||
|
||||
subroutine acc_update_self_array_h (a)
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end subroutine
|
||||
end interface
|
||||
|
||||
! acc_map_data: Only available in C/C++
|
||||
! acc_unmap_data: Only available in C/C++
|
||||
! acc_deviceptr: Only available in C/C++
|
||||
! acc_hostptr: Only available in C/C++
|
||||
|
||||
interface acc_is_present
|
||||
function acc_is_present_32_h (a, len)
|
||||
use iso_c_binding, only: c_int32_t
|
||||
logical acc_is_present_32_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int32_t) len
|
||||
end function
|
||||
|
||||
function acc_is_present_64_h (a, len)
|
||||
use iso_c_binding, only: c_int64_t
|
||||
logical acc_is_present_64_h
|
||||
!GCC$ ATTRIBUTES NO_ARG_CHECK :: a
|
||||
type (*), dimension (*) :: a
|
||||
integer (c_int64_t) len
|
||||
end function
|
||||
|
||||
function acc_is_present_array_h (a)
|
||||
logical acc_is_present_array_h
|
||||
type (*), dimension (..), contiguous :: a
|
||||
end function
|
||||
end interface
|
||||
|
||||
! acc_memcpy_to_device: Only available in C/C++
|
||||
! acc_memcpy_from_device: Only available in C/C++
|
||||
@@ -0,0 +1,14 @@
|
||||
This README file is copied into the directory for GCC-only header files
|
||||
when fixincludes is run by the makefile for GCC.
|
||||
|
||||
Many of the files in this directory were automatically edited from the
|
||||
standard system header files by the fixincludes process. They are
|
||||
system-specific, and will not work on any other kind of system. They
|
||||
are also not part of GCC. The reason we have to do this is because
|
||||
GCC requires ANSI C headers and many vendors supply ANSI-incompatible
|
||||
headers.
|
||||
|
||||
Because this is an automated process, sometimes headers get "fixed"
|
||||
that do not, strictly speaking, need a fix. As long as nothing is broken
|
||||
by the process, it is just an unfortunate collateral inconvenience.
|
||||
We would like to rectify it, if it is not "too inconvenient".
|
||||
@@ -0,0 +1,197 @@
|
||||
/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/* This administrivia gets added to the beginning of limits.h
|
||||
if the system has its own version of limits.h. */
|
||||
|
||||
/* We use _GCC_LIMITS_H_ because we want this not to match
|
||||
any macros that the system's limits.h uses for its own purposes. */
|
||||
#ifndef _GCC_LIMITS_H_ /* Terminated in limity.h. */
|
||||
#define _GCC_LIMITS_H_
|
||||
|
||||
#ifndef _LIBC_LIMITS_H_
|
||||
/* Use "..." so that we find syslimits.h only in this same directory. */
|
||||
#include "syslimits.h"
|
||||
#endif
|
||||
/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
#ifndef _LIMITS_H___
|
||||
#define _LIMITS_H___
|
||||
|
||||
/* Number of bits in a `char'. */
|
||||
#undef CHAR_BIT
|
||||
#define CHAR_BIT __CHAR_BIT__
|
||||
|
||||
/* Maximum length of a multibyte character. */
|
||||
#ifndef MB_LEN_MAX
|
||||
#define MB_LEN_MAX 1
|
||||
#endif
|
||||
|
||||
/* Minimum and maximum values a `signed char' can hold. */
|
||||
#undef SCHAR_MIN
|
||||
#define SCHAR_MIN (-SCHAR_MAX - 1)
|
||||
#undef SCHAR_MAX
|
||||
#define SCHAR_MAX __SCHAR_MAX__
|
||||
|
||||
/* Maximum value an `unsigned char' can hold. (Minimum is 0). */
|
||||
#undef UCHAR_MAX
|
||||
#if __SCHAR_MAX__ == __INT_MAX__
|
||||
# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
|
||||
#else
|
||||
# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
|
||||
#endif
|
||||
|
||||
/* Minimum and maximum values a `char' can hold. */
|
||||
#ifdef __CHAR_UNSIGNED__
|
||||
# undef CHAR_MIN
|
||||
# if __SCHAR_MAX__ == __INT_MAX__
|
||||
# define CHAR_MIN 0U
|
||||
# else
|
||||
# define CHAR_MIN 0
|
||||
# endif
|
||||
# undef CHAR_MAX
|
||||
# define CHAR_MAX UCHAR_MAX
|
||||
#else
|
||||
# undef CHAR_MIN
|
||||
# define CHAR_MIN SCHAR_MIN
|
||||
# undef CHAR_MAX
|
||||
# define CHAR_MAX SCHAR_MAX
|
||||
#endif
|
||||
|
||||
/* Minimum and maximum values a `signed short int' can hold. */
|
||||
#undef SHRT_MIN
|
||||
#define SHRT_MIN (-SHRT_MAX - 1)
|
||||
#undef SHRT_MAX
|
||||
#define SHRT_MAX __SHRT_MAX__
|
||||
|
||||
/* Maximum value an `unsigned short int' can hold. (Minimum is 0). */
|
||||
#undef USHRT_MAX
|
||||
#if __SHRT_MAX__ == __INT_MAX__
|
||||
# define USHRT_MAX (SHRT_MAX * 2U + 1U)
|
||||
#else
|
||||
# define USHRT_MAX (SHRT_MAX * 2 + 1)
|
||||
#endif
|
||||
|
||||
/* Minimum and maximum values a `signed int' can hold. */
|
||||
#undef INT_MIN
|
||||
#define INT_MIN (-INT_MAX - 1)
|
||||
#undef INT_MAX
|
||||
#define INT_MAX __INT_MAX__
|
||||
|
||||
/* Maximum value an `unsigned int' can hold. (Minimum is 0). */
|
||||
#undef UINT_MAX
|
||||
#define UINT_MAX (INT_MAX * 2U + 1U)
|
||||
|
||||
/* Minimum and maximum values a `signed long int' can hold.
|
||||
(Same as `int'). */
|
||||
#undef LONG_MIN
|
||||
#define LONG_MIN (-LONG_MAX - 1L)
|
||||
#undef LONG_MAX
|
||||
#define LONG_MAX __LONG_MAX__
|
||||
|
||||
/* Maximum value an `unsigned long int' can hold. (Minimum is 0). */
|
||||
#undef ULONG_MAX
|
||||
#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
|
||||
|
||||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||
/* Minimum and maximum values a `signed long long int' can hold. */
|
||||
# undef LLONG_MIN
|
||||
# define LLONG_MIN (-LLONG_MAX - 1LL)
|
||||
# undef LLONG_MAX
|
||||
# define LLONG_MAX __LONG_LONG_MAX__
|
||||
|
||||
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
|
||||
# undef ULLONG_MAX
|
||||
# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
|
||||
#endif
|
||||
|
||||
#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
|
||||
/* Minimum and maximum values a `signed long long int' can hold. */
|
||||
# undef LONG_LONG_MIN
|
||||
# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
|
||||
# undef LONG_LONG_MAX
|
||||
# define LONG_LONG_MAX __LONG_LONG_MAX__
|
||||
|
||||
/* Maximum value an `unsigned long long int' can hold. (Minimum is 0). */
|
||||
# undef ULONG_LONG_MAX
|
||||
# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
|
||||
#endif
|
||||
|
||||
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
|
||||
/* TS 18661-1 widths of integer types. */
|
||||
# undef CHAR_WIDTH
|
||||
# define CHAR_WIDTH __SCHAR_WIDTH__
|
||||
# undef SCHAR_WIDTH
|
||||
# define SCHAR_WIDTH __SCHAR_WIDTH__
|
||||
# undef UCHAR_WIDTH
|
||||
# define UCHAR_WIDTH __SCHAR_WIDTH__
|
||||
# undef SHRT_WIDTH
|
||||
# define SHRT_WIDTH __SHRT_WIDTH__
|
||||
# undef USHRT_WIDTH
|
||||
# define USHRT_WIDTH __SHRT_WIDTH__
|
||||
# undef INT_WIDTH
|
||||
# define INT_WIDTH __INT_WIDTH__
|
||||
# undef UINT_WIDTH
|
||||
# define UINT_WIDTH __INT_WIDTH__
|
||||
# undef LONG_WIDTH
|
||||
# define LONG_WIDTH __LONG_WIDTH__
|
||||
# undef ULONG_WIDTH
|
||||
# define ULONG_WIDTH __LONG_WIDTH__
|
||||
# undef LLONG_WIDTH
|
||||
# define LLONG_WIDTH __LONG_LONG_WIDTH__
|
||||
# undef ULLONG_WIDTH
|
||||
# define ULLONG_WIDTH __LONG_LONG_WIDTH__
|
||||
#endif
|
||||
|
||||
#endif /* _LIMITS_H___ */
|
||||
/* This administrivia gets added to the end of limits.h
|
||||
if the system has its own version of limits.h. */
|
||||
|
||||
#else /* not _GCC_LIMITS_H_ */
|
||||
|
||||
#ifdef _GCC_NEXT_LIMITS_H
|
||||
#include_next <limits.h> /* recurse down to the real one */
|
||||
#endif
|
||||
|
||||
#endif /* not _GCC_LIMITS_H_ */
|
||||
@@ -0,0 +1,8 @@
|
||||
/* syslimits.h stands for the system's own limits.h file.
|
||||
If we can use it ok unmodified, then we install this text.
|
||||
If fixincludes fixes it, then the fixed version is installed
|
||||
instead of this text. */
|
||||
|
||||
#define _GCC_NEXT_LIMITS_H /* tell gcc's limits.h to recurse */
|
||||
#include_next <limits.h>
|
||||
#undef _GCC_NEXT_LIMITS_H
|
||||
@@ -0,0 +1,506 @@
|
||||
/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 5.2.4.2.2 Characteristics of floating types <float.h>
|
||||
*/
|
||||
|
||||
#ifndef _FLOAT_H___
|
||||
#define _FLOAT_H___
|
||||
|
||||
/* Radix of exponent representation, b. */
|
||||
#undef FLT_RADIX
|
||||
#define FLT_RADIX __FLT_RADIX__
|
||||
|
||||
/* Number of base-FLT_RADIX digits in the significand, p. */
|
||||
#undef FLT_MANT_DIG
|
||||
#undef DBL_MANT_DIG
|
||||
#undef LDBL_MANT_DIG
|
||||
#define FLT_MANT_DIG __FLT_MANT_DIG__
|
||||
#define DBL_MANT_DIG __DBL_MANT_DIG__
|
||||
#define LDBL_MANT_DIG __LDBL_MANT_DIG__
|
||||
|
||||
/* Number of decimal digits, q, such that any floating-point number with q
|
||||
decimal digits can be rounded into a floating-point number with p radix b
|
||||
digits and back again without change to the q decimal digits,
|
||||
|
||||
p * log10(b) if b is a power of 10
|
||||
floor((p - 1) * log10(b)) otherwise
|
||||
*/
|
||||
#undef FLT_DIG
|
||||
#undef DBL_DIG
|
||||
#undef LDBL_DIG
|
||||
#define FLT_DIG __FLT_DIG__
|
||||
#define DBL_DIG __DBL_DIG__
|
||||
#define LDBL_DIG __LDBL_DIG__
|
||||
|
||||
/* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */
|
||||
#undef FLT_MIN_EXP
|
||||
#undef DBL_MIN_EXP
|
||||
#undef LDBL_MIN_EXP
|
||||
#define FLT_MIN_EXP __FLT_MIN_EXP__
|
||||
#define DBL_MIN_EXP __DBL_MIN_EXP__
|
||||
#define LDBL_MIN_EXP __LDBL_MIN_EXP__
|
||||
|
||||
/* Minimum negative integer such that 10 raised to that power is in the
|
||||
range of normalized floating-point numbers,
|
||||
|
||||
ceil(log10(b) * (emin - 1))
|
||||
*/
|
||||
#undef FLT_MIN_10_EXP
|
||||
#undef DBL_MIN_10_EXP
|
||||
#undef LDBL_MIN_10_EXP
|
||||
#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__
|
||||
#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__
|
||||
#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__
|
||||
|
||||
/* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax. */
|
||||
#undef FLT_MAX_EXP
|
||||
#undef DBL_MAX_EXP
|
||||
#undef LDBL_MAX_EXP
|
||||
#define FLT_MAX_EXP __FLT_MAX_EXP__
|
||||
#define DBL_MAX_EXP __DBL_MAX_EXP__
|
||||
#define LDBL_MAX_EXP __LDBL_MAX_EXP__
|
||||
|
||||
/* Maximum integer such that 10 raised to that power is in the range of
|
||||
representable finite floating-point numbers,
|
||||
|
||||
floor(log10((1 - b**-p) * b**emax))
|
||||
*/
|
||||
#undef FLT_MAX_10_EXP
|
||||
#undef DBL_MAX_10_EXP
|
||||
#undef LDBL_MAX_10_EXP
|
||||
#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__
|
||||
#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__
|
||||
#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__
|
||||
|
||||
/* Maximum representable finite floating-point number,
|
||||
|
||||
(1 - b**-p) * b**emax
|
||||
*/
|
||||
#undef FLT_MAX
|
||||
#undef DBL_MAX
|
||||
#undef LDBL_MAX
|
||||
#define FLT_MAX __FLT_MAX__
|
||||
#define DBL_MAX __DBL_MAX__
|
||||
#define LDBL_MAX __LDBL_MAX__
|
||||
|
||||
/* The difference between 1 and the least value greater than 1 that is
|
||||
representable in the given floating point type, b**1-p. */
|
||||
#undef FLT_EPSILON
|
||||
#undef DBL_EPSILON
|
||||
#undef LDBL_EPSILON
|
||||
#define FLT_EPSILON __FLT_EPSILON__
|
||||
#define DBL_EPSILON __DBL_EPSILON__
|
||||
#define LDBL_EPSILON __LDBL_EPSILON__
|
||||
|
||||
/* Minimum normalized positive floating-point number, b**(emin - 1). */
|
||||
#undef FLT_MIN
|
||||
#undef DBL_MIN
|
||||
#undef LDBL_MIN
|
||||
#define FLT_MIN __FLT_MIN__
|
||||
#define DBL_MIN __DBL_MIN__
|
||||
#define LDBL_MIN __LDBL_MIN__
|
||||
|
||||
/* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown. */
|
||||
/* ??? This is supposed to change with calls to fesetround in <fenv.h>. */
|
||||
#undef FLT_ROUNDS
|
||||
#define FLT_ROUNDS 1
|
||||
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
|
||||
|| (defined (__cplusplus) && __cplusplus >= 201103L)
|
||||
/* The floating-point expression evaluation method. The precise
|
||||
definitions of these values are generalised to include support for
|
||||
the interchange and extended types defined in ISO/IEC TS 18661-3.
|
||||
Prior to this (for C99/C11) the definitions were:
|
||||
|
||||
-1 indeterminate
|
||||
0 evaluate all operations and constants just to the range and
|
||||
precision of the type
|
||||
1 evaluate operations and constants of type float and double
|
||||
to the range and precision of the double type, evaluate
|
||||
long double operations and constants to the range and
|
||||
precision of the long double type
|
||||
2 evaluate all operations and constants to the range and
|
||||
precision of the long double type
|
||||
|
||||
The TS 18661-3 definitions are:
|
||||
|
||||
-1 indeterminate
|
||||
0 evaluate all operations and constants, whose semantic type has
|
||||
at most the range and precision of float, to the range and
|
||||
precision of float; evaluate all other operations and constants
|
||||
to the range and precision of the semantic type.
|
||||
1 evaluate all operations and constants, whose semantic type has
|
||||
at most the range and precision of double, to the range and
|
||||
precision of double; evaluate all other operations and constants
|
||||
to the range and precision of the semantic type.
|
||||
2 evaluate all operations and constants, whose semantic type has
|
||||
at most the range and precision of long double, to the range and
|
||||
precision of long double; evaluate all other operations and
|
||||
constants to the range and precision of the semantic type.
|
||||
N where _FloatN is a supported interchange floating type
|
||||
evaluate all operations and constants, whose semantic type has
|
||||
at most the range and precision of the _FloatN type, to the
|
||||
range and precision of the _FloatN type; evaluate all other
|
||||
operations and constants to the range and precision of the
|
||||
semantic type.
|
||||
N + 1, where _FloatNx is a supported extended floating type
|
||||
evaluate operations and constants, whose semantic type has at
|
||||
most the range and precision of the _FloatNx type, to the range
|
||||
and precision of the _FloatNx type; evaluate all other
|
||||
operations and constants to the range and precision of the
|
||||
semantic type.
|
||||
|
||||
The compiler predefines two macros:
|
||||
|
||||
__FLT_EVAL_METHOD__
|
||||
Which, depending on the value given for
|
||||
-fpermitted-flt-eval-methods, may be limited to only those values
|
||||
for FLT_EVAL_METHOD defined in C99/C11.
|
||||
|
||||
__FLT_EVAL_METHOD_TS_18661_3__
|
||||
Which always permits the values for FLT_EVAL_METHOD defined in
|
||||
ISO/IEC TS 18661-3.
|
||||
|
||||
Here we want to use __FLT_EVAL_METHOD__, unless
|
||||
__STDC_WANT_IEC_60559_TYPES_EXT__ is defined, in which case the user
|
||||
is specifically asking for the ISO/IEC TS 18661-3 types, so we use
|
||||
__FLT_EVAL_METHOD_TS_18661_3__.
|
||||
|
||||
??? This ought to change with the setting of the fp control word;
|
||||
the value provided by the compiler assumes the widest setting. */
|
||||
#undef FLT_EVAL_METHOD
|
||||
#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
|
||||
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
|
||||
#else
|
||||
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
|
||||
#endif
|
||||
|
||||
/* Number of decimal digits, n, such that any floating-point number in the
|
||||
widest supported floating type with pmax radix b digits can be rounded
|
||||
to a floating-point number with n decimal digits and back again without
|
||||
change to the value,
|
||||
|
||||
pmax * log10(b) if b is a power of 10
|
||||
ceil(1 + pmax * log10(b)) otherwise
|
||||
*/
|
||||
#undef DECIMAL_DIG
|
||||
#define DECIMAL_DIG __DECIMAL_DIG__
|
||||
|
||||
#endif /* C99 */
|
||||
|
||||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
|
||||
/* Versions of DECIMAL_DIG for each floating-point type. */
|
||||
#undef FLT_DECIMAL_DIG
|
||||
#undef DBL_DECIMAL_DIG
|
||||
#undef LDBL_DECIMAL_DIG
|
||||
#define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__
|
||||
#define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__
|
||||
#define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__
|
||||
|
||||
/* Whether types support subnormal numbers. */
|
||||
#undef FLT_HAS_SUBNORM
|
||||
#undef DBL_HAS_SUBNORM
|
||||
#undef LDBL_HAS_SUBNORM
|
||||
#define FLT_HAS_SUBNORM __FLT_HAS_DENORM__
|
||||
#define DBL_HAS_SUBNORM __DBL_HAS_DENORM__
|
||||
#define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__
|
||||
|
||||
/* Minimum positive values, including subnormals. */
|
||||
#undef FLT_TRUE_MIN
|
||||
#undef DBL_TRUE_MIN
|
||||
#undef LDBL_TRUE_MIN
|
||||
#define FLT_TRUE_MIN __FLT_DENORM_MIN__
|
||||
#define DBL_TRUE_MIN __DBL_DENORM_MIN__
|
||||
#define LDBL_TRUE_MIN __LDBL_DENORM_MIN__
|
||||
|
||||
#endif /* C11 */
|
||||
|
||||
#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
|
||||
/* Number of decimal digits for which conversions between decimal
|
||||
character strings and binary formats, in both directions, are
|
||||
correctly rounded. */
|
||||
#define CR_DECIMAL_DIG __UINTMAX_MAX__
|
||||
#endif
|
||||
|
||||
#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
|
||||
/* Constants for _FloatN and _FloatNx types from TS 18661-3. See
|
||||
comments above for their semantics. */
|
||||
|
||||
#ifdef __FLT16_MANT_DIG__
|
||||
#undef FLT16_MANT_DIG
|
||||
#define FLT16_MANT_DIG __FLT16_MANT_DIG__
|
||||
#undef FLT16_DIG
|
||||
#define FLT16_DIG __FLT16_DIG__
|
||||
#undef FLT16_MIN_EXP
|
||||
#define FLT16_MIN_EXP __FLT16_MIN_EXP__
|
||||
#undef FLT16_MIN_10_EXP
|
||||
#define FLT16_MIN_10_EXP __FLT16_MIN_10_EXP__
|
||||
#undef FLT16_MAX_EXP
|
||||
#define FLT16_MAX_EXP __FLT16_MAX_EXP__
|
||||
#undef FLT16_MAX_10_EXP
|
||||
#define FLT16_MAX_10_EXP __FLT16_MAX_10_EXP__
|
||||
#undef FLT16_MAX
|
||||
#define FLT16_MAX __FLT16_MAX__
|
||||
#undef FLT16_EPSILON
|
||||
#define FLT16_EPSILON __FLT16_EPSILON__
|
||||
#undef FLT16_MIN
|
||||
#define FLT16_MIN __FLT16_MIN__
|
||||
#undef FLT16_DECIMAL_DIG
|
||||
#define FLT16_DECIMAL_DIG __FLT16_DECIMAL_DIG__
|
||||
#undef FLT16_TRUE_MIN
|
||||
#define FLT16_TRUE_MIN __FLT16_DENORM_MIN__
|
||||
#endif /* __FLT16_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT32_MANT_DIG__
|
||||
#undef FLT32_MANT_DIG
|
||||
#define FLT32_MANT_DIG __FLT32_MANT_DIG__
|
||||
#undef FLT32_DIG
|
||||
#define FLT32_DIG __FLT32_DIG__
|
||||
#undef FLT32_MIN_EXP
|
||||
#define FLT32_MIN_EXP __FLT32_MIN_EXP__
|
||||
#undef FLT32_MIN_10_EXP
|
||||
#define FLT32_MIN_10_EXP __FLT32_MIN_10_EXP__
|
||||
#undef FLT32_MAX_EXP
|
||||
#define FLT32_MAX_EXP __FLT32_MAX_EXP__
|
||||
#undef FLT32_MAX_10_EXP
|
||||
#define FLT32_MAX_10_EXP __FLT32_MAX_10_EXP__
|
||||
#undef FLT32_MAX
|
||||
#define FLT32_MAX __FLT32_MAX__
|
||||
#undef FLT32_EPSILON
|
||||
#define FLT32_EPSILON __FLT32_EPSILON__
|
||||
#undef FLT32_MIN
|
||||
#define FLT32_MIN __FLT32_MIN__
|
||||
#undef FLT32_DECIMAL_DIG
|
||||
#define FLT32_DECIMAL_DIG __FLT32_DECIMAL_DIG__
|
||||
#undef FLT32_TRUE_MIN
|
||||
#define FLT32_TRUE_MIN __FLT32_DENORM_MIN__
|
||||
#endif /* __FLT32_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT64_MANT_DIG__
|
||||
#undef FLT64_MANT_DIG
|
||||
#define FLT64_MANT_DIG __FLT64_MANT_DIG__
|
||||
#undef FLT64_DIG
|
||||
#define FLT64_DIG __FLT64_DIG__
|
||||
#undef FLT64_MIN_EXP
|
||||
#define FLT64_MIN_EXP __FLT64_MIN_EXP__
|
||||
#undef FLT64_MIN_10_EXP
|
||||
#define FLT64_MIN_10_EXP __FLT64_MIN_10_EXP__
|
||||
#undef FLT64_MAX_EXP
|
||||
#define FLT64_MAX_EXP __FLT64_MAX_EXP__
|
||||
#undef FLT64_MAX_10_EXP
|
||||
#define FLT64_MAX_10_EXP __FLT64_MAX_10_EXP__
|
||||
#undef FLT64_MAX
|
||||
#define FLT64_MAX __FLT64_MAX__
|
||||
#undef FLT64_EPSILON
|
||||
#define FLT64_EPSILON __FLT64_EPSILON__
|
||||
#undef FLT64_MIN
|
||||
#define FLT64_MIN __FLT64_MIN__
|
||||
#undef FLT64_DECIMAL_DIG
|
||||
#define FLT64_DECIMAL_DIG __FLT64_DECIMAL_DIG__
|
||||
#undef FLT64_TRUE_MIN
|
||||
#define FLT64_TRUE_MIN __FLT64_DENORM_MIN__
|
||||
#endif /* __FLT64_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT128_MANT_DIG__
|
||||
#undef FLT128_MANT_DIG
|
||||
#define FLT128_MANT_DIG __FLT128_MANT_DIG__
|
||||
#undef FLT128_DIG
|
||||
#define FLT128_DIG __FLT128_DIG__
|
||||
#undef FLT128_MIN_EXP
|
||||
#define FLT128_MIN_EXP __FLT128_MIN_EXP__
|
||||
#undef FLT128_MIN_10_EXP
|
||||
#define FLT128_MIN_10_EXP __FLT128_MIN_10_EXP__
|
||||
#undef FLT128_MAX_EXP
|
||||
#define FLT128_MAX_EXP __FLT128_MAX_EXP__
|
||||
#undef FLT128_MAX_10_EXP
|
||||
#define FLT128_MAX_10_EXP __FLT128_MAX_10_EXP__
|
||||
#undef FLT128_MAX
|
||||
#define FLT128_MAX __FLT128_MAX__
|
||||
#undef FLT128_EPSILON
|
||||
#define FLT128_EPSILON __FLT128_EPSILON__
|
||||
#undef FLT128_MIN
|
||||
#define FLT128_MIN __FLT128_MIN__
|
||||
#undef FLT128_DECIMAL_DIG
|
||||
#define FLT128_DECIMAL_DIG __FLT128_DECIMAL_DIG__
|
||||
#undef FLT128_TRUE_MIN
|
||||
#define FLT128_TRUE_MIN __FLT128_DENORM_MIN__
|
||||
#endif /* __FLT128_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT32X_MANT_DIG__
|
||||
#undef FLT32X_MANT_DIG
|
||||
#define FLT32X_MANT_DIG __FLT32X_MANT_DIG__
|
||||
#undef FLT32X_DIG
|
||||
#define FLT32X_DIG __FLT32X_DIG__
|
||||
#undef FLT32X_MIN_EXP
|
||||
#define FLT32X_MIN_EXP __FLT32X_MIN_EXP__
|
||||
#undef FLT32X_MIN_10_EXP
|
||||
#define FLT32X_MIN_10_EXP __FLT32X_MIN_10_EXP__
|
||||
#undef FLT32X_MAX_EXP
|
||||
#define FLT32X_MAX_EXP __FLT32X_MAX_EXP__
|
||||
#undef FLT32X_MAX_10_EXP
|
||||
#define FLT32X_MAX_10_EXP __FLT32X_MAX_10_EXP__
|
||||
#undef FLT32X_MAX
|
||||
#define FLT32X_MAX __FLT32X_MAX__
|
||||
#undef FLT32X_EPSILON
|
||||
#define FLT32X_EPSILON __FLT32X_EPSILON__
|
||||
#undef FLT32X_MIN
|
||||
#define FLT32X_MIN __FLT32X_MIN__
|
||||
#undef FLT32X_DECIMAL_DIG
|
||||
#define FLT32X_DECIMAL_DIG __FLT32X_DECIMAL_DIG__
|
||||
#undef FLT32X_TRUE_MIN
|
||||
#define FLT32X_TRUE_MIN __FLT32X_DENORM_MIN__
|
||||
#endif /* __FLT32X_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT64X_MANT_DIG__
|
||||
#undef FLT64X_MANT_DIG
|
||||
#define FLT64X_MANT_DIG __FLT64X_MANT_DIG__
|
||||
#undef FLT64X_DIG
|
||||
#define FLT64X_DIG __FLT64X_DIG__
|
||||
#undef FLT64X_MIN_EXP
|
||||
#define FLT64X_MIN_EXP __FLT64X_MIN_EXP__
|
||||
#undef FLT64X_MIN_10_EXP
|
||||
#define FLT64X_MIN_10_EXP __FLT64X_MIN_10_EXP__
|
||||
#undef FLT64X_MAX_EXP
|
||||
#define FLT64X_MAX_EXP __FLT64X_MAX_EXP__
|
||||
#undef FLT64X_MAX_10_EXP
|
||||
#define FLT64X_MAX_10_EXP __FLT64X_MAX_10_EXP__
|
||||
#undef FLT64X_MAX
|
||||
#define FLT64X_MAX __FLT64X_MAX__
|
||||
#undef FLT64X_EPSILON
|
||||
#define FLT64X_EPSILON __FLT64X_EPSILON__
|
||||
#undef FLT64X_MIN
|
||||
#define FLT64X_MIN __FLT64X_MIN__
|
||||
#undef FLT64X_DECIMAL_DIG
|
||||
#define FLT64X_DECIMAL_DIG __FLT64X_DECIMAL_DIG__
|
||||
#undef FLT64X_TRUE_MIN
|
||||
#define FLT64X_TRUE_MIN __FLT64X_DENORM_MIN__
|
||||
#endif /* __FLT64X_MANT_DIG__. */
|
||||
|
||||
#ifdef __FLT128X_MANT_DIG__
|
||||
#undef FLT128X_MANT_DIG
|
||||
#define FLT128X_MANT_DIG __FLT128X_MANT_DIG__
|
||||
#undef FLT128X_DIG
|
||||
#define FLT128X_DIG __FLT128X_DIG__
|
||||
#undef FLT128X_MIN_EXP
|
||||
#define FLT128X_MIN_EXP __FLT128X_MIN_EXP__
|
||||
#undef FLT128X_MIN_10_EXP
|
||||
#define FLT128X_MIN_10_EXP __FLT128X_MIN_10_EXP__
|
||||
#undef FLT128X_MAX_EXP
|
||||
#define FLT128X_MAX_EXP __FLT128X_MAX_EXP__
|
||||
#undef FLT128X_MAX_10_EXP
|
||||
#define FLT128X_MAX_10_EXP __FLT128X_MAX_10_EXP__
|
||||
#undef FLT128X_MAX
|
||||
#define FLT128X_MAX __FLT128X_MAX__
|
||||
#undef FLT128X_EPSILON
|
||||
#define FLT128X_EPSILON __FLT128X_EPSILON__
|
||||
#undef FLT128X_MIN
|
||||
#define FLT128X_MIN __FLT128X_MIN__
|
||||
#undef FLT128X_DECIMAL_DIG
|
||||
#define FLT128X_DECIMAL_DIG __FLT128X_DECIMAL_DIG__
|
||||
#undef FLT128X_TRUE_MIN
|
||||
#define FLT128X_TRUE_MIN __FLT128X_DENORM_MIN__
|
||||
#endif /* __FLT128X_MANT_DIG__. */
|
||||
|
||||
#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__. */
|
||||
|
||||
#ifdef __STDC_WANT_DEC_FP__
|
||||
/* Draft Technical Report 24732, extension for decimal floating-point
|
||||
arithmetic: Characteristic of decimal floating types <float.h>. */
|
||||
|
||||
/* Number of base-FLT_RADIX digits in the significand, p. */
|
||||
#undef DEC32_MANT_DIG
|
||||
#undef DEC64_MANT_DIG
|
||||
#undef DEC128_MANT_DIG
|
||||
#define DEC32_MANT_DIG __DEC32_MANT_DIG__
|
||||
#define DEC64_MANT_DIG __DEC64_MANT_DIG__
|
||||
#define DEC128_MANT_DIG __DEC128_MANT_DIG__
|
||||
|
||||
/* Minimum exponent. */
|
||||
#undef DEC32_MIN_EXP
|
||||
#undef DEC64_MIN_EXP
|
||||
#undef DEC128_MIN_EXP
|
||||
#define DEC32_MIN_EXP __DEC32_MIN_EXP__
|
||||
#define DEC64_MIN_EXP __DEC64_MIN_EXP__
|
||||
#define DEC128_MIN_EXP __DEC128_MIN_EXP__
|
||||
|
||||
/* Maximum exponent. */
|
||||
#undef DEC32_MAX_EXP
|
||||
#undef DEC64_MAX_EXP
|
||||
#undef DEC128_MAX_EXP
|
||||
#define DEC32_MAX_EXP __DEC32_MAX_EXP__
|
||||
#define DEC64_MAX_EXP __DEC64_MAX_EXP__
|
||||
#define DEC128_MAX_EXP __DEC128_MAX_EXP__
|
||||
|
||||
/* Maximum representable finite decimal floating-point number
|
||||
(there are 6, 15, and 33 9s after the decimal points respectively). */
|
||||
#undef DEC32_MAX
|
||||
#undef DEC64_MAX
|
||||
#undef DEC128_MAX
|
||||
#define DEC32_MAX __DEC32_MAX__
|
||||
#define DEC64_MAX __DEC64_MAX__
|
||||
#define DEC128_MAX __DEC128_MAX__
|
||||
|
||||
/* The difference between 1 and the least value greater than 1 that is
|
||||
representable in the given floating point type. */
|
||||
#undef DEC32_EPSILON
|
||||
#undef DEC64_EPSILON
|
||||
#undef DEC128_EPSILON
|
||||
#define DEC32_EPSILON __DEC32_EPSILON__
|
||||
#define DEC64_EPSILON __DEC64_EPSILON__
|
||||
#define DEC128_EPSILON __DEC128_EPSILON__
|
||||
|
||||
/* Minimum normalized positive floating-point number. */
|
||||
#undef DEC32_MIN
|
||||
#undef DEC64_MIN
|
||||
#undef DEC128_MIN
|
||||
#define DEC32_MIN __DEC32_MIN__
|
||||
#define DEC64_MIN __DEC64_MIN__
|
||||
#define DEC128_MIN __DEC128_MIN__
|
||||
|
||||
/* Minimum subnormal positive floating-point number. */
|
||||
#undef DEC32_SUBNORMAL_MIN
|
||||
#undef DEC64_SUBNORMAL_MIN
|
||||
#undef DEC128_SUBNORMAL_MIN
|
||||
#define DEC32_SUBNORMAL_MIN __DEC32_SUBNORMAL_MIN__
|
||||
#define DEC64_SUBNORMAL_MIN __DEC64_SUBNORMAL_MIN__
|
||||
#define DEC128_SUBNORMAL_MIN __DEC128_SUBNORMAL_MIN__
|
||||
|
||||
/* The floating-point expression evaluation method.
|
||||
-1 indeterminate
|
||||
0 evaluate all operations and constants just to the range and
|
||||
precision of the type
|
||||
1 evaluate operations and constants of type _Decimal32
|
||||
and _Decimal64 to the range and precision of the _Decimal64
|
||||
type, evaluate _Decimal128 operations and constants to the
|
||||
range and precision of the _Decimal128 type;
|
||||
2 evaluate all operations and constants to the range and
|
||||
precision of the _Decimal128 type. */
|
||||
|
||||
#undef DEC_EVAL_METHOD
|
||||
#define DEC_EVAL_METHOD __DEC_EVAL_METHOD__
|
||||
|
||||
#endif /* __STDC_WANT_DEC_FP__ */
|
||||
|
||||
#endif /* _FLOAT_H___ */
|
||||
@@ -0,0 +1,41 @@
|
||||
/* GCOV interface routines.
|
||||
Copyright (C) 2017-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
#ifndef GCC_GCOV_H
|
||||
#define GCC_GCOV_H
|
||||
|
||||
/* Set all counters to zero. */
|
||||
|
||||
extern void __gcov_reset (void);
|
||||
|
||||
/* Write profile information to a file. */
|
||||
|
||||
extern void __gcov_dump (void);
|
||||
|
||||
/* Write profile information to a file and reset counters to zero.
|
||||
The function does operations under a mutex. */
|
||||
|
||||
extern void __gcov_flush (void);
|
||||
|
||||
#endif /* GCC_GCOV_H */
|
||||
@@ -0,0 +1,45 @@
|
||||
/* Copyright (C) 1997-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.9 Alternative spellings <iso646.h>
|
||||
*/
|
||||
|
||||
#ifndef _ISO646_H
|
||||
#define _ISO646_H
|
||||
|
||||
#ifndef __cplusplus
|
||||
#define and &&
|
||||
#define and_eq &=
|
||||
#define bitand &
|
||||
#define bitor |
|
||||
#define compl ~
|
||||
#define not !
|
||||
#define not_eq !=
|
||||
#define or ||
|
||||
#define or_eq |=
|
||||
#define xor ^
|
||||
#define xor_eq ^=
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,358 @@
|
||||
/* Intrinsics for LoongArch BASE operations.
|
||||
Copyright (C) 2020-2022 Free Software Foundation, Inc.
|
||||
Contributed by Loongson Ltd.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
#ifndef _GCC_LOONGARCH_BASE_INTRIN_H
|
||||
#define _GCC_LOONGARCH_BASE_INTRIN_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct drdtime
|
||||
{
|
||||
unsigned long dvalue;
|
||||
unsigned long dtimeid;
|
||||
} __drdtime_t;
|
||||
|
||||
typedef struct rdtime
|
||||
{
|
||||
unsigned int value;
|
||||
unsigned int timeid;
|
||||
} __rdtime_t;
|
||||
|
||||
#ifdef __loongarch64
|
||||
extern __inline __drdtime_t
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__rdtime_d (void)
|
||||
{
|
||||
__drdtime_t __drdtime;
|
||||
__asm__ volatile (
|
||||
"rdtime.d\t%[val],%[tid]\n\t"
|
||||
: [val]"=&r"(__drdtime.dvalue),[tid]"=&r"(__drdtime.dtimeid)
|
||||
:);
|
||||
return __drdtime;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern __inline __rdtime_t
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__rdtimeh_w (void)
|
||||
{
|
||||
__rdtime_t __rdtime;
|
||||
__asm__ volatile (
|
||||
"rdtimeh.w\t%[val],%[tid]\n\t"
|
||||
: [val]"=&r"(__rdtime.value),[tid]"=&r"(__rdtime.timeid)
|
||||
:);
|
||||
return __rdtime;
|
||||
}
|
||||
|
||||
extern __inline __rdtime_t
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__rdtimel_w (void)
|
||||
{
|
||||
__rdtime_t __rdtime;
|
||||
__asm__ volatile (
|
||||
"rdtimel.w\t%[val],%[tid]\n\t"
|
||||
: [val]"=&r"(__rdtime.value),[tid]"=&r"(__rdtime.timeid)
|
||||
:);
|
||||
return __rdtime;
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rj, fcsr. */
|
||||
/* Data types in instruction templates: USI, UQI. */
|
||||
#define __movfcsr2gr(/*ui5*/ _1) __builtin_loongarch_movfcsr2gr ((_1));
|
||||
|
||||
/* Assembly instruction format: fcsr, rj. */
|
||||
/* Data types in instruction templates: VOID, UQI, USI. */
|
||||
#define __movgr2fcsr(/*ui5*/ _1, _2) \
|
||||
__builtin_loongarch_movgr2fcsr ((_1), (unsigned int) _2);
|
||||
|
||||
#if defined __loongarch64
|
||||
/* Assembly instruction format: ui5, rj, si12. */
|
||||
/* Data types in instruction templates: VOID, USI, UDI, SI. */
|
||||
#define __cacop_d(/*ui5*/ _1, /*unsigned long int*/ _2, /*si12*/ _3) \
|
||||
((void) __builtin_loongarch_cacop_d ((_1), (unsigned long int) (_2), (_3)))
|
||||
#elif (defined __loongarch32) || (defined __loongarch32r)
|
||||
#else
|
||||
#error "Unsupported ABI."
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: USI, USI. */
|
||||
extern __inline unsigned int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__cpucfg (unsigned int _1)
|
||||
{
|
||||
return (unsigned int) __builtin_loongarch_cpucfg ((unsigned int) _1);
|
||||
}
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rj, rk. */
|
||||
/* Data types in instruction templates: DI, DI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__asrtle_d (long int _1, long int _2)
|
||||
{
|
||||
__builtin_loongarch_asrtle_d ((long int) _1, (long int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rj, rk. */
|
||||
/* Data types in instruction templates: DI, DI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__asrtgt_d (long int _1, long int _2)
|
||||
{
|
||||
__builtin_loongarch_asrtgt_d ((long int) _1, (long int) _2);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined __loongarch64
|
||||
/* Assembly instruction format: rd, rj, ui5. */
|
||||
/* Data types in instruction templates: DI, DI, UQI. */
|
||||
#define __lddir_d(/*long int*/ _1, /*ui5*/ _2) \
|
||||
((long int) __builtin_loongarch_lddir_d ((long int) (_1), (_2)))
|
||||
#elif (defined __loongarch32) || (defined __loongarch32r)
|
||||
#else
|
||||
#error "Unsupported ABI."
|
||||
#endif
|
||||
|
||||
#if defined __loongarch64
|
||||
/* Assembly instruction format: rj, ui5. */
|
||||
/* Data types in instruction templates: VOID, DI, UQI. */
|
||||
#define __ldpte_d(/*long int*/ _1, /*ui5*/ _2) \
|
||||
((void) __builtin_loongarch_ldpte_d ((long int) (_1), (_2)))
|
||||
#elif (defined __loongarch32) || (defined __loongarch32r)
|
||||
#else
|
||||
#error "Unsupported ABI."
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, QI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crc_w_b_w (char _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crc_w_b_w ((char) _1, (int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, HI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crc_w_h_w (short _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crc_w_h_w ((short) _1, (int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, SI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crc_w_w_w (int _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crc_w_w_w ((int) _1, (int) _2);
|
||||
}
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, DI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crc_w_d_w (long int _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crc_w_d_w ((long int) _1, (int) _2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, QI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crcc_w_b_w (char _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crcc_w_b_w ((char) _1, (int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, HI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crcc_w_h_w (short _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crcc_w_h_w ((short) _1, (int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, SI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crcc_w_w_w (int _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crcc_w_w_w ((int) _1, (int) _2);
|
||||
}
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rd, rj, rk. */
|
||||
/* Data types in instruction templates: SI, DI, SI. */
|
||||
extern __inline int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__crcc_w_d_w (long int _1, int _2)
|
||||
{
|
||||
return (int) __builtin_loongarch_crcc_w_d_w ((long int) _1, (int) _2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, ui14. */
|
||||
/* Data types in instruction templates: USI, USI. */
|
||||
#define __csrrd_w(/*ui14*/ _1) \
|
||||
((unsigned int) __builtin_loongarch_csrrd_w ((_1)))
|
||||
|
||||
/* Assembly instruction format: rd, ui14. */
|
||||
/* Data types in instruction templates: USI, USI, USI. */
|
||||
#define __csrwr_w(/*unsigned int*/ _1, /*ui14*/ _2) \
|
||||
((unsigned int) __builtin_loongarch_csrwr_w ((unsigned int) (_1), (_2)))
|
||||
|
||||
/* Assembly instruction format: rd, rj, ui14. */
|
||||
/* Data types in instruction templates: USI, USI, USI, USI. */
|
||||
#define __csrxchg_w(/*unsigned int*/ _1, /*unsigned int*/ _2, /*ui14*/ _3) \
|
||||
((unsigned int) __builtin_loongarch_csrxchg_w ((unsigned int) (_1), \
|
||||
(unsigned int) (_2), (_3)))
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rd, ui14. */
|
||||
/* Data types in instruction templates: UDI, USI. */
|
||||
#define __csrrd_d(/*ui14*/ _1) \
|
||||
((unsigned long int) __builtin_loongarch_csrrd_d ((_1)))
|
||||
|
||||
/* Assembly instruction format: rd, ui14. */
|
||||
/* Data types in instruction templates: UDI, UDI, USI. */
|
||||
#define __csrwr_d(/*unsigned long int*/ _1, /*ui14*/ _2) \
|
||||
((unsigned long int) __builtin_loongarch_csrwr_d ((unsigned long int) (_1), \
|
||||
(_2)))
|
||||
|
||||
/* Assembly instruction format: rd, rj, ui14. */
|
||||
/* Data types in instruction templates: UDI, UDI, UDI, USI. */
|
||||
#define __csrxchg_d(/*unsigned long int*/ _1, /*unsigned long int*/ _2, \
|
||||
/*ui14*/ _3) \
|
||||
((unsigned long int) __builtin_loongarch_csrxchg_d ( \
|
||||
(unsigned long int) (_1), (unsigned long int) (_2), (_3)))
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: UQI, USI. */
|
||||
extern __inline unsigned char
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrrd_b (unsigned int _1)
|
||||
{
|
||||
return (unsigned char) __builtin_loongarch_iocsrrd_b ((unsigned int) _1);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: UHI, USI. */
|
||||
extern __inline unsigned char
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrrd_h (unsigned int _1)
|
||||
{
|
||||
return (unsigned short) __builtin_loongarch_iocsrrd_h ((unsigned int) _1);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: USI, USI. */
|
||||
extern __inline unsigned int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrrd_w (unsigned int _1)
|
||||
{
|
||||
return (unsigned int) __builtin_loongarch_iocsrrd_w ((unsigned int) _1);
|
||||
}
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: UDI, USI. */
|
||||
extern __inline unsigned long int
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrrd_d (unsigned int _1)
|
||||
{
|
||||
return (unsigned long int) __builtin_loongarch_iocsrrd_d ((unsigned int) _1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: VOID, UQI, USI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrwr_b (unsigned char _1, unsigned int _2)
|
||||
{
|
||||
__builtin_loongarch_iocsrwr_b ((unsigned char) _1, (unsigned int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: VOID, UHI, USI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrwr_h (unsigned short _1, unsigned int _2)
|
||||
{
|
||||
__builtin_loongarch_iocsrwr_h ((unsigned short) _1, (unsigned int) _2);
|
||||
}
|
||||
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: VOID, USI, USI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrwr_w (unsigned int _1, unsigned int _2)
|
||||
{
|
||||
__builtin_loongarch_iocsrwr_w ((unsigned int) _1, (unsigned int) _2);
|
||||
}
|
||||
|
||||
#ifdef __loongarch64
|
||||
/* Assembly instruction format: rd, rj. */
|
||||
/* Data types in instruction templates: VOID, UDI, USI. */
|
||||
extern __inline void
|
||||
__attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
|
||||
__iocsrwr_d (unsigned long int _1, unsigned int _2)
|
||||
{
|
||||
__builtin_loongarch_iocsrwr_d ((unsigned long int) _1, (unsigned int) _2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Assembly instruction format: ui15. */
|
||||
/* Data types in instruction templates: USI. */
|
||||
#define __dbar(/*ui15*/ _1) __builtin_loongarch_dbar ((_1))
|
||||
|
||||
/* Assembly instruction format: ui15. */
|
||||
/* Data types in instruction templates: USI. */
|
||||
#define __ibar(/*ui15*/ _1) __builtin_loongarch_ibar ((_1))
|
||||
|
||||
/* Assembly instruction format: ui15. */
|
||||
/* Data types in instruction templates: USI. */
|
||||
#define __syscall(/*ui15*/ _1) __builtin_loongarch_syscall ((_1))
|
||||
|
||||
/* Assembly instruction format: ui15. */
|
||||
/* Data types in instruction templates: USI. */
|
||||
#define __break(/*ui15*/ _1) __builtin_loongarch_break ((_1))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* _GCC_LOONGARCH_BASE_INTRIN_H */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,170 @@
|
||||
/* Copyright (C) 2005-2018 Free Software Foundation, Inc.
|
||||
Contributed by Richard Henderson <rth@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/>. */
|
||||
|
||||
#ifndef _OMP_H
|
||||
#define _OMP_H 1
|
||||
|
||||
#ifndef _LIBGOMP_OMP_LOCK_DEFINED
|
||||
#define _LIBGOMP_OMP_LOCK_DEFINED 1
|
||||
/* These two structures get edited by the libgomp build process to
|
||||
reflect the shape of the two types. Their internals are private
|
||||
to the library. */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char _x[4]
|
||||
__attribute__((__aligned__(4)));
|
||||
} omp_lock_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
#if defined(__linux__)
|
||||
unsigned char _x[8 + sizeof (void *)]
|
||||
__attribute__((__aligned__(sizeof (void *))));
|
||||
#else
|
||||
unsigned char _x[12]
|
||||
__attribute__((__aligned__(4)));
|
||||
#endif
|
||||
} omp_nest_lock_t;
|
||||
#endif
|
||||
|
||||
typedef enum omp_sched_t
|
||||
{
|
||||
omp_sched_static = 1,
|
||||
omp_sched_dynamic = 2,
|
||||
omp_sched_guided = 3,
|
||||
omp_sched_auto = 4
|
||||
} omp_sched_t;
|
||||
|
||||
typedef enum omp_proc_bind_t
|
||||
{
|
||||
omp_proc_bind_false = 0,
|
||||
omp_proc_bind_true = 1,
|
||||
omp_proc_bind_master = 2,
|
||||
omp_proc_bind_close = 3,
|
||||
omp_proc_bind_spread = 4
|
||||
} omp_proc_bind_t;
|
||||
|
||||
typedef enum omp_lock_hint_t
|
||||
{
|
||||
omp_lock_hint_none = 0,
|
||||
omp_lock_hint_uncontended = 1,
|
||||
omp_lock_hint_contended = 2,
|
||||
omp_lock_hint_nonspeculative = 4,
|
||||
omp_lock_hint_speculative = 8,
|
||||
} omp_lock_hint_t;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
# define __GOMP_NOTHROW throw ()
|
||||
#else
|
||||
# define __GOMP_NOTHROW __attribute__((__nothrow__))
|
||||
#endif
|
||||
|
||||
extern void omp_set_num_threads (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_num_threads (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_max_threads (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_thread_num (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_num_procs (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_in_parallel (void) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_set_dynamic (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_dynamic (void) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_set_nested (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_nested (void) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_init_lock (omp_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_init_lock_with_hint (omp_lock_t *, omp_lock_hint_t)
|
||||
__GOMP_NOTHROW;
|
||||
extern void omp_destroy_lock (omp_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_set_lock (omp_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_unset_lock (omp_lock_t *) __GOMP_NOTHROW;
|
||||
extern int omp_test_lock (omp_lock_t *) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_init_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_init_nest_lock_with_hint (omp_nest_lock_t *, omp_lock_hint_t)
|
||||
__GOMP_NOTHROW;
|
||||
extern void omp_destroy_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_set_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW;
|
||||
extern void omp_unset_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW;
|
||||
extern int omp_test_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW;
|
||||
|
||||
extern double omp_get_wtime (void) __GOMP_NOTHROW;
|
||||
extern double omp_get_wtick (void) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_set_schedule (omp_sched_t, int) __GOMP_NOTHROW;
|
||||
extern void omp_get_schedule (omp_sched_t *, int *) __GOMP_NOTHROW;
|
||||
extern int omp_get_thread_limit (void) __GOMP_NOTHROW;
|
||||
extern void omp_set_max_active_levels (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_max_active_levels (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_level (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_ancestor_thread_num (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_team_size (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_active_level (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_in_final (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_get_cancellation (void) __GOMP_NOTHROW;
|
||||
extern omp_proc_bind_t omp_get_proc_bind (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_num_places (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_place_num_procs (int) __GOMP_NOTHROW;
|
||||
extern void omp_get_place_proc_ids (int, int *) __GOMP_NOTHROW;
|
||||
extern int omp_get_place_num (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_partition_num_places (void) __GOMP_NOTHROW;
|
||||
extern void omp_get_partition_place_nums (int *) __GOMP_NOTHROW;
|
||||
|
||||
extern void omp_set_default_device (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_default_device (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_num_devices (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_num_teams (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_team_num (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_is_initial_device (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_initial_device (void) __GOMP_NOTHROW;
|
||||
extern int omp_get_max_task_priority (void) __GOMP_NOTHROW;
|
||||
|
||||
extern void *omp_target_alloc (__SIZE_TYPE__, int) __GOMP_NOTHROW;
|
||||
extern void omp_target_free (void *, int) __GOMP_NOTHROW;
|
||||
extern int omp_target_is_present (void *, int) __GOMP_NOTHROW;
|
||||
extern int omp_target_memcpy (void *, void *, __SIZE_TYPE__, __SIZE_TYPE__,
|
||||
__SIZE_TYPE__, int, int) __GOMP_NOTHROW;
|
||||
extern int omp_target_memcpy_rect (void *, void *, __SIZE_TYPE__, int,
|
||||
const __SIZE_TYPE__ *,
|
||||
const __SIZE_TYPE__ *,
|
||||
const __SIZE_TYPE__ *,
|
||||
const __SIZE_TYPE__ *,
|
||||
const __SIZE_TYPE__ *, int, int)
|
||||
__GOMP_NOTHROW;
|
||||
extern int omp_target_associate_ptr (void *, void *, __SIZE_TYPE__,
|
||||
__SIZE_TYPE__, int) __GOMP_NOTHROW;
|
||||
extern int omp_target_disassociate_ptr (void *, int) __GOMP_NOTHROW;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _OMP_H */
|
||||
@@ -0,0 +1,130 @@
|
||||
/* OpenACC Runtime Library User-facing Declarations
|
||||
|
||||
Copyright (C) 2013-2018 Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Mentor Embedded.
|
||||
|
||||
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/>. */
|
||||
|
||||
#ifndef _OPENACC_H
|
||||
#define _OPENACC_H 1
|
||||
|
||||
/* The OpenACC standard is silent on whether or not including <openacc.h>
|
||||
might or must not include other header files. We chose to include
|
||||
some. */
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if __cplusplus >= 201103
|
||||
# define __GOACC_NOTHROW noexcept
|
||||
#elif __cplusplus
|
||||
# define __GOACC_NOTHROW throw ()
|
||||
#else /* Not C++ */
|
||||
# define __GOACC_NOTHROW __attribute__ ((__nothrow__))
|
||||
#endif
|
||||
|
||||
/* Types */
|
||||
typedef enum acc_device_t {
|
||||
/* Keep in sync with include/gomp-constants.h. */
|
||||
acc_device_none = 0,
|
||||
acc_device_default = 1,
|
||||
acc_device_host = 2,
|
||||
/* acc_device_host_nonshm = 3 removed. */
|
||||
acc_device_not_host = 4,
|
||||
acc_device_nvidia = 5,
|
||||
_ACC_device_hwm,
|
||||
/* Ensure enumeration is layout compatible with int. */
|
||||
_ACC_highest = __INT_MAX__,
|
||||
_ACC_neg = -1
|
||||
} acc_device_t;
|
||||
|
||||
typedef enum acc_async_t {
|
||||
/* Keep in sync with include/gomp-constants.h. */
|
||||
acc_async_noval = -1,
|
||||
acc_async_sync = -2
|
||||
} acc_async_t;
|
||||
|
||||
int acc_get_num_devices (acc_device_t) __GOACC_NOTHROW;
|
||||
void acc_set_device_type (acc_device_t) __GOACC_NOTHROW;
|
||||
acc_device_t acc_get_device_type (void) __GOACC_NOTHROW;
|
||||
void acc_set_device_num (int, acc_device_t) __GOACC_NOTHROW;
|
||||
int acc_get_device_num (acc_device_t) __GOACC_NOTHROW;
|
||||
int acc_async_test (int) __GOACC_NOTHROW;
|
||||
int acc_async_test_all (void) __GOACC_NOTHROW;
|
||||
void acc_wait (int) __GOACC_NOTHROW;
|
||||
void acc_async_wait (int) __GOACC_NOTHROW;
|
||||
void acc_wait_async (int, int) __GOACC_NOTHROW;
|
||||
void acc_wait_all (void) __GOACC_NOTHROW;
|
||||
void acc_async_wait_all (void) __GOACC_NOTHROW;
|
||||
void acc_wait_all_async (int) __GOACC_NOTHROW;
|
||||
void acc_init (acc_device_t) __GOACC_NOTHROW;
|
||||
void acc_shutdown (acc_device_t) __GOACC_NOTHROW;
|
||||
#ifdef __cplusplus
|
||||
int acc_on_device (int __arg) __GOACC_NOTHROW;
|
||||
#else
|
||||
int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW;
|
||||
#endif
|
||||
void *acc_malloc (size_t) __GOACC_NOTHROW;
|
||||
void acc_free (void *) __GOACC_NOTHROW;
|
||||
/* Some of these would be more correct with const qualifiers, but
|
||||
the standard specifies otherwise. */
|
||||
void *acc_copyin (void *, size_t) __GOACC_NOTHROW;
|
||||
void *acc_present_or_copyin (void *, size_t) __GOACC_NOTHROW;
|
||||
void *acc_pcopyin (void *, size_t) __GOACC_NOTHROW;
|
||||
void *acc_create (void *, size_t) __GOACC_NOTHROW;
|
||||
void *acc_present_or_create (void *, size_t) __GOACC_NOTHROW;
|
||||
void *acc_pcreate (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_copyout (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_delete (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_update_device (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_update_self (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_map_data (void *, void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_unmap_data (void *) __GOACC_NOTHROW;
|
||||
void *acc_deviceptr (void *) __GOACC_NOTHROW;
|
||||
void *acc_hostptr (void *) __GOACC_NOTHROW;
|
||||
int acc_is_present (void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_memcpy_to_device (void *, void *, size_t) __GOACC_NOTHROW;
|
||||
void acc_memcpy_from_device (void *, void *, size_t) __GOACC_NOTHROW;
|
||||
|
||||
/* CUDA-specific routines. */
|
||||
void *acc_get_current_cuda_device (void) __GOACC_NOTHROW;
|
||||
void *acc_get_current_cuda_context (void) __GOACC_NOTHROW;
|
||||
void *acc_get_cuda_stream (int) __GOACC_NOTHROW;
|
||||
int acc_set_cuda_stream (int, void *) __GOACC_NOTHROW;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
/* Forwarding function with correctly typed arg. */
|
||||
|
||||
#pragma acc routine seq
|
||||
inline int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW
|
||||
{
|
||||
return acc_on_device ((int) __arg);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _OPENACC_H */
|
||||
@@ -0,0 +1,65 @@
|
||||
/* Object size checking support macros.
|
||||
Copyright (C) 2004-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
In addition to the permissions in the GNU General Public License, the
|
||||
Free Software Foundation gives you unlimited permission to link the
|
||||
compiled version of this file into combinations with other programs,
|
||||
and to distribute those combinations without any restriction coming
|
||||
from the use of this file. (The General Public License restrictions
|
||||
do apply in other respects; for example, they cover modification of
|
||||
the file, and distribution when not linked into a combine
|
||||
executable.)
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
|
||||
#ifndef _SSP_H
|
||||
#define _SSP_H 1
|
||||
|
||||
#if _FORTIFY_SOURCE > 0 && __OPTIMIZE__ > 0 \
|
||||
&& defined __GNUC__ \
|
||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \
|
||||
&& !defined __cplusplus
|
||||
# if _FORTIFY_SOURCE == 1
|
||||
# define __SSP_FORTIFY_LEVEL 1
|
||||
# elif _FORTIFY_SOURCE > 1
|
||||
# define __SSP_FORTIFY_LEVEL 2
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if __SSP_FORTIFY_LEVEL > 0
|
||||
# include <stddef.h>
|
||||
# define __ssp_bos(ptr) __builtin_object_size (ptr, __SSP_FORTIFY_LEVEL > 1)
|
||||
# define __ssp_bos0(ptr) __builtin_object_size (ptr, 0)
|
||||
|
||||
# define __SSP_REDIRECT(name, proto, alias) \
|
||||
name proto __asm__ (__SSP_ASMNAME (#alias))
|
||||
# define __SSP_ASMNAME(cname) __SSP_ASMNAME2 (__USER_LABEL_PREFIX__, cname)
|
||||
# define __SSP_ASMNAME2(prefix, cname) __SSP_ASMNAME3 (prefix) cname
|
||||
# define __SSP_ASMNAME3(prefix) #prefix
|
||||
|
||||
# undef __SSP_HAVE_VSNPRINTF
|
||||
|
||||
extern void __chk_fail (void) __attribute__((__noreturn__));
|
||||
#endif
|
||||
|
||||
#endif /* _SSP_H */
|
||||
@@ -0,0 +1,100 @@
|
||||
/* Checking macros for stdio functions.
|
||||
Copyright (C) 2004-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
In addition to the permissions in the GNU General Public License, the
|
||||
Free Software Foundation gives you unlimited permission to link the
|
||||
compiled version of this file into combinations with other programs,
|
||||
and to distribute those combinations without any restriction coming
|
||||
from the use of this file. (The General Public License restrictions
|
||||
do apply in other respects; for example, they cover modification of
|
||||
the file, and distribution when not linked into a combine
|
||||
executable.)
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
|
||||
#ifndef _SSP_STDIO_H
|
||||
#define _SSP_STDIO_H 1
|
||||
|
||||
#include <ssp.h>
|
||||
#include_next <stdio.h>
|
||||
|
||||
#if __SSP_FORTIFY_LEVEL > 0
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#undef sprintf
|
||||
#undef vsprintf
|
||||
#undef snprintf
|
||||
#undef vsnprintf
|
||||
#undef gets
|
||||
#undef fgets
|
||||
|
||||
extern int __sprintf_chk (char *__restrict__ __s, int __flag, size_t __slen,
|
||||
__const char *__restrict__ __format, ...);
|
||||
extern int __vsprintf_chk (char *__restrict__ __s, int __flag, size_t __slen,
|
||||
__const char *__restrict__ __format,
|
||||
va_list __ap);
|
||||
|
||||
#define sprintf(str, ...) \
|
||||
__builtin___sprintf_chk (str, 0, __ssp_bos (str), \
|
||||
__VA_ARGS__)
|
||||
#define vsprintf(str, fmt, ap) \
|
||||
__builtin___vsprintf_chk (str, 0, __ssp_bos (str), fmt, ap)
|
||||
|
||||
extern int __snprintf_chk (char *__restrict__ __s, size_t __n, int __flag,
|
||||
size_t __slen, __const char *__restrict__ __format,
|
||||
...);
|
||||
extern int __vsnprintf_chk (char *__restrict__ __s, size_t __n, int __flag,
|
||||
size_t __slen, __const char *__restrict__ __format,
|
||||
va_list __ap);
|
||||
|
||||
#define snprintf(str, len, ...) \
|
||||
__builtin___snprintf_chk (str, len, 0, __ssp_bos (str), __VA_ARGS__)
|
||||
#define vsnprintf(str, len, fmt, ap) \
|
||||
__builtin___vsnprintf_chk (str, len, 0, __ssp_bos (str), fmt, ap)
|
||||
|
||||
extern char *__gets_chk (char *__str, size_t);
|
||||
extern char *__SSP_REDIRECT (__gets_alias, (char *__str), gets);
|
||||
|
||||
extern inline __attribute__((__always_inline__)) char *
|
||||
gets (char *__str)
|
||||
{
|
||||
if (__ssp_bos (__str) != (size_t) -1)
|
||||
return __gets_chk (__str, __ssp_bos (__str));
|
||||
return __gets_alias (__str);
|
||||
}
|
||||
|
||||
extern char *__SSP_REDIRECT (__fgets_alias,
|
||||
(char *__restrict__ __s, int __n,
|
||||
FILE *__restrict__ __stream), fgets);
|
||||
|
||||
extern inline __attribute__((__always_inline__)) char *
|
||||
fgets (char *__restrict__ __s, int __n, FILE *__restrict__ __stream)
|
||||
{
|
||||
if (__ssp_bos (__s) != (size_t) -1 && (size_t) __n > __ssp_bos (__s))
|
||||
__chk_fail ();
|
||||
return __fgets_alias (__s, __n, __stream);
|
||||
}
|
||||
|
||||
#endif /* __SSP_FORTIFY_LEVEL > 0 */
|
||||
#endif /* _SSP_STDIO_H */
|
||||
@@ -0,0 +1,167 @@
|
||||
/* Checking macros for string functions.
|
||||
Copyright (C) 2004-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
In addition to the permissions in the GNU General Public License, the
|
||||
Free Software Foundation gives you unlimited permission to link the
|
||||
compiled version of this file into combinations with other programs,
|
||||
and to distribute those combinations without any restriction coming
|
||||
from the use of this file. (The General Public License restrictions
|
||||
do apply in other respects; for example, they cover modification of
|
||||
the file, and distribution when not linked into a combine
|
||||
executable.)
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
|
||||
#ifndef _SSP_STRING_H
|
||||
#define _SSP_STRING_H 1
|
||||
|
||||
#include <ssp.h>
|
||||
#include_next <string.h>
|
||||
|
||||
#if __SSP_FORTIFY_LEVEL > 0
|
||||
|
||||
#undef memcpy
|
||||
#undef memmove
|
||||
#undef memset
|
||||
#undef strcat
|
||||
#undef strcpy
|
||||
#undef strncat
|
||||
#undef strncpy
|
||||
#undef mempcpy
|
||||
#undef stpcpy
|
||||
#undef bcopy
|
||||
#undef bzero
|
||||
|
||||
#define memcpy(dest, src, len) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memcpy_chk (dest, src, len, __ssp_bos0 (dest)) \
|
||||
: __memcpy_ichk (dest, src, len))
|
||||
static inline __attribute__((__always_inline__)) void *
|
||||
__memcpy_ichk (void *__restrict__ __dest, const void *__restrict__ __src,
|
||||
size_t __len)
|
||||
{
|
||||
return __builtin___memcpy_chk (__dest, __src, __len, __ssp_bos0 (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define memmove(dest, src, len) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memmove_chk (dest, src, len, __ssp_bos0 (dest)) \
|
||||
: __memmove_ichk (dest, src, len))
|
||||
static inline __attribute__((__always_inline__)) void *
|
||||
__memmove_ichk (void *__dest, const void *__src, size_t __len)
|
||||
{
|
||||
return __builtin___memmove_chk (__dest, __src, __len, __ssp_bos0 (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define mempcpy(dest, src, len) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___mempcpy_chk (dest, src, len, __ssp_bos0 (dest)) \
|
||||
: __mempcpy_ichk (dest, src, len))
|
||||
static inline __attribute__((__always_inline__)) void *
|
||||
__mempcpy_ichk (void *__restrict__ __dest, const void *__restrict__ __src,
|
||||
size_t __len)
|
||||
{
|
||||
return __builtin___mempcpy_chk (__dest, __src, __len, __ssp_bos0 (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define memset(dest, ch, len) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memset_chk (dest, ch, len, __ssp_bos0 (dest)) \
|
||||
: __memset_ichk (dest, ch, len))
|
||||
static inline __attribute__((__always_inline__)) void *
|
||||
__memset_ichk (void *__dest, int __ch, size_t __len)
|
||||
{
|
||||
return __builtin___memset_chk (__dest, __ch, __len, __ssp_bos0 (__dest));
|
||||
}
|
||||
|
||||
#define bcopy(src, dest, len) ((void) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memmove_chk (dest, src, len, __ssp_bos0 (dest)) \
|
||||
: __memmove_ichk (dest, src, len)))
|
||||
#define bzero(dest, len) ((void) \
|
||||
((__ssp_bos0 (dest) != (size_t) -1) \
|
||||
? __builtin___memset_chk (dest, '\0', len, __ssp_bos0 (dest)) \
|
||||
: __memset_ichk (dest, '\0', len)))
|
||||
|
||||
|
||||
#define strcpy(dest, src) \
|
||||
((__ssp_bos (dest) != (size_t) -1) \
|
||||
? __builtin___strcpy_chk (dest, src, __ssp_bos (dest)) \
|
||||
: __strcpy_ichk (dest, src))
|
||||
static inline __attribute__((__always_inline__)) char *
|
||||
__strcpy_ichk (char *__restrict__ __dest, const char *__restrict__ __src)
|
||||
{
|
||||
return __builtin___strcpy_chk (__dest, __src, __ssp_bos (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define stpcpy(dest, src) \
|
||||
((__ssp_bos (dest) != (size_t) -1) \
|
||||
? __builtin___stpcpy_chk (dest, src, __ssp_bos (dest)) \
|
||||
: __stpcpy_ichk (dest, src))
|
||||
static inline __attribute__((__always_inline__)) char *
|
||||
__stpcpy_ichk (char *__restrict__ __dest, const char *__restrict__ __src)
|
||||
{
|
||||
return __builtin___stpcpy_chk (__dest, __src, __ssp_bos (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define strncpy(dest, src, len) \
|
||||
((__ssp_bos (dest) != (size_t) -1) \
|
||||
? __builtin___strncpy_chk (dest, src, len, __ssp_bos (dest)) \
|
||||
: __strncpy_ichk (dest, src, len))
|
||||
static inline __attribute__((__always_inline__)) char *
|
||||
__strncpy_ichk (char *__restrict__ __dest, const char *__restrict__ __src,
|
||||
size_t __len)
|
||||
{
|
||||
return __builtin___strncpy_chk (__dest, __src, __len, __ssp_bos (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define strcat(dest, src) \
|
||||
((__ssp_bos (dest) != (size_t) -1) \
|
||||
? __builtin___strcat_chk (dest, src, __ssp_bos (dest)) \
|
||||
: __strcat_ichk (dest, src))
|
||||
static inline __attribute__((__always_inline__)) char *
|
||||
__strcat_ichk (char *__restrict__ __dest, const char *__restrict__ __src)
|
||||
{
|
||||
return __builtin___strcat_chk (__dest, __src, __ssp_bos (__dest));
|
||||
}
|
||||
|
||||
|
||||
#define strncat(dest, src, len) \
|
||||
((__ssp_bos (dest) != (size_t) -1) \
|
||||
? __builtin___strncat_chk (dest, src, len, __ssp_bos (dest)) \
|
||||
: __strncat_ichk (dest, src, len))
|
||||
static inline __attribute__((__always_inline__)) char *
|
||||
__strncat_ichk (char *__restrict__ __dest, const char *__restrict__ __src,
|
||||
size_t __len)
|
||||
{
|
||||
return __builtin___strncat_chk (__dest, __src, __len, __ssp_bos (__dest));
|
||||
}
|
||||
|
||||
#endif /* __SSP_FORTIFY_LEVEL > 0 */
|
||||
#endif /* _SSP_STRING_H */
|
||||
@@ -0,0 +1,84 @@
|
||||
/* Checking macros for unistd functions.
|
||||
Copyright (C) 2005-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
In addition to the permissions in the GNU General Public License, the
|
||||
Free Software Foundation gives you unlimited permission to link the
|
||||
compiled version of this file into combinations with other programs,
|
||||
and to distribute those combinations without any restriction coming
|
||||
from the use of this file. (The General Public License restrictions
|
||||
do apply in other respects; for example, they cover modification of
|
||||
the file, and distribution when not linked into a combine
|
||||
executable.)
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
|
||||
#ifndef _SSP_UNISTD_H
|
||||
#define _SSP_UNISTD_H 1
|
||||
|
||||
#include <ssp.h>
|
||||
#include_next <unistd.h>
|
||||
|
||||
#if __SSP_FORTIFY_LEVEL > 0
|
||||
|
||||
#undef read
|
||||
#undef readlink
|
||||
#undef getcwd
|
||||
|
||||
extern ssize_t __SSP_REDIRECT (__read_alias, (int __fd, void *__buf,
|
||||
size_t __nbytes), read);
|
||||
|
||||
extern inline __attribute__((__always_inline__)) ssize_t
|
||||
read (int __fd, void *__buf, size_t __nbytes)
|
||||
{
|
||||
if (__ssp_bos0 (__buf) != (size_t) -1 && __nbytes > __ssp_bos0 (__buf))
|
||||
__chk_fail ();
|
||||
return __read_alias (__fd, __buf, __nbytes);
|
||||
}
|
||||
|
||||
extern int __SSP_REDIRECT (__readlink_alias,
|
||||
(const char *__restrict__ __path,
|
||||
char *__restrict__ __buf, size_t __len),
|
||||
readlink);
|
||||
|
||||
extern inline __attribute__((__always_inline__)) int
|
||||
readlink (const char *__restrict__ __path, char *__restrict__ __buf,
|
||||
size_t __len)
|
||||
{
|
||||
if (__ssp_bos (__buf) != (size_t) -1 && __len > __ssp_bos (__buf))
|
||||
__chk_fail ();
|
||||
return __readlink_alias (__path, __buf, __len);
|
||||
}
|
||||
|
||||
extern char *__SSP_REDIRECT (__getcwd_alias,
|
||||
(char *__buf, size_t __size), getcwd);
|
||||
|
||||
extern inline __attribute__((__always_inline__)) char *
|
||||
getcwd (char *__buf, size_t __size)
|
||||
{
|
||||
if (__ssp_bos (__buf) != (size_t) -1 && __size > __ssp_bos (__buf))
|
||||
__chk_fail ();
|
||||
return __getcwd_alias (__buf, __size);
|
||||
}
|
||||
|
||||
#endif /* __SSP_FORTIFY_LEVEL > 0 */
|
||||
#endif /* _SSP_UNISTD_H */
|
||||
@@ -0,0 +1,39 @@
|
||||
/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/* ISO C1X: 7.15 Alignment <stdalign.h>. */
|
||||
|
||||
#ifndef _STDALIGN_H
|
||||
#define _STDALIGN_H
|
||||
|
||||
#ifndef __cplusplus
|
||||
|
||||
#define alignas _Alignas
|
||||
#define alignof _Alignof
|
||||
|
||||
#define __alignas_is_defined 1
|
||||
#define __alignof_is_defined 1
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* stdalign.h */
|
||||
@@ -0,0 +1,127 @@
|
||||
/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.15 Variable arguments <stdarg.h>
|
||||
*/
|
||||
|
||||
#ifndef _STDARG_H
|
||||
#ifndef _ANSI_STDARG_H_
|
||||
#ifndef __need___va_list
|
||||
#define _STDARG_H
|
||||
#define _ANSI_STDARG_H_
|
||||
#endif /* not __need___va_list */
|
||||
#undef __need___va_list
|
||||
|
||||
/* Define __gnuc_va_list. */
|
||||
|
||||
#ifndef __GNUC_VA_LIST
|
||||
#define __GNUC_VA_LIST
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
#endif
|
||||
|
||||
/* Define the standard macros for the user,
|
||||
if this invocation was from the user program. */
|
||||
#ifdef _STDARG_H
|
||||
|
||||
#define va_start(v,l) __builtin_va_start(v,l)
|
||||
#define va_end(v) __builtin_va_end(v)
|
||||
#define va_arg(v,l) __builtin_va_arg(v,l)
|
||||
#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L \
|
||||
|| __cplusplus + 0 >= 201103L
|
||||
#define va_copy(d,s) __builtin_va_copy(d,s)
|
||||
#endif
|
||||
#define __va_copy(d,s) __builtin_va_copy(d,s)
|
||||
|
||||
/* Define va_list, if desired, from __gnuc_va_list. */
|
||||
/* We deliberately do not define va_list when called from
|
||||
stdio.h, because ANSI C says that stdio.h is not supposed to define
|
||||
va_list. stdio.h needs to have access to that data type,
|
||||
but must not use that name. It should use the name __gnuc_va_list,
|
||||
which is safe because it is reserved for the implementation. */
|
||||
|
||||
#ifdef _BSD_VA_LIST
|
||||
#undef _BSD_VA_LIST
|
||||
#endif
|
||||
|
||||
#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
|
||||
/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
|
||||
so we must avoid testing it and setting it here.
|
||||
SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
|
||||
have no conflict with that. */
|
||||
#ifndef _VA_LIST_
|
||||
#define _VA_LIST_
|
||||
#ifdef __i860__
|
||||
#ifndef _VA_LIST
|
||||
#define _VA_LIST va_list
|
||||
#endif
|
||||
#endif /* __i860__ */
|
||||
typedef __gnuc_va_list va_list;
|
||||
#ifdef _SCO_DS
|
||||
#define __VA_LIST
|
||||
#endif
|
||||
#endif /* _VA_LIST_ */
|
||||
#else /* not __svr4__ || _SCO_DS */
|
||||
|
||||
/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
|
||||
But on BSD NET2 we must not test or define or undef it.
|
||||
(Note that the comments in NET 2's ansi.h
|
||||
are incorrect for _VA_LIST_--see stdio.h!) */
|
||||
#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
|
||||
/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5 */
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
/* The macro _VA_LIST is used in SCO Unix 3.2. */
|
||||
#ifndef _VA_LIST
|
||||
/* The macro _VA_LIST_T_H is used in the Bull dpx2 */
|
||||
#ifndef _VA_LIST_T_H
|
||||
/* The macro __va_list__ is used by BeOS. */
|
||||
#ifndef __va_list__
|
||||
typedef __gnuc_va_list va_list;
|
||||
#endif /* not __va_list__ */
|
||||
#endif /* not _VA_LIST_T_H */
|
||||
#endif /* not _VA_LIST */
|
||||
#endif /* not _VA_LIST_DEFINED */
|
||||
#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
|
||||
#define _VA_LIST_
|
||||
#endif
|
||||
#ifndef _VA_LIST
|
||||
#define _VA_LIST
|
||||
#endif
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#define _VA_LIST_DEFINED
|
||||
#endif
|
||||
#ifndef _VA_LIST_T_H
|
||||
#define _VA_LIST_T_H
|
||||
#endif
|
||||
#ifndef __va_list__
|
||||
#define __va_list__
|
||||
#endif
|
||||
|
||||
#endif /* not _VA_LIST_, except on certain systems */
|
||||
|
||||
#endif /* not __svr4__ */
|
||||
|
||||
#endif /* _STDARG_H */
|
||||
|
||||
#endif /* not _ANSI_STDARG_H_ */
|
||||
#endif /* not _STDARG_H */
|
||||
@@ -0,0 +1,243 @@
|
||||
/* Copyright (C) 2013-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/* ISO C11 Standard: 7.17 Atomics <stdatomic.h>. */
|
||||
|
||||
#ifndef _STDATOMIC_H
|
||||
#define _STDATOMIC_H
|
||||
|
||||
typedef enum
|
||||
{
|
||||
memory_order_relaxed = __ATOMIC_RELAXED,
|
||||
memory_order_consume = __ATOMIC_CONSUME,
|
||||
memory_order_acquire = __ATOMIC_ACQUIRE,
|
||||
memory_order_release = __ATOMIC_RELEASE,
|
||||
memory_order_acq_rel = __ATOMIC_ACQ_REL,
|
||||
memory_order_seq_cst = __ATOMIC_SEQ_CST
|
||||
} memory_order;
|
||||
|
||||
|
||||
typedef _Atomic _Bool atomic_bool;
|
||||
typedef _Atomic char atomic_char;
|
||||
typedef _Atomic signed char atomic_schar;
|
||||
typedef _Atomic unsigned char atomic_uchar;
|
||||
typedef _Atomic short atomic_short;
|
||||
typedef _Atomic unsigned short atomic_ushort;
|
||||
typedef _Atomic int atomic_int;
|
||||
typedef _Atomic unsigned int atomic_uint;
|
||||
typedef _Atomic long atomic_long;
|
||||
typedef _Atomic unsigned long atomic_ulong;
|
||||
typedef _Atomic long long atomic_llong;
|
||||
typedef _Atomic unsigned long long atomic_ullong;
|
||||
typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
|
||||
typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
|
||||
typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
|
||||
typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
|
||||
typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
|
||||
typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
|
||||
typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
|
||||
typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
|
||||
typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
|
||||
typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
|
||||
typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
|
||||
typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
|
||||
typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
|
||||
typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
|
||||
typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
|
||||
typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
|
||||
typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
|
||||
typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
|
||||
typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
|
||||
typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
|
||||
typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
|
||||
typedef _Atomic __SIZE_TYPE__ atomic_size_t;
|
||||
typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
|
||||
typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
|
||||
typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
|
||||
|
||||
|
||||
#define ATOMIC_VAR_INIT(VALUE) (VALUE)
|
||||
|
||||
/* Initialize an atomic object pointed to by PTR with VAL. */
|
||||
#define atomic_init(PTR, VAL) \
|
||||
atomic_store_explicit (PTR, VAL, __ATOMIC_RELAXED)
|
||||
|
||||
#define kill_dependency(Y) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __kill_dependency_tmp = (Y); \
|
||||
__kill_dependency_tmp; \
|
||||
})
|
||||
|
||||
extern void atomic_thread_fence (memory_order);
|
||||
#define atomic_thread_fence(MO) __atomic_thread_fence (MO)
|
||||
extern void atomic_signal_fence (memory_order);
|
||||
#define atomic_signal_fence(MO) __atomic_signal_fence (MO)
|
||||
#define atomic_is_lock_free(OBJ) __atomic_is_lock_free (sizeof (*(OBJ)), (OBJ))
|
||||
|
||||
#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
|
||||
#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
|
||||
#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
|
||||
#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
|
||||
#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE
|
||||
#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
|
||||
#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
|
||||
#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
|
||||
#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
|
||||
#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
|
||||
|
||||
|
||||
/* Note that these macros require __typeof__ and __auto_type to remove
|
||||
_Atomic qualifiers (and const qualifiers, if those are valid on
|
||||
macro operands).
|
||||
|
||||
Also note that the header file uses the generic form of __atomic
|
||||
builtins, which requires the address to be taken of the value
|
||||
parameter, and then we pass that value on. This allows the macros
|
||||
to work for any type, and the compiler is smart enough to convert
|
||||
these to lock-free _N variants if possible, and throw away the
|
||||
temps. */
|
||||
|
||||
#define atomic_store_explicit(PTR, VAL, MO) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __atomic_store_ptr = (PTR); \
|
||||
__typeof__ (*__atomic_store_ptr) __atomic_store_tmp = (VAL); \
|
||||
__atomic_store (__atomic_store_ptr, &__atomic_store_tmp, (MO)); \
|
||||
})
|
||||
|
||||
#define atomic_store(PTR, VAL) \
|
||||
atomic_store_explicit (PTR, VAL, __ATOMIC_SEQ_CST)
|
||||
|
||||
|
||||
#define atomic_load_explicit(PTR, MO) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __atomic_load_ptr = (PTR); \
|
||||
__typeof__ (*__atomic_load_ptr) __atomic_load_tmp; \
|
||||
__atomic_load (__atomic_load_ptr, &__atomic_load_tmp, (MO)); \
|
||||
__atomic_load_tmp; \
|
||||
})
|
||||
|
||||
#define atomic_load(PTR) atomic_load_explicit (PTR, __ATOMIC_SEQ_CST)
|
||||
|
||||
|
||||
#define atomic_exchange_explicit(PTR, VAL, MO) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __atomic_exchange_ptr = (PTR); \
|
||||
__typeof__ (*__atomic_exchange_ptr) __atomic_exchange_val = (VAL); \
|
||||
__typeof__ (*__atomic_exchange_ptr) __atomic_exchange_tmp; \
|
||||
__atomic_exchange (__atomic_exchange_ptr, &__atomic_exchange_val, \
|
||||
&__atomic_exchange_tmp, (MO)); \
|
||||
__atomic_exchange_tmp; \
|
||||
})
|
||||
|
||||
#define atomic_exchange(PTR, VAL) \
|
||||
atomic_exchange_explicit (PTR, VAL, __ATOMIC_SEQ_CST)
|
||||
|
||||
|
||||
#define atomic_compare_exchange_strong_explicit(PTR, VAL, DES, SUC, FAIL) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __atomic_compare_exchange_ptr = (PTR); \
|
||||
__typeof__ (*__atomic_compare_exchange_ptr) __atomic_compare_exchange_tmp \
|
||||
= (DES); \
|
||||
__atomic_compare_exchange (__atomic_compare_exchange_ptr, (VAL), \
|
||||
&__atomic_compare_exchange_tmp, 0, \
|
||||
(SUC), (FAIL)); \
|
||||
})
|
||||
|
||||
#define atomic_compare_exchange_strong(PTR, VAL, DES) \
|
||||
atomic_compare_exchange_strong_explicit (PTR, VAL, DES, __ATOMIC_SEQ_CST, \
|
||||
__ATOMIC_SEQ_CST)
|
||||
|
||||
#define atomic_compare_exchange_weak_explicit(PTR, VAL, DES, SUC, FAIL) \
|
||||
__extension__ \
|
||||
({ \
|
||||
__auto_type __atomic_compare_exchange_ptr = (PTR); \
|
||||
__typeof__ (*__atomic_compare_exchange_ptr) __atomic_compare_exchange_tmp \
|
||||
= (DES); \
|
||||
__atomic_compare_exchange (__atomic_compare_exchange_ptr, (VAL), \
|
||||
&__atomic_compare_exchange_tmp, 1, \
|
||||
(SUC), (FAIL)); \
|
||||
})
|
||||
|
||||
#define atomic_compare_exchange_weak(PTR, VAL, DES) \
|
||||
atomic_compare_exchange_weak_explicit (PTR, VAL, DES, __ATOMIC_SEQ_CST, \
|
||||
__ATOMIC_SEQ_CST)
|
||||
|
||||
|
||||
|
||||
#define atomic_fetch_add(PTR, VAL) __atomic_fetch_add ((PTR), (VAL), \
|
||||
__ATOMIC_SEQ_CST)
|
||||
#define atomic_fetch_add_explicit(PTR, VAL, MO) \
|
||||
__atomic_fetch_add ((PTR), (VAL), (MO))
|
||||
|
||||
#define atomic_fetch_sub(PTR, VAL) __atomic_fetch_sub ((PTR), (VAL), \
|
||||
__ATOMIC_SEQ_CST)
|
||||
#define atomic_fetch_sub_explicit(PTR, VAL, MO) \
|
||||
__atomic_fetch_sub ((PTR), (VAL), (MO))
|
||||
|
||||
#define atomic_fetch_or(PTR, VAL) __atomic_fetch_or ((PTR), (VAL), \
|
||||
__ATOMIC_SEQ_CST)
|
||||
#define atomic_fetch_or_explicit(PTR, VAL, MO) \
|
||||
__atomic_fetch_or ((PTR), (VAL), (MO))
|
||||
|
||||
#define atomic_fetch_xor(PTR, VAL) __atomic_fetch_xor ((PTR), (VAL), \
|
||||
__ATOMIC_SEQ_CST)
|
||||
#define atomic_fetch_xor_explicit(PTR, VAL, MO) \
|
||||
__atomic_fetch_xor ((PTR), (VAL), (MO))
|
||||
|
||||
#define atomic_fetch_and(PTR, VAL) __atomic_fetch_and ((PTR), (VAL), \
|
||||
__ATOMIC_SEQ_CST)
|
||||
#define atomic_fetch_and_explicit(PTR, VAL, MO) \
|
||||
__atomic_fetch_and ((PTR), (VAL), (MO))
|
||||
|
||||
|
||||
typedef _Atomic struct
|
||||
{
|
||||
#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
|
||||
_Bool __val;
|
||||
#else
|
||||
unsigned char __val;
|
||||
#endif
|
||||
} atomic_flag;
|
||||
|
||||
#define ATOMIC_FLAG_INIT { 0 }
|
||||
|
||||
|
||||
extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
|
||||
#define atomic_flag_test_and_set(PTR) \
|
||||
__atomic_test_and_set ((PTR), __ATOMIC_SEQ_CST)
|
||||
extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
|
||||
memory_order);
|
||||
#define atomic_flag_test_and_set_explicit(PTR, MO) \
|
||||
__atomic_test_and_set ((PTR), (MO))
|
||||
|
||||
extern void atomic_flag_clear (volatile atomic_flag *);
|
||||
#define atomic_flag_clear(PTR) __atomic_clear ((PTR), __ATOMIC_SEQ_CST)
|
||||
extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
|
||||
#define atomic_flag_clear_explicit(PTR, MO) __atomic_clear ((PTR), (MO))
|
||||
|
||||
#endif /* _STDATOMIC_H */
|
||||
@@ -0,0 +1,54 @@
|
||||
/* Copyright (C) 1998-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
|
||||
*/
|
||||
|
||||
#ifndef _STDBOOL_H
|
||||
#define _STDBOOL_H
|
||||
|
||||
#ifndef __cplusplus
|
||||
|
||||
#define bool _Bool
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
#else /* __cplusplus */
|
||||
|
||||
/* Supporting _Bool in C++ is a GCC extension. */
|
||||
#define _Bool bool
|
||||
|
||||
#if __cplusplus < 201103L
|
||||
/* Defining these macros in C++98 is a GCC extension. */
|
||||
#define bool bool
|
||||
#define false false
|
||||
#define true true
|
||||
#endif
|
||||
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* Signal that all the definitions are present. */
|
||||
#define __bool_true_false_are_defined 1
|
||||
|
||||
#endif /* stdbool.h */
|
||||
@@ -0,0 +1,451 @@
|
||||
/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.17 Common definitions <stddef.h>
|
||||
*/
|
||||
#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
|
||||
&& !defined(__STDDEF_H__)) \
|
||||
|| defined(__need_wchar_t) || defined(__need_size_t) \
|
||||
|| defined(__need_ptrdiff_t) || defined(__need_NULL) \
|
||||
|| defined(__need_wint_t)
|
||||
|
||||
/* Any one of these symbols __need_* means that GNU libc
|
||||
wants us just to define one data type. So don't define
|
||||
the symbols that indicate this file's entire job has been done. */
|
||||
#if (!defined(__need_wchar_t) && !defined(__need_size_t) \
|
||||
&& !defined(__need_ptrdiff_t) && !defined(__need_NULL) \
|
||||
&& !defined(__need_wint_t))
|
||||
#define _STDDEF_H
|
||||
#define _STDDEF_H_
|
||||
/* snaroff@next.com says the NeXT needs this. */
|
||||
#define _ANSI_STDDEF_H
|
||||
#endif
|
||||
|
||||
#ifndef __sys_stdtypes_h
|
||||
/* This avoids lossage on SunOS but only if stdtypes.h comes first.
|
||||
There's no way to win with the other order! Sun lossage. */
|
||||
|
||||
/* On 4.3bsd-net2, make sure ansi.h is included, so we have
|
||||
one less case to deal with in the following. */
|
||||
#if defined (__BSD_NET2__) || defined (____386BSD____) || (defined (__FreeBSD__) && (__FreeBSD__ < 5)) || defined(__NetBSD__)
|
||||
#include <machine/ansi.h>
|
||||
#endif
|
||||
/* On FreeBSD 5, machine/ansi.h does not exist anymore... */
|
||||
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
||||
#include <sys/_types.h>
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
|
||||
defined if the corresponding type is *not* defined.
|
||||
FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_.
|
||||
NetBSD defines _I386_ANSI_H_ and _X86_64_ANSI_H_ instead of _ANSI_H_ */
|
||||
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_)
|
||||
#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
|
||||
#define _SIZE_T
|
||||
#endif
|
||||
#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
|
||||
#define _PTRDIFF_T
|
||||
#endif
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_. */
|
||||
#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#define _WCHAR_T
|
||||
#endif
|
||||
#endif
|
||||
/* Undef _FOO_T_ if we are supposed to define foo_t. */
|
||||
#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#if defined (__need_size_t) || defined (_STDDEF_H_)
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#if defined (__need_wchar_t) || defined (_STDDEF_H_)
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_) */
|
||||
|
||||
/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
|
||||
Just ignore it. */
|
||||
#if defined (__sequent__) && defined (_PTRDIFF_T_)
|
||||
#undef _PTRDIFF_T_
|
||||
#endif
|
||||
|
||||
/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
|
||||
_TYPE_size_t which will typedef size_t. fixincludes patched the
|
||||
vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
|
||||
not defined, and so that defining this macro defines _GCC_SIZE_T.
|
||||
If we find that the macros are still defined at this point, we must
|
||||
invoke them so that the type is defined as expected. */
|
||||
#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
|
||||
_TYPE_ptrdiff_t;
|
||||
#undef _TYPE_ptrdiff_t
|
||||
#endif
|
||||
#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
|
||||
_TYPE_size_t;
|
||||
#undef _TYPE_size_t
|
||||
#endif
|
||||
#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
|
||||
_TYPE_wchar_t;
|
||||
#undef _TYPE_wchar_t
|
||||
#endif
|
||||
|
||||
/* In case nobody has defined these types, but we aren't running under
|
||||
GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
|
||||
__WCHAR_TYPE__ have reasonable values. This can happen if the
|
||||
parts of GCC is compiled by an older compiler, that actually
|
||||
include gstddef.h, such as collect2. */
|
||||
|
||||
/* Signed type of difference of two pointers. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
|
||||
#ifndef _PTRDIFF_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _T_PTRDIFF_
|
||||
#ifndef _T_PTRDIFF
|
||||
#ifndef __PTRDIFF_T
|
||||
#ifndef _PTRDIFF_T_
|
||||
#ifndef _BSD_PTRDIFF_T_
|
||||
#ifndef ___int_ptrdiff_t_h
|
||||
#ifndef _GCC_PTRDIFF_T
|
||||
#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
|
||||
#define _PTRDIFF_T
|
||||
#define _T_PTRDIFF_
|
||||
#define _T_PTRDIFF
|
||||
#define __PTRDIFF_T
|
||||
#define _PTRDIFF_T_
|
||||
#define _BSD_PTRDIFF_T_
|
||||
#define ___int_ptrdiff_t_h
|
||||
#define _GCC_PTRDIFF_T
|
||||
#define _PTRDIFF_T_DECLARED
|
||||
#ifndef __PTRDIFF_TYPE__
|
||||
#define __PTRDIFF_TYPE__ long int
|
||||
#endif
|
||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
#endif /* _PTRDIFF_T_DECLARED */
|
||||
#endif /* _GCC_PTRDIFF_T */
|
||||
#endif /* ___int_ptrdiff_t_h */
|
||||
#endif /* _BSD_PTRDIFF_T_ */
|
||||
#endif /* _PTRDIFF_T_ */
|
||||
#endif /* __PTRDIFF_T */
|
||||
#endif /* _T_PTRDIFF */
|
||||
#endif /* _T_PTRDIFF_ */
|
||||
#endif /* _PTRDIFF_T */
|
||||
|
||||
/* If this symbol has done its job, get rid of it. */
|
||||
#undef __need_ptrdiff_t
|
||||
|
||||
#endif /* _STDDEF_H or __need_ptrdiff_t. */
|
||||
|
||||
/* Unsigned type of `sizeof' something. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_size_t)
|
||||
#ifndef __size_t__ /* BeOS */
|
||||
#ifndef __SIZE_T__ /* Cray Unicos/Mk */
|
||||
#ifndef _SIZE_T /* in case <sys/types.h> has defined it. */
|
||||
#ifndef _SYS_SIZE_T_H
|
||||
#ifndef _T_SIZE_
|
||||
#ifndef _T_SIZE
|
||||
#ifndef __SIZE_T
|
||||
#ifndef _SIZE_T_
|
||||
#ifndef _BSD_SIZE_T_
|
||||
#ifndef _SIZE_T_DEFINED_
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#ifndef _BSD_SIZE_T_DEFINED_ /* Darwin */
|
||||
#ifndef _SIZE_T_DECLARED /* FreeBSD 5 */
|
||||
#ifndef ___int_size_t_h
|
||||
#ifndef _GCC_SIZE_T
|
||||
#ifndef _SIZET_
|
||||
#ifndef __size_t
|
||||
#define __size_t__ /* BeOS */
|
||||
#define __SIZE_T__ /* Cray Unicos/Mk */
|
||||
#define _SIZE_T
|
||||
#define _SYS_SIZE_T_H
|
||||
#define _T_SIZE_
|
||||
#define _T_SIZE
|
||||
#define __SIZE_T
|
||||
#define _SIZE_T_
|
||||
#define _BSD_SIZE_T_
|
||||
#define _SIZE_T_DEFINED_
|
||||
#define _SIZE_T_DEFINED
|
||||
#define _BSD_SIZE_T_DEFINED_ /* Darwin */
|
||||
#define _SIZE_T_DECLARED /* FreeBSD 5 */
|
||||
#define ___int_size_t_h
|
||||
#define _GCC_SIZE_T
|
||||
#define _SIZET_
|
||||
#if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
|
||||
|| defined(__DragonFly__) \
|
||||
|| defined(__FreeBSD_kernel__)
|
||||
/* __size_t is a typedef on FreeBSD 5, must not trash it. */
|
||||
#elif defined (__VMS__)
|
||||
/* __size_t is also a typedef on VMS. */
|
||||
#else
|
||||
#define __size_t
|
||||
#endif
|
||||
#ifndef __SIZE_TYPE__
|
||||
#define __SIZE_TYPE__ long unsigned int
|
||||
#endif
|
||||
#if !(defined (__GNUG__) && defined (size_t))
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
#ifdef __BEOS__
|
||||
typedef long ssize_t;
|
||||
#endif /* __BEOS__ */
|
||||
#endif /* !(defined (__GNUG__) && defined (size_t)) */
|
||||
#endif /* __size_t */
|
||||
#endif /* _SIZET_ */
|
||||
#endif /* _GCC_SIZE_T */
|
||||
#endif /* ___int_size_t_h */
|
||||
#endif /* _SIZE_T_DECLARED */
|
||||
#endif /* _BSD_SIZE_T_DEFINED_ */
|
||||
#endif /* _SIZE_T_DEFINED */
|
||||
#endif /* _SIZE_T_DEFINED_ */
|
||||
#endif /* _BSD_SIZE_T_ */
|
||||
#endif /* _SIZE_T_ */
|
||||
#endif /* __SIZE_T */
|
||||
#endif /* _T_SIZE */
|
||||
#endif /* _T_SIZE_ */
|
||||
#endif /* _SYS_SIZE_T_H */
|
||||
#endif /* _SIZE_T */
|
||||
#endif /* __SIZE_T__ */
|
||||
#endif /* __size_t__ */
|
||||
#undef __need_size_t
|
||||
#endif /* _STDDEF_H or __need_size_t. */
|
||||
|
||||
|
||||
/* Wide character type.
|
||||
Locale-writers should change this as necessary to
|
||||
be big enough to hold unique values not between 0 and 127,
|
||||
and not (wchar_t) -1, for each defined multibyte character. */
|
||||
|
||||
/* Define this type if we are doing the whole job,
|
||||
or if we want this type in particular. */
|
||||
#if defined (_STDDEF_H) || defined (__need_wchar_t)
|
||||
#ifndef __wchar_t__ /* BeOS */
|
||||
#ifndef __WCHAR_T__ /* Cray Unicos/Mk */
|
||||
#ifndef _WCHAR_T
|
||||
#ifndef _T_WCHAR_
|
||||
#ifndef _T_WCHAR
|
||||
#ifndef __WCHAR_T
|
||||
#ifndef _WCHAR_T_
|
||||
#ifndef _BSD_WCHAR_T_
|
||||
#ifndef _BSD_WCHAR_T_DEFINED_ /* Darwin */
|
||||
#ifndef _BSD_RUNE_T_DEFINED_ /* Darwin */
|
||||
#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
|
||||
#ifndef _WCHAR_T_DEFINED_
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
#ifndef _WCHAR_T_H
|
||||
#ifndef ___int_wchar_t_h
|
||||
#ifndef __INT_WCHAR_T_H
|
||||
#ifndef _GCC_WCHAR_T
|
||||
#define __wchar_t__ /* BeOS */
|
||||
#define __WCHAR_T__ /* Cray Unicos/Mk */
|
||||
#define _WCHAR_T
|
||||
#define _T_WCHAR_
|
||||
#define _T_WCHAR
|
||||
#define __WCHAR_T
|
||||
#define _WCHAR_T_
|
||||
#define _BSD_WCHAR_T_
|
||||
#define _WCHAR_T_DEFINED_
|
||||
#define _WCHAR_T_DEFINED
|
||||
#define _WCHAR_T_H
|
||||
#define ___int_wchar_t_h
|
||||
#define __INT_WCHAR_T_H
|
||||
#define _GCC_WCHAR_T
|
||||
#define _WCHAR_T_DECLARED
|
||||
|
||||
/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
|
||||
instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
|
||||
symbols in the _FOO_T_ family, stays defined even after its
|
||||
corresponding type is defined). If we define wchar_t, then we
|
||||
must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
|
||||
we undef _WCHAR_T_, then we must also define rune_t, since
|
||||
headers like runetype.h assume that if machine/ansi.h is included,
|
||||
and _BSD_WCHAR_T_ is not defined, then rune_t is available.
|
||||
machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
|
||||
the same type." */
|
||||
#ifdef _BSD_WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#ifdef _BSD_RUNE_T_
|
||||
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
||||
typedef _BSD_RUNE_T_ rune_t;
|
||||
#define _BSD_WCHAR_T_DEFINED_
|
||||
#define _BSD_RUNE_T_DEFINED_ /* Darwin */
|
||||
#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
|
||||
/* Why is this file so hard to maintain properly? In contrast to
|
||||
the comment above regarding BSD/386 1.1, on FreeBSD for as long
|
||||
as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
|
||||
redundant typedefs will occur when stdlib.h is included after this file. */
|
||||
#undef _BSD_RUNE_T_
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
/* FreeBSD 5 can't be handled well using "traditional" logic above
|
||||
since it no longer defines _BSD_RUNE_T_ yet still desires to export
|
||||
rune_t in some cases... */
|
||||
#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
|
||||
#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
|
||||
#if __BSD_VISIBLE
|
||||
#ifndef _RUNE_T_DECLARED
|
||||
typedef __rune_t rune_t;
|
||||
#define _RUNE_T_DECLARED
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __WCHAR_TYPE__
|
||||
#define __WCHAR_TYPE__ int
|
||||
#endif
|
||||
#ifndef __cplusplus
|
||||
typedef __WCHAR_TYPE__ wchar_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif /* _WCHAR_T_DECLARED */
|
||||
#endif /* _BSD_RUNE_T_DEFINED_ */
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif /* __WCHAR_T__ */
|
||||
#endif /* __wchar_t__ */
|
||||
#undef __need_wchar_t
|
||||
#endif /* _STDDEF_H or __need_wchar_t. */
|
||||
|
||||
#if defined (__need_wint_t)
|
||||
#ifndef _WINT_T
|
||||
#define _WINT_T
|
||||
|
||||
#ifndef __WINT_TYPE__
|
||||
#define __WINT_TYPE__ unsigned int
|
||||
#endif
|
||||
typedef __WINT_TYPE__ wint_t;
|
||||
#endif
|
||||
#undef __need_wint_t
|
||||
#endif
|
||||
|
||||
/* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
|
||||
are already defined. */
|
||||
/* BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here. */
|
||||
/* NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here. */
|
||||
#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) || defined(_X86_64_ANSI_H_) || defined(_I386_ANSI_H_)
|
||||
/* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
|
||||
are probably typos and should be removed before 2.8 is released. */
|
||||
#ifdef _GCC_PTRDIFF_T_
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T_
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T_
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
/* The following ones are the real ones. */
|
||||
#ifdef _GCC_PTRDIFF_T
|
||||
#undef _PTRDIFF_T_
|
||||
#undef _BSD_PTRDIFF_T_
|
||||
#endif
|
||||
#ifdef _GCC_SIZE_T
|
||||
#undef _SIZE_T_
|
||||
#undef _BSD_SIZE_T_
|
||||
#endif
|
||||
#ifdef _GCC_WCHAR_T
|
||||
#undef _WCHAR_T_
|
||||
#undef _BSD_WCHAR_T_
|
||||
#endif
|
||||
#endif /* _ANSI_H_ || _MACHINE_ANSI_H_ || _X86_64_ANSI_H_ || _I386_ANSI_H_ */
|
||||
|
||||
#endif /* __sys_stdtypes_h */
|
||||
|
||||
/* A null pointer constant. */
|
||||
|
||||
#if defined (_STDDEF_H) || defined (__need_NULL)
|
||||
#undef NULL /* in case <stdio.h> has defined it. */
|
||||
#ifdef __GNUG__
|
||||
#define NULL __null
|
||||
#else /* G++ */
|
||||
#ifndef __cplusplus
|
||||
#define NULL ((void *)0)
|
||||
#else /* C++ */
|
||||
#define NULL 0
|
||||
#endif /* C++ */
|
||||
#endif /* G++ */
|
||||
#endif /* NULL not defined and <stddef.h> or need NULL. */
|
||||
#undef __need_NULL
|
||||
|
||||
#ifdef _STDDEF_H
|
||||
|
||||
/* Offset of member MEMBER in a struct of type TYPE. */
|
||||
#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
|
||||
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \
|
||||
|| (defined(__cplusplus) && __cplusplus >= 201103L)
|
||||
#ifndef _GCC_MAX_ALIGN_T
|
||||
#define _GCC_MAX_ALIGN_T
|
||||
/* Type whose alignment is supported in every context and is at least
|
||||
as great as that of any standard type not using alignment
|
||||
specifiers. */
|
||||
typedef struct {
|
||||
long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
|
||||
long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
|
||||
/* _Float128 is defined as a basic type, so max_align_t must be
|
||||
sufficiently aligned for it. This code must work in C++, so we
|
||||
use __float128 here; that is only available on some
|
||||
architectures, but only on i386 is extra alignment needed for
|
||||
__float128. */
|
||||
#ifdef __i386__
|
||||
__float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
|
||||
#endif
|
||||
} max_align_t;
|
||||
#endif
|
||||
#endif /* C11 or C++11. */
|
||||
|
||||
#if defined(__cplusplus) && __cplusplus >= 201103L
|
||||
#ifndef _GXX_NULLPTR_T
|
||||
#define _GXX_NULLPTR_T
|
||||
typedef decltype(nullptr) nullptr_t;
|
||||
#endif
|
||||
#endif /* C++11. */
|
||||
|
||||
#endif /* _STDDEF_H was defined this time */
|
||||
|
||||
#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
|
||||
|| __need_XXX was not defined before */
|
||||
@@ -0,0 +1,204 @@
|
||||
/* Copyright (C) 2007-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/* ISO/IEC JTC1 SC22 WG14 N1169
|
||||
* Date: 2006-04-04
|
||||
* ISO/IEC TR 18037
|
||||
* Programming languages - C - Extensions to support embedded processors
|
||||
*/
|
||||
|
||||
#ifndef _STDFIX_H
|
||||
#define _STDFIX_H
|
||||
|
||||
/* 7.18a.1 Introduction. */
|
||||
|
||||
#undef fract
|
||||
#undef accum
|
||||
#undef sat
|
||||
#define fract _Fract
|
||||
#define accum _Accum
|
||||
#define sat _Sat
|
||||
|
||||
/* 7.18a.3 Precision macros. */
|
||||
|
||||
#undef SFRACT_FBIT
|
||||
#undef SFRACT_MIN
|
||||
#undef SFRACT_MAX
|
||||
#undef SFRACT_EPSILON
|
||||
#define SFRACT_FBIT __SFRACT_FBIT__
|
||||
#define SFRACT_MIN __SFRACT_MIN__
|
||||
#define SFRACT_MAX __SFRACT_MAX__
|
||||
#define SFRACT_EPSILON __SFRACT_EPSILON__
|
||||
|
||||
#undef USFRACT_FBIT
|
||||
#undef USFRACT_MIN
|
||||
#undef USFRACT_MAX
|
||||
#undef USFRACT_EPSILON
|
||||
#define USFRACT_FBIT __USFRACT_FBIT__
|
||||
#define USFRACT_MIN __USFRACT_MIN__ /* GCC extension. */
|
||||
#define USFRACT_MAX __USFRACT_MAX__
|
||||
#define USFRACT_EPSILON __USFRACT_EPSILON__
|
||||
|
||||
#undef FRACT_FBIT
|
||||
#undef FRACT_MIN
|
||||
#undef FRACT_MAX
|
||||
#undef FRACT_EPSILON
|
||||
#define FRACT_FBIT __FRACT_FBIT__
|
||||
#define FRACT_MIN __FRACT_MIN__
|
||||
#define FRACT_MAX __FRACT_MAX__
|
||||
#define FRACT_EPSILON __FRACT_EPSILON__
|
||||
|
||||
#undef UFRACT_FBIT
|
||||
#undef UFRACT_MIN
|
||||
#undef UFRACT_MAX
|
||||
#undef UFRACT_EPSILON
|
||||
#define UFRACT_FBIT __UFRACT_FBIT__
|
||||
#define UFRACT_MIN __UFRACT_MIN__ /* GCC extension. */
|
||||
#define UFRACT_MAX __UFRACT_MAX__
|
||||
#define UFRACT_EPSILON __UFRACT_EPSILON__
|
||||
|
||||
#undef LFRACT_FBIT
|
||||
#undef LFRACT_MIN
|
||||
#undef LFRACT_MAX
|
||||
#undef LFRACT_EPSILON
|
||||
#define LFRACT_FBIT __LFRACT_FBIT__
|
||||
#define LFRACT_MIN __LFRACT_MIN__
|
||||
#define LFRACT_MAX __LFRACT_MAX__
|
||||
#define LFRACT_EPSILON __LFRACT_EPSILON__
|
||||
|
||||
#undef ULFRACT_FBIT
|
||||
#undef ULFRACT_MIN
|
||||
#undef ULFRACT_MAX
|
||||
#undef ULFRACT_EPSILON
|
||||
#define ULFRACT_FBIT __ULFRACT_FBIT__
|
||||
#define ULFRACT_MIN __ULFRACT_MIN__ /* GCC extension. */
|
||||
#define ULFRACT_MAX __ULFRACT_MAX__
|
||||
#define ULFRACT_EPSILON __ULFRACT_EPSILON__
|
||||
|
||||
#undef LLFRACT_FBIT
|
||||
#undef LLFRACT_MIN
|
||||
#undef LLFRACT_MAX
|
||||
#undef LLFRACT_EPSILON
|
||||
#define LLFRACT_FBIT __LLFRACT_FBIT__ /* GCC extension. */
|
||||
#define LLFRACT_MIN __LLFRACT_MIN__ /* GCC extension. */
|
||||
#define LLFRACT_MAX __LLFRACT_MAX__ /* GCC extension. */
|
||||
#define LLFRACT_EPSILON __LLFRACT_EPSILON__ /* GCC extension. */
|
||||
|
||||
#undef ULLFRACT_FBIT
|
||||
#undef ULLFRACT_MIN
|
||||
#undef ULLFRACT_MAX
|
||||
#undef ULLFRACT_EPSILON
|
||||
#define ULLFRACT_FBIT __ULLFRACT_FBIT__ /* GCC extension. */
|
||||
#define ULLFRACT_MIN __ULLFRACT_MIN__ /* GCC extension. */
|
||||
#define ULLFRACT_MAX __ULLFRACT_MAX__ /* GCC extension. */
|
||||
#define ULLFRACT_EPSILON __ULLFRACT_EPSILON__ /* GCC extension. */
|
||||
|
||||
#undef SACCUM_FBIT
|
||||
#undef SACCUM_IBIT
|
||||
#undef SACCUM_MIN
|
||||
#undef SACCUM_MAX
|
||||
#undef SACCUM_EPSILON
|
||||
#define SACCUM_FBIT __SACCUM_FBIT__
|
||||
#define SACCUM_IBIT __SACCUM_IBIT__
|
||||
#define SACCUM_MIN __SACCUM_MIN__
|
||||
#define SACCUM_MAX __SACCUM_MAX__
|
||||
#define SACCUM_EPSILON __SACCUM_EPSILON__
|
||||
|
||||
#undef USACCUM_FBIT
|
||||
#undef USACCUM_IBIT
|
||||
#undef USACCUM_MIN
|
||||
#undef USACCUM_MAX
|
||||
#undef USACCUM_EPSILON
|
||||
#define USACCUM_FBIT __USACCUM_FBIT__
|
||||
#define USACCUM_IBIT __USACCUM_IBIT__
|
||||
#define USACCUM_MIN __USACCUM_MIN__ /* GCC extension. */
|
||||
#define USACCUM_MAX __USACCUM_MAX__
|
||||
#define USACCUM_EPSILON __USACCUM_EPSILON__
|
||||
|
||||
#undef ACCUM_FBIT
|
||||
#undef ACCUM_IBIT
|
||||
#undef ACCUM_MIN
|
||||
#undef ACCUM_MAX
|
||||
#undef ACCUM_EPSILON
|
||||
#define ACCUM_FBIT __ACCUM_FBIT__
|
||||
#define ACCUM_IBIT __ACCUM_IBIT__
|
||||
#define ACCUM_MIN __ACCUM_MIN__
|
||||
#define ACCUM_MAX __ACCUM_MAX__
|
||||
#define ACCUM_EPSILON __ACCUM_EPSILON__
|
||||
|
||||
#undef UACCUM_FBIT
|
||||
#undef UACCUM_IBIT
|
||||
#undef UACCUM_MIN
|
||||
#undef UACCUM_MAX
|
||||
#undef UACCUM_EPSILON
|
||||
#define UACCUM_FBIT __UACCUM_FBIT__
|
||||
#define UACCUM_IBIT __UACCUM_IBIT__
|
||||
#define UACCUM_MIN __UACCUM_MIN__ /* GCC extension. */
|
||||
#define UACCUM_MAX __UACCUM_MAX__
|
||||
#define UACCUM_EPSILON __UACCUM_EPSILON__
|
||||
|
||||
#undef LACCUM_FBIT
|
||||
#undef LACCUM_IBIT
|
||||
#undef LACCUM_MIN
|
||||
#undef LACCUM_MAX
|
||||
#undef LACCUM_EPSILON
|
||||
#define LACCUM_FBIT __LACCUM_FBIT__
|
||||
#define LACCUM_IBIT __LACCUM_IBIT__
|
||||
#define LACCUM_MIN __LACCUM_MIN__
|
||||
#define LACCUM_MAX __LACCUM_MAX__
|
||||
#define LACCUM_EPSILON __LACCUM_EPSILON__
|
||||
|
||||
#undef ULACCUM_FBIT
|
||||
#undef ULACCUM_IBIT
|
||||
#undef ULACCUM_MIN
|
||||
#undef ULACCUM_MAX
|
||||
#undef ULACCUM_EPSILON
|
||||
#define ULACCUM_FBIT __ULACCUM_FBIT__
|
||||
#define ULACCUM_IBIT __ULACCUM_IBIT__
|
||||
#define ULACCUM_MIN __ULACCUM_MIN__ /* GCC extension. */
|
||||
#define ULACCUM_MAX __ULACCUM_MAX__
|
||||
#define ULACCUM_EPSILON __ULACCUM_EPSILON__
|
||||
|
||||
#undef LLACCUM_FBIT
|
||||
#undef LLACCUM_IBIT
|
||||
#undef LLACCUM_MIN
|
||||
#undef LLACCUM_MAX
|
||||
#undef LLACCUM_EPSILON
|
||||
#define LLACCUM_FBIT __LLACCUM_FBIT__ /* GCC extension. */
|
||||
#define LLACCUM_IBIT __LLACCUM_IBIT__ /* GCC extension. */
|
||||
#define LLACCUM_MIN __LLACCUM_MIN__ /* GCC extension. */
|
||||
#define LLACCUM_MAX __LLACCUM_MAX__ /* GCC extension. */
|
||||
#define LLACCUM_EPSILON __LLACCUM_EPSILON__ /* GCC extension. */
|
||||
|
||||
#undef ULLACCUM_FBIT
|
||||
#undef ULLACCUM_IBIT
|
||||
#undef ULLACCUM_MIN
|
||||
#undef ULLACCUM_MAX
|
||||
#undef ULLACCUM_EPSILON
|
||||
#define ULLACCUM_FBIT __ULLACCUM_FBIT__ /* GCC extension. */
|
||||
#define ULLACCUM_IBIT __ULLACCUM_IBIT__ /* GCC extension. */
|
||||
#define ULLACCUM_MIN __ULLACCUM_MIN__ /* GCC extension. */
|
||||
#define ULLACCUM_MAX __ULLACCUM_MAX__ /* GCC extension. */
|
||||
#define ULLACCUM_EPSILON __ULLACCUM_EPSILON__ /* GCC extension. */
|
||||
|
||||
#endif /* _STDFIX_H */
|
||||
@@ -0,0 +1,364 @@
|
||||
/* Copyright (C) 2008-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC 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.
|
||||
|
||||
GCC 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/>. */
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.18 Integer types <stdint.h>
|
||||
*/
|
||||
|
||||
#ifndef _GCC_STDINT_H
|
||||
#define _GCC_STDINT_H
|
||||
|
||||
/* 7.8.1.1 Exact-width integer types */
|
||||
|
||||
#ifdef __INT8_TYPE__
|
||||
typedef __INT8_TYPE__ int8_t;
|
||||
#endif
|
||||
#ifdef __INT16_TYPE__
|
||||
typedef __INT16_TYPE__ int16_t;
|
||||
#endif
|
||||
#ifdef __INT32_TYPE__
|
||||
typedef __INT32_TYPE__ int32_t;
|
||||
#endif
|
||||
#ifdef __INT64_TYPE__
|
||||
typedef __INT64_TYPE__ int64_t;
|
||||
#endif
|
||||
#ifdef __UINT8_TYPE__
|
||||
typedef __UINT8_TYPE__ uint8_t;
|
||||
#endif
|
||||
#ifdef __UINT16_TYPE__
|
||||
typedef __UINT16_TYPE__ uint16_t;
|
||||
#endif
|
||||
#ifdef __UINT32_TYPE__
|
||||
typedef __UINT32_TYPE__ uint32_t;
|
||||
#endif
|
||||
#ifdef __UINT64_TYPE__
|
||||
typedef __UINT64_TYPE__ uint64_t;
|
||||
#endif
|
||||
|
||||
/* 7.8.1.2 Minimum-width integer types */
|
||||
|
||||
typedef __INT_LEAST8_TYPE__ int_least8_t;
|
||||
typedef __INT_LEAST16_TYPE__ int_least16_t;
|
||||
typedef __INT_LEAST32_TYPE__ int_least32_t;
|
||||
typedef __INT_LEAST64_TYPE__ int_least64_t;
|
||||
typedef __UINT_LEAST8_TYPE__ uint_least8_t;
|
||||
typedef __UINT_LEAST16_TYPE__ uint_least16_t;
|
||||
typedef __UINT_LEAST32_TYPE__ uint_least32_t;
|
||||
typedef __UINT_LEAST64_TYPE__ uint_least64_t;
|
||||
|
||||
/* 7.8.1.3 Fastest minimum-width integer types */
|
||||
|
||||
typedef __INT_FAST8_TYPE__ int_fast8_t;
|
||||
typedef __INT_FAST16_TYPE__ int_fast16_t;
|
||||
typedef __INT_FAST32_TYPE__ int_fast32_t;
|
||||
typedef __INT_FAST64_TYPE__ int_fast64_t;
|
||||
typedef __UINT_FAST8_TYPE__ uint_fast8_t;
|
||||
typedef __UINT_FAST16_TYPE__ uint_fast16_t;
|
||||
typedef __UINT_FAST32_TYPE__ uint_fast32_t;
|
||||
typedef __UINT_FAST64_TYPE__ uint_fast64_t;
|
||||
|
||||
/* 7.8.1.4 Integer types capable of holding object pointers */
|
||||
|
||||
#ifdef __INTPTR_TYPE__
|
||||
typedef __INTPTR_TYPE__ intptr_t;
|
||||
#endif
|
||||
#ifdef __UINTPTR_TYPE__
|
||||
typedef __UINTPTR_TYPE__ uintptr_t;
|
||||
#endif
|
||||
|
||||
/* 7.8.1.5 Greatest-width integer types */
|
||||
|
||||
typedef __INTMAX_TYPE__ intmax_t;
|
||||
typedef __UINTMAX_TYPE__ uintmax_t;
|
||||
|
||||
#if (!defined __cplusplus || __cplusplus >= 201103L \
|
||||
|| defined __STDC_LIMIT_MACROS)
|
||||
|
||||
/* 7.18.2 Limits of specified-width integer types */
|
||||
|
||||
#ifdef __INT8_MAX__
|
||||
# undef INT8_MAX
|
||||
# define INT8_MAX __INT8_MAX__
|
||||
# undef INT8_MIN
|
||||
# define INT8_MIN (-INT8_MAX - 1)
|
||||
#endif
|
||||
#ifdef __UINT8_MAX__
|
||||
# undef UINT8_MAX
|
||||
# define UINT8_MAX __UINT8_MAX__
|
||||
#endif
|
||||
#ifdef __INT16_MAX__
|
||||
# undef INT16_MAX
|
||||
# define INT16_MAX __INT16_MAX__
|
||||
# undef INT16_MIN
|
||||
# define INT16_MIN (-INT16_MAX - 1)
|
||||
#endif
|
||||
#ifdef __UINT16_MAX__
|
||||
# undef UINT16_MAX
|
||||
# define UINT16_MAX __UINT16_MAX__
|
||||
#endif
|
||||
#ifdef __INT32_MAX__
|
||||
# undef INT32_MAX
|
||||
# define INT32_MAX __INT32_MAX__
|
||||
# undef INT32_MIN
|
||||
# define INT32_MIN (-INT32_MAX - 1)
|
||||
#endif
|
||||
#ifdef __UINT32_MAX__
|
||||
# undef UINT32_MAX
|
||||
# define UINT32_MAX __UINT32_MAX__
|
||||
#endif
|
||||
#ifdef __INT64_MAX__
|
||||
# undef INT64_MAX
|
||||
# define INT64_MAX __INT64_MAX__
|
||||
# undef INT64_MIN
|
||||
# define INT64_MIN (-INT64_MAX - 1)
|
||||
#endif
|
||||
#ifdef __UINT64_MAX__
|
||||
# undef UINT64_MAX
|
||||
# define UINT64_MAX __UINT64_MAX__
|
||||
#endif
|
||||
|
||||
#undef INT_LEAST8_MAX
|
||||
#define INT_LEAST8_MAX __INT_LEAST8_MAX__
|
||||
#undef INT_LEAST8_MIN
|
||||
#define INT_LEAST8_MIN (-INT_LEAST8_MAX - 1)
|
||||
#undef UINT_LEAST8_MAX
|
||||
#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__
|
||||
#undef INT_LEAST16_MAX
|
||||
#define INT_LEAST16_MAX __INT_LEAST16_MAX__
|
||||
#undef INT_LEAST16_MIN
|
||||
#define INT_LEAST16_MIN (-INT_LEAST16_MAX - 1)
|
||||
#undef UINT_LEAST16_MAX
|
||||
#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__
|
||||
#undef INT_LEAST32_MAX
|
||||
#define INT_LEAST32_MAX __INT_LEAST32_MAX__
|
||||
#undef INT_LEAST32_MIN
|
||||