diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-31 20:04:09 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-31 20:04:09 +0000 |
commit | 6ccde1eb8c47a467af7be272c4f5adf3245c6c6b (patch) | |
tree | f09811acccca40393f12028c87bd9199a9ee86cd /gcc/fortran/intrinsic.texi | |
parent | 6a3c8c3926f8c7f53da8ab0531ee247516ea7492 (diff) | |
download | gcc-6ccde1eb8c47a467af7be272c4f5adf3245c6c6b.tar.gz |
2011-05-31 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
* intrinsic.c (klass): Add CLASS_ATOMIC.
(add_subroutines): Add atomic_ref/atomic_define.
* intrinsic.texi (ATOMIC_REF, ATOMIC_DEFINE): Document.
* intrinsic.h (gfc_check_atomic_def, gfc_check_atomic_ref,
gfc_resolve_atomic_def, gfc_resolve_atomic_ref): New prototypes.
* gfortran.h (gfc_isym_id): Add GFC_ISYM_ATOMIC_DEF
and GFC_ISYM_ATOMIC_REF.
(gfc_atomic_int_kind, gfc_atomic_logical_kind): New global vars.
* iresolve.c (gfc_resolve_atomic_def, gfc_resolve_atomic_ref):
* New
functions.
* check.c (gfc_check_atomic, gfc_check_atomic_def,
gfc_check_atomic_ref): New functions.
* iso-fortran-env.def (ISOFORTRANENV_FILE_ATOMIC_INT_KIND,
ISOFORTRANENV_FILE_ATOMIC_LOGICAL_KIND): Change kind value.
* trans-intrinsic.c (conv_intrinsic_atomic_def,
conv_intrinsic_atomic_ref, gfc_conv_intrinsic_subroutine): New
functions.
(conv_intrinsic_move_alloc) Renamed from
gfc_conv_intrinsic_move_alloc - and made static.
* trans.h (gfc_conv_intrinsic_move_alloc): Remove.
(gfc_conv_intrinsic_subroutine) Add prototype.
* trans.c (trans_code): Call gfc_conv_intrinsic_subroutine.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174510 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/intrinsic.texi')
-rw-r--r-- | gcc/fortran/intrinsic.texi | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 2ea4fc5271d..cb46a77e444 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -61,6 +61,8 @@ Some basic guidelines for editing this document: * @code{ATAN}: ATAN, Arctangent function * @code{ATAN2}: ATAN2, Arctangent function * @code{ATANH}: ATANH, Inverse hyperbolic tangent function +* @code{ATOMIC_DEFINE}: ATOMIC_DEFINE, Setting a variable atomically +* @code{ATOMIC_REF}: ATOMIC_REF, Obtaining the value of a variable atomically * @code{BESSEL_J0}: BESSEL_J0, Bessel function of the first kind of order 0 * @code{BESSEL_J1}: BESSEL_J1, Bessel function of the first kind of order 1 * @code{BESSEL_JN}: BESSEL_JN, Bessel function of the first kind @@ -1546,6 +1548,100 @@ Inverse function: @ref{TANH} +@node ATOMIC_DEFINE +@section @code{ATOMIC_DEFINE} --- Setting a variable atomically +@fnindex ATOMIC_DEFINE +@cindex Atomic subroutine, define + +@table @asis +@item @emph{Description}: +@code{ATOMIC_DEFINE(ATOM, VALUE)} defines the variable @var{ATOM} with the value +@var{VALUE} atomically. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Atomic subroutine + +@item @emph{Syntax}: +@code{CALL ATOMIC_DEFINE(ATOM, VALUE)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{ATOM} @tab Scalar coarray or coindexed variable of either integer + type with @code{ATOMIC_INT_KIND} kind or logical type + with @code{ATOMIC_LOGICAL_KIND} kind. +@item @var{VALURE} @tab Scalar and of the same type as @var{ATOM}. If the kind + is different, the value is converted to the kind of + @var{ATOM}. +@end multitable + +@item @emph{Example}: +@smallexample +program atomic + use iso_fortran_env + integer(atomic_int_kind) :: atom[*] + call atomic_define (atom[1], this_image()) +end program atomic +@end smallexample + +@item @emph{See also}: +@ref{ATOMIC_REF}, @ref{ISO_FORTRAN_ENV} +@end table + + + +@node ATOMIC_REF +@section @code{ATOMIC_REF} --- Obtaining the value of a variable atomically +@fnindex ATOMIC_REF +@cindex Atomic subroutine, reference + +@table @asis +@item @emph{Description}: +@code{ATOMIC_DEFINE(ATOM, VALUE)} atomically assigns the value of the +variable @var{ATOM} to @var{VALUE}. + +@item @emph{Standard}: +Fortran 2008 and later + +@item @emph{Class}: +Atomic subroutine + +@item @emph{Syntax}: +@code{CALL ATOMIC_REF(VALUE, ATOM)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .70 +@item @var{VALURE} @tab Scalar and of the same type as @var{ATOM}. If the kind + is different, the value is converted to the kind of + @var{ATOM}. +@item @var{ATOM} @tab Scalar coarray or coindexed variable of either integer + type with @code{ATOMIC_INT_KIND} kind or logical type + with @code{ATOMIC_LOGICAL_KIND} kind. +@end multitable + +@item @emph{Example}: +@smallexample +program atomic + use iso_fortran_env + logical(atomic_logical_kind) :: atom[*] + logical :: val + call atomic_ref (atom, .false.) + ! ... + call atomic_ref (atom, val) + if (val) then + print *, "Obtained" + end if +end program atomic +@end smallexample + +@item @emph{See also}: +@ref{ATOMIC_DEFINE}, @ref{ISO_FORTRAN_ENV} +@end table + + + @node BESSEL_J0 @section @code{BESSEL_J0} --- Bessel function of the first kind of order 0 @fnindex BESSEL_J0 |