]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/libgomp.info
Remove build products in upstream tree.
[msp430-gcc.git] / libgomp / libgomp.info
diff --git a/libgomp/libgomp.info b/libgomp/libgomp.info
deleted file mode 100644 (file)
index 55dda41..0000000
+++ /dev/null
@@ -1,2455 +0,0 @@
-This is libgomp.info, produced by makeinfo version 4.13 from
-/d/gcc-4.4.3/gcc-4.4.3/libgomp/libgomp.texi.
-
-Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
-
-   Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "Funding Free Software", the Front-Cover texts
-being (a) (see below), and with the Back-Cover Texts being (b) (see
-below).  A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-   (a) The FSF's Front-Cover Text is:
-
-   A GNU Manual
-
-   (b) The FSF's Back-Cover Text is:
-
-   You have freedom to copy and modify this GNU Manual, like GNU
-software.  Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-INFO-DIR-SECTION GNU Libraries
-START-INFO-DIR-ENTRY
-* libgomp: (libgomp).                    GNU OpenMP runtime library
-END-INFO-DIR-ENTRY
-
-   This manual documents the GNU implementation of the OpenMP API for
-multi-platform shared-memory parallel programming in C/C++ and Fortran.
-
-   Published by the Free Software Foundation 51 Franklin Street, Fifth
-Floor Boston, MA 02110-1301 USA
-
-   Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
-
-   Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "Funding Free Software", the Front-Cover texts
-being (a) (see below), and with the Back-Cover Texts being (b) (see
-below).  A copy of the license is included in the section entitled "GNU
-Free Documentation License".
-
-   (a) The FSF's Front-Cover Text is:
-
-   A GNU Manual
-
-   (b) The FSF's Back-Cover Text is:
-
-   You have freedom to copy and modify this GNU Manual, like GNU
-software.  Copies published by the Free Software Foundation raise
-funds for GNU development.
-
-\1f
-File: libgomp.info,  Node: Top,  Next: Enabling OpenMP,  Up: (dir)
-
-Introduction
-************
-
-This manual documents the usage of libgomp, the GNU implementation of
-the OpenMP (http://www.openmp.org) Application Programming Interface
-(API) for multi-platform shared-memory parallel programming in C/C++
-and Fortran.
-
-* Menu:
-
-* Enabling OpenMP::            How to enable OpenMP for your applications.
-* Runtime Library Routines::   The OpenMP runtime application programming
-                               interface.
-* Environment Variables::      Influencing runtime behavior with environment
-                               variables.
-* The libgomp ABI::            Notes on the external ABI presented by libgomp.
-* Reporting Bugs::             How to report bugs in GNU OpenMP.
-* Copying::                    GNU general public license says
-                               how you can copy and share libgomp.
-* GNU Free Documentation License::
-                               How you can copy and share this manual.
-* Funding::                    How to help assure continued work for free
-                               software.
-* Index::                      Index of this documentation.
-
-\1f
-File: libgomp.info,  Node: Enabling OpenMP,  Next: Runtime Library Routines,  Prev: Top,  Up: Top
-
-1 Enabling OpenMP
-*****************
-
-To activate the OpenMP extensions for C/C++ and Fortran, the
-compile-time flag `-fopenmp' must be specified. This enables the OpenMP
-directive `#pragma omp' in C/C++ and `!$omp' directives in free form,
-`c$omp', `*$omp' and `!$omp' directives in fixed form, `!$' conditional
-compilation sentinels in free form and `c$', `*$' and `!$' sentinels in
-fixed form, for Fortran. The flag also arranges for automatic linking
-of the OpenMP runtime library (*note Runtime Library Routines::).
-
-   A complete description of all OpenMP directives accepted may be
-found in the OpenMP Application Program Interface
-(http://www.openmp.org) manual, version 3.0.
-
-\1f
-File: libgomp.info,  Node: Runtime Library Routines,  Next: Environment Variables,  Prev: Enabling OpenMP,  Up: Top
-
-2 Runtime Library Routines
-**************************
-
-The runtime routines described here are defined by section 3 of the
-OpenMP specifications in version 3.0. The routines are structured in
-following three parts:
-
-   Control threads, processors and the parallel environment.
-
-* Menu:
-
-* omp_get_active_level::        Number of active parallel regions
-* omp_get_ancestor_thread_num:: Ancestor thread ID
-* omp_get_dynamic::             Dynamic teams setting
-* omp_get_level::               Number of parallel regions
-* omp_get_max_active_levels::   Maximal number of active regions
-* omp_get_max_threads::         Maximal number of threads of parallel region
-* omp_get_nested::              Nested parallel regions
-* omp_get_num_procs::           Number of processors online
-* omp_get_num_threads::         Size of the active team
-* omp_get_schedule::            Obtain the runtime scheduling method
-* omp_get_team_size::           Number of threads in a team
-* omp_get_thread_limit::        Maximal number of threads
-* omp_get_thread_num::          Current thread ID
-* omp_in_parallel::             Whether a parallel region is active
-* omp_set_dynamic::             Enable/disable dynamic teams
-* omp_set_max_active_levels::   Limits the number of active parallel regions
-* omp_set_nested::              Enable/disable nested parallel regions
-* omp_set_num_threads::         Set upper team size limit
-* omp_set_schedule::            Set the runtime scheduling method
-
-   Initialize, set, test, unset and destroy simple and nested locks.
-
-* Menu:
-
-* omp_init_lock::            Initialize simple lock
-* omp_set_lock::             Wait for and set simple lock
-* omp_test_lock::            Test and set simple lock if available
-* omp_unset_lock::           Unset simple lock
-* omp_destroy_lock::         Destroy simple lock
-* omp_init_nest_lock::       Initialize nested lock
-* omp_set_nest_lock::        Wait for and set simple lock
-* omp_test_nest_lock::       Test and set nested lock if available
-* omp_unset_nest_lock::      Unset nested lock
-* omp_destroy_nest_lock::    Destroy nested lock
-
-   Portable, thread-based, wall clock timer.
-
-* Menu:
-
-* omp_get_wtick::            Get timer precision.
-* omp_get_wtime::            Elapsed wall clock time.
-
-\1f
-File: libgomp.info,  Node: omp_get_active_level,  Next: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
-
-2.1 `omp_get_active_level' - Number of parallel regions
-=======================================================
-
-_Description_:
-     This function returns the nesting level for the active parallel
-     blocks, which enclose the calling call.
-
-_C/C++_
-     _Prototype_:  `int omp_get_active_level();'
-
-_Fortran_:
-     _Interface_:  `integer omp_get_active_level()'
-
-_See also_:
-     *note omp_get_level::, *note omp_get_max_active_levels::, *note
-     omp_set_max_active_levels::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.19.
-
-\1f
-File: libgomp.info,  Node: omp_get_ancestor_thread_num,  Next: omp_get_dynamic,  Prev: omp_get_active_level,  Up: Runtime Library Routines
-
-2.2 `omp_get_ancestor_thread_num' - Ancestor thread ID
-======================================================
-
-_Description_:
-     This function returns the thread identification number for the
-     given nesting level of the current thread. For values of LEVEL
-     outside zero to `omp_get_level' -1 is returned; if LEVEL is
-     `omp_get_level' the result is identical to `omp_get_thread_num'.
-
-_C/C++_
-     _Prototype_:  `int omp_get_ancestor_thread_num(int level);'
-
-_Fortran_:
-     _Interface_:  `integer omp_ancestor_thread_num(level)'
-                   `integer level'
-
-_See also_:
-     *note omp_get_level::, *note omp_get_thread_num::, *note
-     omp_get_team_size::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.17.
-
-\1f
-File: libgomp.info,  Node: omp_get_dynamic,  Next: omp_get_level,  Prev: omp_get_ancestor_thread_num,  Up: Runtime Library Routines
-
-2.3 `omp_get_dynamic' - Dynamic teams setting
-=============================================
-
-_Description_:
-     This function returns `true' if enabled, `false' otherwise.  Here,
-     `true' and `false' represent their language-specific counterparts.
-
-     The dynamic team setting may be initialized at startup by the
-     `OMP_DYNAMIC' environment variable or at runtime using
-     `omp_set_dynamic'. If undefined, dynamic adjustment is disabled by
-     default.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_dynamic();'
-
-_Fortran_:
-     _Interface_:  `logical function omp_get_dynamic()'
-
-_See also_:
-     *note omp_set_dynamic::, *note OMP_DYNAMIC::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.8.
-
-\1f
-File: libgomp.info,  Node: omp_get_level,  Next: omp_get_max_active_levels,  Prev: omp_get_dynamic,  Up: Runtime Library Routines
-
-2.4 `omp_get_level' - Obtain the current nesting level
-======================================================
-
-_Description_:
-     This function returns the nesting level for the parallel blocks,
-     which enclose the calling call.
-
-_C/C++_
-     _Prototype_:  `int omp_get level();'
-
-_Fortran_:
-     _Interface_:  `integer omp_level()'
-
-_See also_:
-     *note omp_get_active_level::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.16.
-
-\1f
-File: libgomp.info,  Node: omp_get_max_active_levels,  Next: omp_get_max_threads,  Prev: omp_get_level,  Up: Runtime Library Routines
-
-2.5 `omp_set_max_active_levels' - Maximal number of active regions
-==================================================================
-
-_Description_:
-     This function obtains the maximally allowed number of nested,
-     active parallel regions.
-
-_C/C++_
-     _Prototype_:  `int omp_get_max_active_levels();'
-
-_Fortran_:
-     _Interface_:  `int omp_get_max_active_levels()'
-
-_See also_:
-     *note omp_set_max_active_levels::, *note omp_get_active_level::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.14.
-
-\1f
-File: libgomp.info,  Node: omp_get_max_threads,  Next: omp_get_nested,  Prev: omp_get_max_active_levels,  Up: Runtime Library Routines
-
-2.6 `omp_get_max_threads' - Maximal number of threads of parallel region
-========================================================================
-
-_Description_:
-     Return the maximal number of threads used for the current parallel
-     region that does not use the clause `num_threads'.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_max_threads();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_max_threads()'
-
-_See also_:
-     *note omp_set_num_threads::, *note omp_set_dynamic::, *note
-     omp_get_thread_limit::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.3.
-
-\1f
-File: libgomp.info,  Node: omp_get_nested,  Next: omp_get_num_procs,  Prev: omp_get_max_threads,  Up: Runtime Library Routines
-
-2.7 `omp_get_nested' - Nested parallel regions
-==============================================
-
-_Description_:
-     This function returns `true' if nested parallel regions are
-     enabled, `false' otherwise. Here, `true' and `false' represent
-     their language-specific counterparts.
-
-     Nested parallel regions may be initialized at startup by the
-     `OMP_NESTED' environment variable or at runtime using
-     `omp_set_nested'. If undefined, nested parallel regions are
-     disabled by default.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_nested();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_nested()'
-
-_See also_:
-     *note omp_set_nested::, *note OMP_NESTED::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.10.
-
-\1f
-File: libgomp.info,  Node: omp_get_num_procs,  Next: omp_get_num_threads,  Prev: omp_get_nested,  Up: Runtime Library Routines
-
-2.8 `omp_get_num_procs' - Number of processors online
-=====================================================
-
-_Description_:
-     Returns the number of processors online.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_num_procs();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_num_procs()'
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.5.
-
-\1f
-File: libgomp.info,  Node: omp_get_num_threads,  Next: omp_get_schedule,  Prev: omp_get_num_procs,  Up: Runtime Library Routines
-
-2.9 `omp_get_num_threads' - Size of the active team
-===================================================
-
-_Description_:
-     The number of threads in the current team. In a sequential section
-     of the program `omp_get_num_threads' returns 1.
-
-     The default team size may be initialized at startup by the
-     `OMP_NUM_THREADS' environment variable. At runtime, the size of
-     the current team may be set either by the `NUM_THREADS' clause or
-     by `omp_set_num_threads'. If none of the above were used to define
-     a specific value and `OMP_DYNAMIC' is disabled, one thread per CPU
-     online is used.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_num_threads();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_num_threads()'
-
-_See also_:
-     *note omp_get_max_threads::, *note omp_set_num_threads::, *note
-     OMP_NUM_THREADS::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.2.
-
-\1f
-File: libgomp.info,  Node: omp_get_schedule,  Next: omp_get_team_size,  Prev: omp_get_num_threads,  Up: Runtime Library Routines
-
-2.10 `omp_get_schedule' - Obtain the runtime scheduling method
-==============================================================
-
-_Description_:
-     Obtain runtime the scheduling method. The KIND argument will be
-     set to the value `omp_sched_static', `omp_sched_dynamic',
-     `opm_sched_guided' or `auto'. The second argument, MODIFIER, is
-     set to the chunk size.
-
-_C/C++_
-     _Prototype_:  `omp_schedule(omp_sched_t * kind, int *modifier);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_schedule(kind, modifier)'
-                   `integer(kind=omp_sched_kind) kind'
-                   `integer modifier'
-
-_See also_:
-     *note omp_set_schedule::, *note OMP_SCHEDULE::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.12.
-
-\1f
-File: libgomp.info,  Node: omp_get_team_size,  Next: omp_get_thread_limit,  Prev: omp_get_schedule,  Up: Runtime Library Routines
-
-2.11 `omp_get_team_size' - Number of threads in a team
-======================================================
-
-_Description_:
-     This function returns the number of threads in a thread team to
-     which either the current thread or its ancestor belongs. For
-     values of LEVEL outside zero to `omp_get_level' -1 is returned; if
-     LEVEL is zero 1 is returned and for `omp_get_level' the result is
-     identical to `omp_get_num_threads'.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_time_size(int level);'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_team_size(level)'
-                   `integer level'
-
-_See also_:
-     *note omp_get_num_threads::, *note omp_get_level::, *note
-     omp_get_ancestor_thread_num::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.18.
-
-\1f
-File: libgomp.info,  Node: omp_get_thread_limit,  Next: omp_get_thread_num,  Prev: omp_get_team_size,  Up: Runtime Library Routines
-
-2.12 `omp_get_thread_limit' - Maximal number of threads
-=======================================================
-
-_Description_:
-     Return the maximal number of threads of the program.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_thread_limit();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_thread_limit()'
-
-_See also_:
-     *note omp_get_max_threads::, *note OMP_THREAD_LIMIT::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.13.
-
-\1f
-File: libgomp.info,  Node: omp_get_thread_num,  Next: omp_in_parallel,  Prev: omp_get_thread_limit,  Up: Runtime Library Routines
-
-2.13 `omp_get_thread_num' - Current thread ID
-=============================================
-
-_Description_:
-     Unique thread identification number within the current team.  In a
-     sequential parts of the program, `omp_get_thread_num' always
-     returns 0. In parallel regions the return value varies from 0 to
-     `omp_get_num_threads'-1 inclusive. The return value of the master
-     thread of a team is always 0.
-
-_C/C++_:
-     _Prototype_:  `int omp_get_thread_num();'
-
-_Fortran_:
-     _Interface_:  `integer function omp_get_thread_num()'
-
-_See also_:
-     *note omp_get_num_threads::, *note omp_get_ancestor_thread_num::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.4.
-
-\1f
-File: libgomp.info,  Node: omp_in_parallel,  Next: omp_set_dynamic,  Prev: omp_get_thread_num,  Up: Runtime Library Routines
-
-2.14 `omp_in_parallel' - Whether a parallel region is active
-============================================================
-
-_Description_:
-     This function returns `true' if currently running in parallel,
-     `false' otherwise. Here, `true' and `false' represent their
-     language-specific counterparts.
-
-_C/C++_:
-     _Prototype_:  `int omp_in_parallel();'
-
-_Fortran_:
-     _Interface_:  `logical function omp_in_parallel()'
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.6.
-
-\1f
-File: libgomp.info,  Node: omp_set_dynamic,  Next: omp_set_max_active_levels,  Prev: omp_in_parallel,  Up: Runtime Library Routines
-
-2.15 `omp_set_dynamic' - Enable/disable dynamic teams
-=====================================================
-
-_Description_:
-     Enable or disable the dynamic adjustment of the number of threads
-     within a team. The function takes the language-specific equivalent
-     of `true' and `false', where `true' enables dynamic adjustment of
-     team sizes and `false' disables it.
-
-_C/C++_:
-     _Prototype_:  `void omp_set_dynamic(int);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_set_dynamic(set)'
-                   `integer, intent(in) :: set'
-
-_See also_:
-     *note OMP_DYNAMIC::, *note omp_get_dynamic::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.7.
-
-\1f
-File: libgomp.info,  Node: omp_set_max_active_levels,  Next: omp_set_nested,  Prev: omp_set_dynamic,  Up: Runtime Library Routines
-
-2.16 `omp_set_max_active_levels' - Limits the number of active parallel regions
-===============================================================================
-
-_Description_:
-     This function limits the maximally allowed number of nested,
-     active parallel regions.
-
-_C/C++_
-     _Prototype_:  `omp_set_max_active_levels(int max_levels);'
-
-_Fortran_:
-     _Interface_:  `omp_max_active_levels(max_levels)'
-                   `integer max_levels'
-
-_See also_:
-     *note omp_get_max_active_levels::, *note omp_get_active_level::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.14.
-
-\1f
-File: libgomp.info,  Node: omp_set_nested,  Next: omp_set_num_threads,  Prev: omp_set_max_active_levels,  Up: Runtime Library Routines
-
-2.17 `omp_set_nested' - Enable/disable nested parallel regions
-==============================================================
-
-_Description_:
-     Enable or disable nested parallel regions, i.e., whether team
-     members are allowed to create new teams. The function takes the
-     language-specific equivalent of `true' and `false', where `true'
-     enables dynamic adjustment of team sizes and `false' disables it.
-
-_C/C++_:
-     _Prototype_:  `void omp_set_dynamic(int);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_set_dynamic(set)'
-                   `integer, intent(in) :: set'
-
-_See also_:
-     *note OMP_NESTED::, *note omp_get_nested::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.9.
-
-\1f
-File: libgomp.info,  Node: omp_set_num_threads,  Next: omp_set_schedule,  Prev: omp_set_nested,  Up: Runtime Library Routines
-
-2.18 `omp_set_num_threads' - Set upper team size limit
-======================================================
-
-_Description_:
-     Specifies the number of threads used by default in subsequent
-     parallel sections, if those do not specify a `num_threads' clause.
-     The argument of `omp_set_num_threads' shall be a positive integer.
-
-_C/C++_:
-     _Prototype_:  `void omp_set_num_threads(int);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_set_num_threads(set)'
-                   `integer, intent(in) :: set'
-
-_See also_:
-     *note OMP_NUM_THREADS::, *note omp_get_num_threads::, *note
-     omp_get_max_threads::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.2.1.
-
-\1f
-File: libgomp.info,  Node: omp_set_schedule,  Next: omp_init_lock,  Prev: omp_set_num_threads,  Up: Runtime Library Routines
-
-2.19 `omp_set_schedule' - Set the runtime scheduling method
-===========================================================
-
-_Description_:
-     Sets the runtime scheduling method. The KIND argument can have the
-     value `omp_sched_static', `omp_sched_dynamic', `opm_sched_guided'
-     or `omp_sched_auto'. Except for `omp_sched_auto', the chunk size
-     is set to the value of MODIFIER if positive or to the default
-     value if zero or negative.  For `omp_sched_auto' the MODIFIER
-     argument is ignored.
-
-_C/C++_
-     _Prototype_:  `int omp_schedule(omp_sched_t * kind, int *modifier);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_schedule(kind, modifier)'
-                   `integer(kind=omp_sched_kind) kind'
-                   `integer modifier'
-
-_See also_:
-     *note omp_get_schedule:: *note OMP_SCHEDULE::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section
-     3.2.11.
-
-\1f
-File: libgomp.info,  Node: omp_init_lock,  Next: omp_set_lock,  Prev: omp_set_schedule,  Up: Runtime Library Routines
-
-2.20 `omp_init_lock' - Initialize simple lock
-=============================================
-
-_Description_:
-     Initialize a simple lock. After initialization, the lock is in an
-     unlocked state.
-
-_C/C++_:
-     _Prototype_:  `void omp_init_lock(omp_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_init_lock(lock)'
-                   `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_destroy_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
-
-\1f
-File: libgomp.info,  Node: omp_set_lock,  Next: omp_test_lock,  Prev: omp_init_lock,  Up: Runtime Library Routines
-
-2.21 `omp_set_lock' - Wait for and set simple lock
-==================================================
-
-_Description_:
-     Before setting a simple lock, the lock variable must be
-     initialized by `omp_init_lock'. The calling thread is blocked
-     until the lock is available. If the lock is already held by the
-     current thread, a deadlock occurs.
-
-_C/C++_:
-     _Prototype_:  `void omp_set_lock(omp_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_set_lock(lock)'
-                   `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_init_lock::, *note omp_test_lock::, *note
-     omp_unset_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
-
-\1f
-File: libgomp.info,  Node: omp_test_lock,  Next: omp_unset_lock,  Prev: omp_set_lock,  Up: Runtime Library Routines
-
-2.22 `omp_test_lock' - Test and set simple lock if available
-============================================================
-
-_Description_:
-     Before setting a simple lock, the lock variable must be
-     initialized by `omp_init_lock'. Contrary to `omp_set_lock',
-     `omp_test_lock' does not block if the lock is not available. This
-     function returns `true' upon success, `false' otherwise. Here,
-     `true' and `false' represent their language-specific counterparts.
-
-_C/C++_:
-     _Prototype_:  `int omp_test_lock(omp_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_test_lock(lock)'
-                   `logical(omp_logical_kind) :: omp_test_lock'
-                   `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
-
-\1f
-File: libgomp.info,  Node: omp_unset_lock,  Next: omp_destroy_lock,  Prev: omp_test_lock,  Up: Runtime Library Routines
-
-2.23 `omp_unset_lock' - Unset simple lock
-=========================================
-
-_Description_:
-     A simple lock about to be unset must have been locked by
-     `omp_set_lock' or `omp_test_lock' before. In addition, the lock
-     must be held by the thread calling `omp_unset_lock'. Then, the
-     lock becomes unlocked. If one ore more threads attempted to set
-     the lock before, one of them is chosen to, again, set the lock for
-     itself.
-
-_C/C++_:
-     _Prototype_:  `void omp_unset_lock(omp_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_unset_lock(lock)'
-                   `integer(omp_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_set_lock::, *note omp_test_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
-
-\1f
-File: libgomp.info,  Node: omp_destroy_lock,  Next: omp_init_nest_lock,  Prev: omp_unset_lock,  Up: Runtime Library Routines
-
-2.24 `omp_destroy_lock' - Destroy simple lock
-=============================================
-
-_Description_:
-     Destroy a simple lock. In order to be destroyed, a simple lock
-     must be in the unlocked state.
-
-_C/C++_:
-     _Prototype_:  `void omp_destroy_lock(omp_lock_t *);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_destroy_lock(lock)'
-                   `integer(omp_lock_kind), intent(inout) :: lock'
-
-_See also_:
-     *note omp_init_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
-
-\1f
-File: libgomp.info,  Node: omp_init_nest_lock,  Next: omp_set_nest_lock,  Prev: omp_destroy_lock,  Up: Runtime Library Routines
-
-2.25 `omp_init_nest_lock' - Initialize nested lock
-==================================================
-
-_Description_:
-     Initialize a nested lock. After initialization, the lock is in an
-     unlocked state and the nesting count is set to zero.
-
-_C/C++_:
-     _Prototype_:  `void omp_init_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_init_nest_lock(lock)'
-                   `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_destroy_nest_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.1.
-
-\1f
-File: libgomp.info,  Node: omp_set_nest_lock,  Next: omp_test_nest_lock,  Prev: omp_init_nest_lock,  Up: Runtime Library Routines
-
-2.26 `omp_set_nest_lock' - Wait for and set simple lock
-=======================================================
-
-_Description_:
-     Before setting a nested lock, the lock variable must be
-     initialized by `omp_init_nest_lock'. The calling thread is blocked
-     until the lock is available. If the lock is already held by the
-     current thread, the nesting count for the lock in incremented.
-
-_C/C++_:
-     _Prototype_:  `void omp_set_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_set_nest_lock(lock)'
-                   `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_init_nest_lock::, *note omp_unset_nest_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.3.
-
-\1f
-File: libgomp.info,  Node: omp_test_nest_lock,  Next: omp_unset_nest_lock,  Prev: omp_set_nest_lock,  Up: Runtime Library Routines
-
-2.27 `omp_test_nest_lock' - Test and set nested lock if available
-=================================================================
-
-_Description_:
-     Before setting a nested lock, the lock variable must be
-     initialized by `omp_init_nest_lock'. Contrary to
-     `omp_set_nest_lock', `omp_test_nest_lock' does not block if the
-     lock is not available.  If the lock is already held by the current
-     thread, the new nesting count is returned. Otherwise, the return
-     value equals zero.
-
-_C/C++_:
-     _Prototype_:  `int omp_test_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `integer function omp_test_nest_lock(lock)'
-                   `integer(omp_integer_kind) :: omp_test_nest_lock'
-                   `integer(omp_nest_lock_kind), intent(inout) :: lock'
-
-_See also_:
-     *note omp_init_lock::, *note omp_set_lock::, *note omp_set_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.5.
-
-\1f
-File: libgomp.info,  Node: omp_unset_nest_lock,  Next: omp_destroy_nest_lock,  Prev: omp_test_nest_lock,  Up: Runtime Library Routines
-
-2.28 `omp_unset_nest_lock' - Unset nested lock
-==============================================
-
-_Description_:
-     A nested lock about to be unset must have been locked by
-     `omp_set_nested_lock' or `omp_test_nested_lock' before. In
-     addition, the lock must be held by the thread calling
-     `omp_unset_nested_lock'. If the nesting count drops to zero, the
-     lock becomes unlocked. If one ore more threads attempted to set
-     the lock before, one of them is chosen to, again, set the lock for
-     itself.
-
-_C/C++_:
-     _Prototype_:  `void omp_unset_nest_lock(omp_nest_lock_t *lock);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_unset_nest_lock(lock)'
-                   `integer(omp_nest_lock_kind), intent(out) :: lock'
-
-_See also_:
-     *note omp_set_nest_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.4.
-
-\1f
-File: libgomp.info,  Node: omp_destroy_nest_lock,  Next: omp_get_wtick,  Prev: omp_unset_nest_lock,  Up: Runtime Library Routines
-
-2.29 `omp_destroy_nest_lock' - Destroy nested lock
-==================================================
-
-_Description_:
-     Destroy a nested lock. In order to be destroyed, a nested lock
-     must be in the unlocked state and its nesting count must equal
-     zero.
-
-_C/C++_:
-     _Prototype_:  `void omp_destroy_nest_lock(omp_nest_lock_t *);'
-
-_Fortran_:
-     _Interface_:  `subroutine omp_destroy_nest_lock(lock)'
-                   `integer(omp_nest_lock_kind), intent(inout) :: lock'
-
-_See also_:
-     *note omp_init_lock::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.3.2.
-
-\1f
-File: libgomp.info,  Node: omp_get_wtick,  Next: omp_get_wtime,  Prev: omp_destroy_nest_lock,  Up: Runtime Library Routines
-
-2.30 `omp_get_wtick' - Get timer precision
-==========================================
-
-_Description_:
-     Gets the timer precision, i.e., the number of seconds between two
-     successive clock ticks.
-
-_C/C++_:
-     _Prototype_:  `double omp_get_wtick();'
-
-_Fortran_:
-     _Interface_:  `double precision function omp_get_wtick()'
-
-_See also_:
-     *note omp_get_wtime::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.2.
-
-\1f
-File: libgomp.info,  Node: omp_get_wtime,  Prev: omp_get_wtick,  Up: Runtime Library Routines
-
-2.31 `omp_get_wtime' - Elapsed wall clock time
-==============================================
-
-_Description_:
-     Elapsed wall clock time in seconds. The time is measured per
-     thread, no guarantee can bee made that two distinct threads
-     measure the same time.  Time is measured from some "time in the
-     past". On POSIX compliant systems the seconds since the Epoch
-     (00:00:00 UTC, January 1, 1970) are returned.
-
-_C/C++_:
-     _Prototype_:  `double omp_get_wtime();'
-
-_Fortran_:
-     _Interface_:  `double precision function omp_get_wtime()'
-
-_See also_:
-     *note omp_get_wtick::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 3.4.1.
-
-\1f
-File: libgomp.info,  Node: Environment Variables,  Next: The libgomp ABI,  Prev: Runtime Library Routines,  Up: Top
-
-3 Environment Variables
-***********************
-
-The variables `OMP_DYNAMIC', `OMP_MAX_ACTIVE_LEVELS', `OMP_NESTED',
-`OMP_NUM_THREADS', `OMP_SCHEDULE', `OMP_STACKSIZE',`OMP_THREAD_LIMIT'
-and `OMP_WAIT_POLICY' are defined by section 4 of the OpenMP
-specifications in version 3.0, while `GOMP_CPU_AFFINITY' and
-`GOMP_STACKSIZE' are GNU extensions.
-
-* Menu:
-
-* OMP_DYNAMIC::           Dynamic adjustment of threads
-* OMP_MAX_ACTIVE_LEVELS:: Set the maximal number of nested parallel regions
-* OMP_NESTED::            Nested parallel regions
-* OMP_NUM_THREADS::       Specifies the number of threads to use
-* OMP_STACKSIZE::         Set default thread stack size
-* OMP_SCHEDULE::          How threads are scheduled
-* OMP_THREAD_LIMIT::      Set the maximal number of threads
-* OMP_WAIT_POLICY::       How waiting threads are handled
-* GOMP_CPU_AFFINITY::     Bind threads to specific CPUs
-* GOMP_STACKSIZE::        Set default thread stack size
-
-\1f
-File: libgomp.info,  Node: OMP_DYNAMIC,  Next: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
-
-3.1 `OMP_DYNAMIC' - Dynamic adjustment of threads
-=================================================
-
-_Description_:
-     Enable or disable the dynamic adjustment of the number of threads
-     within a team. The value of this environment variable shall be
-     `TRUE' or `FALSE'. If undefined, dynamic adjustment is disabled by
-     default.
-
-_See also_:
-     *note omp_set_dynamic::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 4.3
-
-\1f
-File: libgomp.info,  Node: OMP_MAX_ACTIVE_LEVELS,  Next: OMP_NESTED,  Prev: OMP_DYNAMIC,  Up: Environment Variables
-
-3.2 `OMP_MAX_ACTIVE_LEVELS' - Set the maximal number of nested parallel regions
-===============================================================================
-
-_Description_:
-     Specifies the initial value for the maximal number of nested
-     parallel regions. The value of this variable shall be positive
-     integer.  If undefined, the number of active levels is unlimited.
-
-_See also_:
-     *note omp_set_max_active_levels::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 4.7
-
-\1f
-File: libgomp.info,  Node: OMP_NESTED,  Next: OMP_NUM_THREADS,  Prev: OMP_MAX_ACTIVE_LEVELS,  Up: Environment Variables
-
-3.3 `OMP_NESTED' - Nested parallel regions
-==========================================
-
-_Description_:
-     Enable or disable nested parallel regions, i.e., whether team
-     members are allowed to create new teams. The value of this
-     environment variable shall be `TRUE' or `FALSE'. If undefined,
-     nested parallel regions are disabled by default.
-
-_See also_:
-     *note omp_set_nested::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 4.4
-
-\1f
-File: libgomp.info,  Node: OMP_NUM_THREADS,  Next: OMP_STACKSIZE,  Prev: OMP_NESTED,  Up: Environment Variables
-
-3.4 `OMP_NUM_THREADS' - Specifies the number of threads to use
-==============================================================
-
-_Description_:
-     Specifies the default number of threads to use in parallel
-     regions. The value of this variable shall be positive integer. If
-     undefined one thread per CPU online is used.
-
-_See also_:
-     *note omp_set_num_threads::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 4.2
-
-\1f
-File: libgomp.info,  Node: OMP_SCHEDULE,  Next: OMP_THREAD_LIMIT,  Prev: OMP_STACKSIZE,  Up: Environment Variables
-
-3.5 `OMP_SCHEDULE' - How threads are scheduled
-==============================================
-
-_Description_:
-     Allows to specify `schedule type' and `chunk size'.  The value of
-     the variable shall have the form: `type[,chunk]' where `type' is
-     one of `static', `dynamic', `guided' or `auto' The optional
-     `chunk' size shall be a positive integer. If undefined, dynamic
-     scheduling and a chunk size of 1 is used.
-
-_See also_:
-     *note omp_set_schedule::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), sections
-     2.5.1 and 4.1
-
-\1f
-File: libgomp.info,  Node: OMP_STACKSIZE,  Next: OMP_SCHEDULE,  Prev: OMP_NUM_THREADS,  Up: Environment Variables
-
-3.6 `OMP_STACKSIZE' - Set default thread stack size
-===================================================
-
-_Description_:
-     Set the default thread stack size in kilobytes, unless the number
-     is suffixed by `B', `K', `M' or `G', in which case the size is,
-     respectively, in bytes, kilobytes, megabytes or gigabytes. This is
-     different from `pthread_attr_setstacksize' which gets the number
-     of bytes as an argument. If the stacksize can not be set due to
-     system constraints, an error is reported and the initial stacksize
-     is left unchanged. If undefined, the stack size is system
-     dependent.
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.5
-
-\1f
-File: libgomp.info,  Node: OMP_THREAD_LIMIT,  Next: OMP_WAIT_POLICY,  Prev: OMP_SCHEDULE,  Up: Environment Variables
-
-3.7 `OMP_THREAD_LIMIT' - Set the maximal number of threads
-==========================================================
-
-_Description_:
-     Specifies the number of threads to use for the whole program. The
-     value of this variable shall be positive integer. If undefined,
-     the number of threads is not limited.
-
-_See also_:
-     *note OMP_NUM_THREADS:: *note omp_get_thread_limit::
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), section 4.8
-
-\1f
-File: libgomp.info,  Node: OMP_WAIT_POLICY,  Next: GOMP_CPU_AFFINITY,  Prev: OMP_THREAD_LIMIT,  Up: Environment Variables
-
-3.8 `OMP_WAIT_POLICY' - How waiting threads are handled
-=======================================================
-
-_Description_:
-     Specifies whether waiting threads should be active or passive. If
-     the value is `PASSIVE', waiting threads should not consume CPU
-     power while waiting; while the value is `ACTIVE' specifies that
-     they should.
-
-_Reference_:
-     OpenMP specifications v3.0 (http://www.openmp.org/), sections 4.6
-
-\1f
-File: libgomp.info,  Node: GOMP_CPU_AFFINITY,  Next: GOMP_STACKSIZE,  Prev: OMP_WAIT_POLICY,  Up: Environment Variables
-
-3.9 `GOMP_CPU_AFFINITY' - Bind threads to specific CPUs
-=======================================================
-
-_Description_:
-     Binds threads to specific CPUs. The variable should contain a
-     space- or comma-separated list of CPUs. This list may contain
-     different kind of entries: either single CPU numbers in any order,
-     a range of CPUs (M-N) or a range with some stride (M-N:S). CPU
-     numbers are zero based. For example, `GOMP_CPU_AFFINITY="0 3 1-2
-     4-15:2"' will bind the initial thread to CPU 0, the second to CPU
-     3, the third to CPU 1, the fourth to CPU 2, the fifth to CPU 4,
-     the sixth through tenth to CPUs 6, 8, 10, 12, and 14 respectively
-     and then start assigning back from the beginning of the list.
-     `GOMP_CPU_AFFINITY=0' binds all threads to CPU 0.
-
-     There is no GNU OpenMP library routine to determine whether a CPU
-     affinity specification is in effect. As a workaround,
-     language-specific library functions, e.g., `getenv' in C or
-     `GET_ENVIRONMENT_VARIABLE' in Fortran, may be used to query the
-     setting of the `GOMP_CPU_AFFINITY' environment variable. A defined
-     CPU affinity on startup cannot be changed or disabled during the
-     runtime of the application.
-
-     If this environment variable is omitted, the host system will
-     handle the assignment of threads to CPUs.
-
-\1f
-File: libgomp.info,  Node: GOMP_STACKSIZE,  Prev: GOMP_CPU_AFFINITY,  Up: Environment Variables
-
-3.10 `GOMP_STACKSIZE' - Set default thread stack size
-=====================================================
-
-_Description_:
-     Set the default thread stack size in kilobytes. This is different
-     from `pthread_attr_setstacksize' which gets the number of bytes as
-     an argument. If the stacksize can not be set due to system
-     constraints, an error is reported and the initial stacksize is
-     left unchanged. If undefined, the stack size is system dependent.
-
-_See also_:
-     *note GOMP_STACKSIZE::
-
-_Reference_:
-     GCC Patches Mailinglist
-     (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00493.html), GCC
-     Patches Mailinglist
-     (http://gcc.gnu.org/ml/gcc-patches/2006-06/msg00496.html)
-
-\1f
-File: libgomp.info,  Node: The libgomp ABI,  Next: Reporting Bugs,  Prev: Environment Variables,  Up: Top
-
-4 The libgomp ABI
-*****************
-
-The following sections present notes on the external ABI as presented
-by libgomp. Only maintainers should need them.
-
-* Menu:
-
-* Implementing MASTER construct::
-* Implementing CRITICAL construct::
-* Implementing ATOMIC construct::
-* Implementing FLUSH construct::
-* Implementing BARRIER construct::
-* Implementing THREADPRIVATE construct::
-* Implementing PRIVATE clause::
-* Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses::
-* Implementing REDUCTION clause::
-* Implementing PARALLEL construct::
-* Implementing FOR construct::
-* Implementing ORDERED construct::
-* Implementing SECTIONS construct::
-* Implementing SINGLE construct::
-
-\1f
-File: libgomp.info,  Node: Implementing MASTER construct,  Next: Implementing CRITICAL construct,  Up: The libgomp ABI
-
-4.1 Implementing MASTER construct
-=================================
-
-     if (omp_get_thread_num () == 0)
-       block
-
-   Alternately, we generate two copies of the parallel subfunction and
-only include this in the version run by the master thread.  Surely
-that's not worthwhile though...
-
-\1f
-File: libgomp.info,  Node: Implementing CRITICAL construct,  Next: Implementing ATOMIC construct,  Prev: Implementing MASTER construct,  Up: The libgomp ABI
-
-4.2 Implementing CRITICAL construct
-===================================
-
-Without a specified name,
-
-       void GOMP_critical_start (void);
-       void GOMP_critical_end (void);
-
-   so that we don't get COPY relocations from libgomp to the main
-application.
-
-   With a specified name, use omp_set_lock and omp_unset_lock with name
-being transformed into a variable declared like
-
-       omp_lock_t gomp_critical_user_<name> __attribute__((common))
-
-   Ideally the ABI would specify that all zero is a valid unlocked
-state, and so we wouldn't actually need to initialize this at startup.
-
-\1f
-File: libgomp.info,  Node: Implementing ATOMIC construct,  Next: Implementing FLUSH construct,  Prev: Implementing CRITICAL construct,  Up: The libgomp ABI
-
-4.3 Implementing ATOMIC construct
-=================================
-
-The target should implement the `__sync' builtins.
-
-   Failing that we could add
-
-       void GOMP_atomic_enter (void)
-       void GOMP_atomic_exit (void)
-
-   which reuses the regular lock code, but with yet another lock object
-private to the library.
-
-\1f
-File: libgomp.info,  Node: Implementing FLUSH construct,  Next: Implementing BARRIER construct,  Prev: Implementing ATOMIC construct,  Up: The libgomp ABI
-
-4.4 Implementing FLUSH construct
-================================
-
-Expands to the `__sync_synchronize' builtin.
-
-\1f
-File: libgomp.info,  Node: Implementing BARRIER construct,  Next: Implementing THREADPRIVATE construct,  Prev: Implementing FLUSH construct,  Up: The libgomp ABI
-
-4.5 Implementing BARRIER construct
-==================================
-
-       void GOMP_barrier (void)
-
-\1f
-File: libgomp.info,  Node: Implementing THREADPRIVATE construct,  Next: Implementing PRIVATE clause,  Prev: Implementing BARRIER construct,  Up: The libgomp ABI
-
-4.6 Implementing THREADPRIVATE construct
-========================================
-
-In _most_ cases we can map this directly to `__thread'.  Except that
-OMP allows constructors for C++ objects.  We can either refuse to
-support this (how often is it used?) or we can implement something akin
-to .ctors.
-
-   Even more ideally, this ctor feature is handled by extensions to the
-main pthreads library.  Failing that, we can have a set of entry points
-to register ctor functions to be called.
-
-\1f
-File: libgomp.info,  Node: Implementing PRIVATE clause,  Next: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Prev: Implementing THREADPRIVATE construct,  Up: The libgomp ABI
-
-4.7 Implementing PRIVATE clause
-===============================
-
-In association with a PARALLEL, or within the lexical extent of a
-PARALLEL block, the variable becomes a local variable in the parallel
-subfunction.
-
-   In association with FOR or SECTIONS blocks, create a new automatic
-variable within the current function.  This preserves the semantic of
-new variable creation.
-
-\1f
-File: libgomp.info,  Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Next: Implementing REDUCTION clause,  Prev: Implementing PRIVATE clause,  Up: The libgomp ABI
-
-4.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses
-========================================================================
-
-Seems simple enough for PARALLEL blocks.  Create a private struct for
-communicating between parent and subfunction.  In the parent, copy in
-values for scalar and "small" structs; copy in addresses for others
-TREE_ADDRESSABLE types.  In the subfunction, copy the value into the
-local variable.
-
-   Not clear at all what to do with bare FOR or SECTION blocks.  The
-only thing I can figure is that we do something like
-
-     #pragma omp for firstprivate(x) lastprivate(y)
-     for (int i = 0; i < n; ++i)
-       body;
-
-   which becomes
-
-     {
-       int x = x, y;
-
-       // for stuff
-
-       if (i == n)
-         y = y;
-     }
-
-   where the "x=x" and "y=y" assignments actually have different uids
-for the two variables, i.e. not something you could write directly in
-C.  Presumably this only makes sense if the "outer" x and y are global
-variables.
-
-   COPYPRIVATE would work the same way, except the structure broadcast
-would have to happen via SINGLE machinery instead.
-
-\1f
-File: libgomp.info,  Node: Implementing REDUCTION clause,  Next: Implementing PARALLEL construct,  Prev: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses,  Up: The libgomp ABI
-
-4.9 Implementing REDUCTION clause
-=================================
-
-The private struct mentioned in the previous section should have a
-pointer to an array of the type of the variable, indexed by the
-thread's TEAM_ID.  The thread stores its final value into the array,
-and after the barrier the master thread iterates over the array to
-collect the values.
-
-\1f
-File: libgomp.info,  Node: Implementing PARALLEL construct,  Next: Implementing FOR construct,  Prev: Implementing REDUCTION clause,  Up: The libgomp ABI
-
-4.10 Implementing PARALLEL construct
-====================================
-
-       #pragma omp parallel
-       {
-         body;
-       }
-
-   becomes
-
-       void subfunction (void *data)
-       {
-         use data;
-         body;
-       }
-
-       setup data;
-       GOMP_parallel_start (subfunction, &data, num_threads);
-       subfunction (&data);
-       GOMP_parallel_end ();
-
-       void GOMP_parallel_start (void (*fn)(void *), void *data, unsigned num_threads)
-
-   The FN argument is the subfunction to be run in parallel.
-
-   The DATA argument is a pointer to a structure used to communicate
-data in and out of the subfunction, as discussed above with respect to
-FIRSTPRIVATE et al.
-
-   The NUM_THREADS argument is 1 if an IF clause is present and false,
-or the value of the NUM_THREADS clause, if present, or 0.
-
-   The function needs to create the appropriate number of threads
-and/or launch them from the dock.  It needs to create the team
-structure and assign team ids.
-
-       void GOMP_parallel_end (void)
-
-   Tears down the team and returns us to the previous
-`omp_in_parallel()' state.
-
-\1f
-File: libgomp.info,  Node: Implementing FOR construct,  Next: Implementing ORDERED construct,  Prev: Implementing PARALLEL construct,  Up: The libgomp ABI
-
-4.11 Implementing FOR construct
-===============================
-
-       #pragma omp parallel for
-       for (i = lb; i <= ub; i++)
-         body;
-
-   becomes
-
-       void subfunction (void *data)
-       {
-         long _s0, _e0;
-         while (GOMP_loop_static_next (&_s0, &_e0))
-         {
-           long _e1 = _e0, i;
-           for (i = _s0; i < _e1; i++)
-             body;
-         }
-         GOMP_loop_end_nowait ();
-       }
-
-       GOMP_parallel_loop_static (subfunction, NULL, 0, lb, ub+1, 1, 0);
-       subfunction (NULL);
-       GOMP_parallel_end ();
-
-       #pragma omp for schedule(runtime)
-       for (i = 0; i < n; i++)
-         body;
-
-   becomes
-
-       {
-         long i, _s0, _e0;
-         if (GOMP_loop_runtime_start (0, n, 1, &_s0, &_e0))
-           do {
-             long _e1 = _e0;
-             for (i = _s0, i < _e0; i++)
-               body;
-           } while (GOMP_loop_runtime_next (&_s0, _&e0));
-         GOMP_loop_end ();
-       }
-
-   Note that while it looks like there is trickyness to propagating a
-non-constant STEP, there isn't really.  We're explicitly allowed to
-evaluate it as many times as we want, and any variables involved should
-automatically be handled as PRIVATE or SHARED like any other variables.
-So the expression should remain evaluable in the subfunction.  We can
-also pull it into a local variable if we like, but since its supposed
-to remain unchanged, we can also not if we like.
-
-   If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
-able to get away with no work-sharing context at all, since we can
-simply perform the arithmetic directly in each thread to divide up the
-iterations.  Which would mean that we wouldn't need to call any of
-these routines.
-
-   There are separate routines for handling loops with an ORDERED
-clause.  Bookkeeping for that is non-trivial...
-
-\1f
-File: libgomp.info,  Node: Implementing ORDERED construct,  Next: Implementing SECTIONS construct,  Prev: Implementing FOR construct,  Up: The libgomp ABI
-
-4.12 Implementing ORDERED construct
-===================================
-
-       void GOMP_ordered_start (void)
-       void GOMP_ordered_end (void)
-
-\1f
-File: libgomp.info,  Node: Implementing SECTIONS construct,  Next: Implementing SINGLE construct,  Prev: Implementing ORDERED construct,  Up: The libgomp ABI
-
-4.13 Implementing SECTIONS construct
-====================================
-
-A block as
-
-       #pragma omp sections
-       {
-         #pragma omp section
-         stmt1;
-         #pragma omp section
-         stmt2;
-         #pragma omp section
-         stmt3;
-       }
-
-   becomes
-
-       for (i = GOMP_sections_start (3); i != 0; i = GOMP_sections_next ())
-         switch (i)
-           {
-           case 1:
-             stmt1;
-             break;
-           case 2:
-             stmt2;
-             break;
-           case 3:
-             stmt3;
-             break;
-           }
-       GOMP_barrier ();
-
-\1f
-File: libgomp.info,  Node: Implementing SINGLE construct,  Prev: Implementing SECTIONS construct,  Up: The libgomp ABI
-
-4.14 Implementing SINGLE construct
-==================================
-
-A block like
-
-       #pragma omp single
-       {
-         body;
-       }
-
-   becomes
-
-       if (GOMP_single_start ())
-         body;
-       GOMP_barrier ();
-
-   while
-
-       #pragma omp single copyprivate(x)
-         body;
-
-   becomes
-
-       datap = GOMP_single_copy_start ();
-       if (datap == NULL)
-         {
-           body;
-           data.x = x;
-           GOMP_single_copy_end (&data);
-         }
-       else
-         x = datap->x;
-       GOMP_barrier ();
-
-\1f
-File: libgomp.info,  Node: Reporting Bugs,  Next: Copying,  Prev: The libgomp ABI,  Up: Top
-
-5 Reporting Bugs
-****************
-
-Bugs in the GNU OpenMP implementation should be reported via bugzilla
-(http://gcc.gnu.org/bugzilla/). In all cases, please add "openmp" to
-the keywords field in the bug report.
-
-\1f
-File: libgomp.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
-
-GNU GENERAL PUBLIC LICENSE
-**************************
-
-                         Version 2, June 1991
-
-     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-Preamble
-========
-
-The licenses for most software are designed to take away your freedom
-to share and change it.  By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-   When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it in
-new free programs; and that you know you can do these things.
-
-   To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-   We protect your rights with two steps: (1) copyright the software,
-and (2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-   Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-   Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-   The precise terms and conditions for copying, distribution and
-modification follow.
-
-    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-  0. This License applies to any program or other work which contains a
-     notice placed by the copyright holder saying it may be distributed
-     under the terms of this General Public License.  The "Program",
-     below, refers to any such program or work, and a "work based on
-     the Program" means either the Program or any derivative work under
-     copyright law: that is to say, a work containing the Program or a
-     portion of it, either verbatim or with modifications and/or
-     translated into another language.  (Hereinafter, translation is
-     included without limitation in the term "modification".)  Each
-     licensee is addressed as "you".
-
-     Activities other than copying, distribution and modification are
-     not covered by this License; they are outside its scope.  The act
-     of running the Program is not restricted, and the output from the
-     Program is covered only if its contents constitute a work based on
-     the Program (independent of having been made by running the
-     Program).  Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-     source code as you receive it, in any medium, provided that you
-     conspicuously and appropriately publish on each copy an appropriate
-     copyright notice and disclaimer of warranty; keep intact all the
-     notices that refer to this License and to the absence of any
-     warranty; and give any other recipients of the Program a copy of
-     this License along with the Program.
-
-     You may charge a fee for the physical act of transferring a copy,
-     and you may at your option offer warranty protection in exchange
-     for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-     of it, thus forming a work based on the Program, and copy and
-     distribute such modifications or work under the terms of Section 1
-     above, provided that you also meet all of these conditions:
-
-       a. You must cause the modified files to carry prominent notices
-          stating that you changed the files and the date of any change.
-
-       b. You must cause any work that you distribute or publish, that
-          in whole or in part contains or is derived from the Program
-          or any part thereof, to be licensed as a whole at no charge
-          to all third parties under the terms of this License.
-
-       c. If the modified program normally reads commands interactively
-          when run, you must cause it, when started running for such
-          interactive use in the most ordinary way, to print or display
-          an announcement including an appropriate copyright notice and
-          a notice that there is no warranty (or else, saying that you
-          provide a warranty) and that users may redistribute the
-          program under these conditions, and telling the user how to
-          view a copy of this License.  (Exception: if the Program
-          itself is interactive but does not normally print such an
-          announcement, your work based on the Program is not required
-          to print an announcement.)
-
-     These requirements apply to the modified work as a whole.  If
-     identifiable sections of that work are not derived from the
-     Program, and can be reasonably considered independent and separate
-     works in themselves, then this License, and its terms, do not
-     apply to those sections when you distribute them as separate
-     works.  But when you distribute the same sections as part of a
-     whole which is a work based on the Program, the distribution of
-     the whole must be on the terms of this License, whose permissions
-     for other licensees extend to the entire whole, and thus to each
-     and every part regardless of who wrote it.
-
-     Thus, it is not the intent of this section to claim rights or
-     contest your rights to work written entirely by you; rather, the
-     intent is to exercise the right to control the distribution of
-     derivative or collective works based on the Program.
-
-     In addition, mere aggregation of another work not based on the
-     Program with the Program (or with a work based on the Program) on
-     a volume of a storage or distribution medium does not bring the
-     other work under the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-     under Section 2) in object code or executable form under the terms
-     of Sections 1 and 2 above provided that you also do one of the
-     following:
-
-       a. Accompany it with the complete corresponding machine-readable
-          source code, which must be distributed under the terms of
-          Sections 1 and 2 above on a medium customarily used for
-          software interchange; or,
-
-       b. Accompany it with a written offer, valid for at least three
-          years, to give any third party, for a charge no more than your
-          cost of physically performing source distribution, a complete
-          machine-readable copy of the corresponding source code, to be
-          distributed under the terms of Sections 1 and 2 above on a
-          medium customarily used for software interchange; or,
-
-       c. Accompany it with the information you received as to the offer
-          to distribute corresponding source code.  (This alternative is
-          allowed only for noncommercial distribution and only if you
-          received the program in object code or executable form with
-          such an offer, in accord with Subsection b above.)
-
-     The source code for a work means the preferred form of the work for
-     making modifications to it.  For an executable work, complete
-     source code means all the source code for all modules it contains,
-     plus any associated interface definition files, plus the scripts
-     used to control compilation and installation of the executable.
-     However, as a special exception, the source code distributed need
-     not include anything that is normally distributed (in either
-     source or binary form) with the major components (compiler,
-     kernel, and so on) of the operating system on which the executable
-     runs, unless that component itself accompanies the executable.
-
-     If distribution of executable or object code is made by offering
-     access to copy from a designated place, then offering equivalent
-     access to copy the source code from the same place counts as
-     distribution of the source code, even though third parties are not
-     compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense or distribute the Program is
-     void, and will automatically terminate your rights under this
-     License.  However, parties who have received copies, or rights,
-     from you under this License will not have their licenses
-     terminated so long as such parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-     signed it.  However, nothing else grants you permission to modify
-     or distribute the Program or its derivative works.  These actions
-     are prohibited by law if you do not accept this License.
-     Therefore, by modifying or distributing the Program (or any work
-     based on the Program), you indicate your acceptance of this
-     License to do so, and all its terms and conditions for copying,
-     distributing or modifying the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-     Program), the recipient automatically receives a license from the
-     original licensor to copy, distribute or modify the Program
-     subject to these terms and conditions.  You may not impose any
-     further restrictions on the recipients' exercise of the rights
-     granted herein.  You are not responsible for enforcing compliance
-     by third parties to this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-     infringement or for any other reason (not limited to patent
-     issues), conditions are imposed on you (whether by court order,
-     agreement or otherwise) that contradict the conditions of this
-     License, they do not excuse you from the conditions of this
-     License.  If you cannot distribute so as to satisfy simultaneously
-     your obligations under this License and any other pertinent
-     obligations, then as a consequence you may not distribute the
-     Program at all.  For example, if a patent license would not permit
-     royalty-free redistribution of the Program by all those who
-     receive copies directly or indirectly through you, then the only
-     way you could satisfy both it and this License would be to refrain
-     entirely from distribution of the Program.
-
-     If any portion of this section is held invalid or unenforceable
-     under any particular circumstance, the balance of the section is
-     intended to apply and the section as a whole is intended to apply
-     in other circumstances.
-
-     It is not the purpose of this section to induce you to infringe any
-     patents or other property right claims or to contest validity of
-     any such claims; this section has the sole purpose of protecting
-     the integrity of the free software distribution system, which is
-     implemented by public license practices.  Many people have made
-     generous contributions to the wide range of software distributed
-     through that system in reliance on consistent application of that
-     system; it is up to the author/donor to decide if he or she is
-     willing to distribute software through any other system and a
-     licensee cannot impose that choice.
-
-     This section is intended to make thoroughly clear what is believed
-     to be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-     certain countries either by patents or by copyrighted interfaces,
-     the original copyright holder who places the Program under this
-     License may add an explicit geographical distribution limitation
-     excluding those countries, so that distribution is permitted only
-     in or among countries not thus excluded.  In such case, this
-     License incorporates the limitation as if written in the body of
-     this License.
-
-  9. The Free Software Foundation may publish revised and/or new
-     versions of the General Public License from time to time.  Such
-     new versions will be similar in spirit to the present version, but
-     may differ in detail to address new problems or concerns.
-
-     Each version is given a distinguishing version number.  If the
-     Program specifies a version number of this License which applies
-     to it and "any later version", you have the option of following
-     the terms and conditions either of that version or of any later
-     version published by the Free Software Foundation.  If the Program
-     does not specify a version number of this License, you may choose
-     any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-     programs whose distribution conditions are different, write to the
-     author to ask for permission.  For software which is copyrighted
-     by the Free Software Foundation, write to the Free Software
-     Foundation; we sometimes make exceptions for this.  Our decision
-     will be guided by the two goals of preserving the free status of
-     all derivatives of our free software and of promoting the sharing
-     and reuse of software generally.
-
-                                NO WARRANTY
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
-     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
-     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
-     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
-     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
-     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
-     SERVICING, REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
-     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
-     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
-     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
-     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
-     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
-     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-                      END OF TERMS AND CONDITIONS
-Appendix: How to Apply These Terms to Your New Programs
-=======================================================
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
-   To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
-     Copyright (C) YEAR  NAME OF AUTHOR
-
-     This program 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 2 of the License, or
-     (at your option) any later version.
-
-     This program 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.
-
-     You should have received a copy of the GNU General Public License
-     along with this program; if not, write to the Free Software
-     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   If the program is interactive, make it output a short notice like
-this when it starts in an interactive mode:
-
-     Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
-     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-     type `show w'.
-     This is free software, and you are welcome to redistribute it
-     under certain conditions; type `show c' for details.
-
-   The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License.  Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
-   You should also get your employer (if you work as a programmer) or
-your school, if any, to sign a "copyright disclaimer" for the program,
-if necessary.  Here is a sample; alter the names:
-
-     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-     `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-     SIGNATURE OF TY COON, 1 April 1989
-     Ty Coon, President of Vice
-
-   This General Public License does not permit incorporating your
-program into proprietary programs.  If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library.  If this is what you want to do, use the
-GNU Library General Public License instead of this License.
-
-\1f
-File: libgomp.info,  Node: GNU Free Documentation License,  Next: Funding,  Prev: Copying,  Up: Top
-
-GNU Free Documentation License
-******************************
-
-                      Version 1.2, November 2002
-
-     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-  0. PREAMBLE
-
-     The purpose of this License is to make a manual, textbook, or other
-     functional and useful document "free" in the sense of freedom: to
-     assure everyone the effective freedom to copy and redistribute it,
-     with or without modifying it, either commercially or
-     noncommercially.  Secondarily, this License preserves for the
-     author and publisher a way to get credit for their work, while not
-     being considered responsible for modifications made by others.
-
-     This License is a kind of "copyleft", which means that derivative
-     works of the document must themselves be free in the same sense.
-     It complements the GNU General Public License, which is a copyleft
-     license designed for free software.
-
-     We have designed this License in order to use it for manuals for
-     free software, because free software needs free documentation: a
-     free program should come with manuals providing the same freedoms
-     that the software does.  But this License is not limited to
-     software manuals; it can be used for any textual work, regardless
-     of subject matter or whether it is published as a printed book.
-     We recommend this License principally for works whose purpose is
-     instruction or reference.
-
-  1. APPLICABILITY AND DEFINITIONS
-
-     This License applies to any manual or other work, in any medium,
-     that contains a notice placed by the copyright holder saying it
-     can be distributed under the terms of this License.  Such a notice
-     grants a world-wide, royalty-free license, unlimited in duration,
-     to use that work under the conditions stated herein.  The
-     "Document", below, refers to any such manual or work.  Any member
-     of the public is a licensee, and is addressed as "you".  You
-     accept the license if you copy, modify or distribute the work in a
-     way requiring permission under copyright law.
-
-     A "Modified Version" of the Document means any work containing the
-     Document or a portion of it, either copied verbatim, or with
-     modifications and/or translated into another language.
-
-     A "Secondary Section" is a named appendix or a front-matter section
-     of the Document that deals exclusively with the relationship of the
-     publishers or authors of the Document to the Document's overall
-     subject (or to related matters) and contains nothing that could
-     fall directly within that overall subject.  (Thus, if the Document
-     is in part a textbook of mathematics, a Secondary Section may not
-     explain any mathematics.)  The relationship could be a matter of
-     historical connection with the subject or with related matters, or
-     of legal, commercial, philosophical, ethical or political position
-     regarding them.
-
-     The "Invariant Sections" are certain Secondary Sections whose
-     titles are designated, as being those of Invariant Sections, in
-     the notice that says that the Document is released under this
-     License.  If a section does not fit the above definition of
-     Secondary then it is not allowed to be designated as Invariant.
-     The Document may contain zero Invariant Sections.  If the Document
-     does not identify any Invariant Sections then there are none.
-
-     The "Cover Texts" are certain short passages of text that are
-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
-     that says that the Document is released under this License.  A
-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
-     be at most 25 words.
-
-     A "Transparent" copy of the Document means a machine-readable copy,
-     represented in a format whose specification is available to the
-     general public, that is suitable for revising the document
-     straightforwardly with generic text editors or (for images
-     composed of pixels) generic paint programs or (for drawings) some
-     widely available drawing editor, and that is suitable for input to
-     text formatters or for automatic translation to a variety of
-     formats suitable for input to text formatters.  A copy made in an
-     otherwise Transparent file format whose markup, or absence of
-     markup, has been arranged to thwart or discourage subsequent
-     modification by readers is not Transparent.  An image format is
-     not Transparent if used for any substantial amount of text.  A
-     copy that is not "Transparent" is called "Opaque".
-
-     Examples of suitable formats for Transparent copies include plain
-     ASCII without markup, Texinfo input format, LaTeX input format,
-     SGML or XML using a publicly available DTD, and
-     standard-conforming simple HTML, PostScript or PDF designed for
-     human modification.  Examples of transparent image formats include
-     PNG, XCF and JPG.  Opaque formats include proprietary formats that
-     can be read and edited only by proprietary word processors, SGML or
-     XML for which the DTD and/or processing tools are not generally
-     available, and the machine-generated HTML, PostScript or PDF
-     produced by some word processors for output purposes only.
-
-     The "Title Page" means, for a printed book, the title page itself,
-     plus such following pages as are needed to hold, legibly, the
-     material this License requires to appear in the title page.  For
-     works in formats which do not have any title page as such, "Title
-     Page" means the text near the most prominent appearance of the
-     work's title, preceding the beginning of the body of the text.
-
-     A section "Entitled XYZ" means a named subunit of the Document
-     whose title either is precisely XYZ or contains XYZ in parentheses
-     following text that translates XYZ in another language.  (Here XYZ
-     stands for a specific section name mentioned below, such as
-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
-     To "Preserve the Title" of such a section when you modify the
-     Document means that it remains a section "Entitled XYZ" according
-     to this definition.
-
-     The Document may include Warranty Disclaimers next to the notice
-     which states that this License applies to the Document.  These
-     Warranty Disclaimers are considered to be included by reference in
-     this License, but only as regards disclaiming warranties: any other
-     implication that these Warranty Disclaimers may have is void and
-     has no effect on the meaning of this License.
-
-  2. VERBATIM COPYING
-
-     You may copy and distribute the Document in any medium, either
-     commercially or noncommercially, provided that this License, the
-     copyright notices, and the license notice saying this License
-     applies to the Document are reproduced in all copies, and that you
-     add no other conditions whatsoever to those of this License.  You
-     may not use technical measures to obstruct or control the reading
-     or further copying of the copies you make or distribute.  However,
-     you may accept compensation in exchange for copies.  If you
-     distribute a large enough number of copies you must also follow
-     the conditions in section 3.
-
-     You may also lend copies, under the same conditions stated above,
-     and you may publicly display copies.
-
-  3. COPYING IN QUANTITY
-
-     If you publish printed copies (or copies in media that commonly
-     have printed covers) of the Document, numbering more than 100, and
-     the Document's license notice requires Cover Texts, you must
-     enclose the copies in covers that carry, clearly and legibly, all
-     these Cover Texts: Front-Cover Texts on the front cover, and
-     Back-Cover Texts on the back cover.  Both covers must also clearly
-     and legibly identify you as the publisher of these copies.  The
-     front cover must present the full title with all words of the
-     title equally prominent and visible.  You may add other material
-     on the covers in addition.  Copying with changes limited to the
-     covers, as long as they preserve the title of the Document and
-     satisfy these conditions, can be treated as verbatim copying in
-     other respects.
-
-     If the required texts for either cover are too voluminous to fit
-     legibly, you should put the first ones listed (as many as fit
-     reasonably) on the actual cover, and continue the rest onto
-     adjacent pages.
-
-     If you publish or distribute Opaque copies of the Document
-     numbering more than 100, you must either include a
-     machine-readable Transparent copy along with each Opaque copy, or
-     state in or with each Opaque copy a computer-network location from
-     which the general network-using public has access to download
-     using public-standard network protocols a complete Transparent
-     copy of the Document, free of added material.  If you use the
-     latter option, you must take reasonably prudent steps, when you
-     begin distribution of Opaque copies in quantity, to ensure that
-     this Transparent copy will remain thus accessible at the stated
-     location until at least one year after the last time you
-     distribute an Opaque copy (directly or through your agents or
-     retailers) of that edition to the public.
-
-     It is requested, but not required, that you contact the authors of
-     the Document well before redistributing any large number of
-     copies, to give them a chance to provide you with an updated
-     version of the Document.
-
-  4. MODIFICATIONS
-
-     You may copy and distribute a Modified Version of the Document
-     under the conditions of sections 2 and 3 above, provided that you
-     release the Modified Version under precisely this License, with
-     the Modified Version filling the role of the Document, thus
-     licensing distribution and modification of the Modified Version to
-     whoever possesses a copy of it.  In addition, you must do these
-     things in the Modified Version:
-
-       A. Use in the Title Page (and on the covers, if any) a title
-          distinct from that of the Document, and from those of
-          previous versions (which should, if there were any, be listed
-          in the History section of the Document).  You may use the
-          same title as a previous version if the original publisher of
-          that version gives permission.
-
-       B. List on the Title Page, as authors, one or more persons or
-          entities responsible for authorship of the modifications in
-          the Modified Version, together with at least five of the
-          principal authors of the Document (all of its principal
-          authors, if it has fewer than five), unless they release you
-          from this requirement.
-
-       C. State on the Title page the name of the publisher of the
-          Modified Version, as the publisher.
-
-       D. Preserve all the copyright notices of the Document.
-
-       E. Add an appropriate copyright notice for your modifications
-          adjacent to the other copyright notices.
-
-       F. Include, immediately after the copyright notices, a license
-          notice giving the public permission to use the Modified
-          Version under the terms of this License, in the form shown in
-          the Addendum below.
-
-       G. Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document's
-          license notice.
-
-       H. Include an unaltered copy of this License.
-
-       I. Preserve the section Entitled "History", Preserve its Title,
-          and add to it an item stating at least the title, year, new
-          authors, and publisher of the Modified Version as given on
-          the Title Page.  If there is no section Entitled "History" in
-          the Document, create one stating the title, year, authors,
-          and publisher of the Document as given on its Title Page,
-          then add an item describing the Modified Version as stated in
-          the previous sentence.
-
-       J. Preserve the network location, if any, given in the Document
-          for public access to a Transparent copy of the Document, and
-          likewise the network locations given in the Document for
-          previous versions it was based on.  These may be placed in
-          the "History" section.  You may omit a network location for a
-          work that was published at least four years before the
-          Document itself, or if the original publisher of the version
-          it refers to gives permission.
-
-       K. For any section Entitled "Acknowledgements" or "Dedications",
-          Preserve the Title of the section, and preserve in the
-          section all the substance and tone of each of the contributor
-          acknowledgements and/or dedications given therein.
-
-       L. Preserve all the Invariant Sections of the Document,
-          unaltered in their text and in their titles.  Section numbers
-          or the equivalent are not considered part of the section
-          titles.
-
-       M. Delete any section Entitled "Endorsements".  Such a section
-          may not be included in the Modified Version.
-
-       N. Do not retitle any existing section to be Entitled
-          "Endorsements" or to conflict in title with any Invariant
-          Section.
-
-       O. Preserve any Warranty Disclaimers.
-
-     If the Modified Version includes new front-matter sections or
-     appendices that qualify as Secondary Sections and contain no
-     material copied from the Document, you may at your option
-     designate some or all of these sections as invariant.  To do this,
-     add their titles to the list of Invariant Sections in the Modified
-     Version's license notice.  These titles must be distinct from any
-     other section titles.
-
-     You may add a section Entitled "Endorsements", provided it contains
-     nothing but endorsements of your Modified Version by various
-     parties--for example, statements of peer review or that the text
-     has been approved by an organization as the authoritative
-     definition of a standard.
-
-     You may add a passage of up to five words as a Front-Cover Text,
-     and a passage of up to 25 words as a Back-Cover Text, to the end
-     of the list of Cover Texts in the Modified Version.  Only one
-     passage of Front-Cover Text and one of Back-Cover Text may be
-     added by (or through arrangements made by) any one entity.  If the
-     Document already includes a cover text for the same cover,
-     previously added by you or by arrangement made by the same entity
-     you are acting on behalf of, you may not add another; but you may
-     replace the old one, on explicit permission from the previous
-     publisher that added the old one.
-
-     The author(s) and publisher(s) of the Document do not by this
-     License give permission to use their names for publicity for or to
-     assert or imply endorsement of any Modified Version.
-
-  5. COMBINING DOCUMENTS
-
-     You may combine the Document with other documents released under
-     this License, under the terms defined in section 4 above for
-     modified versions, provided that you include in the combination
-     all of the Invariant Sections of all of the original documents,
-     unmodified, and list them all as Invariant Sections of your
-     combined work in its license notice, and that you preserve all
-     their Warranty Disclaimers.
-
-     The combined work need only contain one copy of this License, and
-     multiple identical Invariant Sections may be replaced with a single
-     copy.  If there are multiple Invariant Sections with the same name
-     but different contents, make the title of each such section unique
-     by adding at the end of it, in parentheses, the name of the
-     original author or publisher of that section if known, or else a
-     unique number.  Make the same adjustment to the section titles in
-     the list of Invariant Sections in the license notice of the
-     combined work.
-
-     In the combination, you must combine any sections Entitled
-     "History" in the various original documents, forming one section
-     Entitled "History"; likewise combine any sections Entitled
-     "Acknowledgements", and any sections Entitled "Dedications".  You
-     must delete all sections Entitled "Endorsements."
-
-  6. COLLECTIONS OF DOCUMENTS
-
-     You may make a collection consisting of the Document and other
-     documents released under this License, and replace the individual
-     copies of this License in the various documents with a single copy
-     that is included in the collection, provided that you follow the
-     rules of this License for verbatim copying of each of the
-     documents in all other respects.
-
-     You may extract a single document from such a collection, and
-     distribute it individually under this License, provided you insert
-     a copy of this License into the extracted document, and follow
-     this License in all other respects regarding verbatim copying of
-     that document.
-
-  7. AGGREGATION WITH INDEPENDENT WORKS
-
-     A compilation of the Document or its derivatives with other
-     separate and independent documents or works, in or on a volume of
-     a storage or distribution medium, is called an "aggregate" if the
-     copyright resulting from the compilation is not used to limit the
-     legal rights of the compilation's users beyond what the individual
-     works permit.  When the Document is included in an aggregate, this
-     License does not apply to the other works in the aggregate which
-     are not themselves derivative works of the Document.
-
-     If the Cover Text requirement of section 3 is applicable to these
-     copies of the Document, then if the Document is less than one half
-     of the entire aggregate, the Document's Cover Texts may be placed
-     on covers that bracket the Document within the aggregate, or the
-     electronic equivalent of covers if the Document is in electronic
-     form.  Otherwise they must appear on printed covers that bracket
-     the whole aggregate.
-
-  8. TRANSLATION
-
-     Translation is considered a kind of modification, so you may
-     distribute translations of the Document under the terms of section
-     4.  Replacing Invariant Sections with translations requires special
-     permission from their copyright holders, but you may include
-     translations of some or all Invariant Sections in addition to the
-     original versions of these Invariant Sections.  You may include a
-     translation of this License, and all the license notices in the
-     Document, and any Warranty Disclaimers, provided that you also
-     include the original English version of this License and the
-     original versions of those notices and disclaimers.  In case of a
-     disagreement between the translation and the original version of
-     this License or a notice or disclaimer, the original version will
-     prevail.
-
-     If a section in the Document is Entitled "Acknowledgements",
-     "Dedications", or "History", the requirement (section 4) to
-     Preserve its Title (section 1) will typically require changing the
-     actual title.
-
-  9. TERMINATION
-
-     You may not copy, modify, sublicense, or distribute the Document
-     except as expressly provided for under this License.  Any other
-     attempt to copy, modify, sublicense or distribute the Document is
-     void, and will automatically terminate your rights under this
-     License.  However, parties who have received copies, or rights,
-     from you under this License will not have their licenses
-     terminated so long as such parties remain in full compliance.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
-     The Free Software Foundation may publish new, revised versions of
-     the GNU Free Documentation License from time to time.  Such new
-     versions will be similar in spirit to the present version, but may
-     differ in detail to address new problems or concerns.  See
-     `http://www.gnu.org/copyleft/'.
-
-     Each version of the License is given a distinguishing version
-     number.  If the Document specifies that a particular numbered
-     version of this License "or any later version" applies to it, you
-     have the option of following the terms and conditions either of
-     that specified version or of any later version that has been
-     published (not as a draft) by the Free Software Foundation.  If
-     the Document does not specify a version number of this License,
-     you may choose any version ever published (not as a draft) by the
-     Free Software Foundation.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
-       Copyright (C)  YEAR  YOUR NAME.
-       Permission is granted to copy, distribute and/or modify this document
-       under the terms of the GNU Free Documentation License, Version 1.2
-       or any later version published by the Free Software Foundation;
-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-       Texts.  A copy of the license is included in the section entitled ``GNU
-       Free Documentation License''.
-
-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
-         with the Invariant Sections being LIST THEIR TITLES, with
-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
-         being LIST.
-
-   If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-   If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License, to
-permit their use in free software.
-
-\1f
-File: libgomp.info,  Node: Funding,  Next: Index,  Prev: GNU Free Documentation License,  Up: Top
-
-Funding Free Software
-*********************
-
-If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development.  The most effective approach known is to encourage
-commercial redistributors to donate.
-
-   Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers--the Free Software Foundation, and others.
-
-   The way to convince distributors to do this is to demand it and
-expect it from them.  So when you compare distributors, judge them
-partly by how much they give to free software development.  Show
-distributors they must compete to be the one who gives the most.
-
-   To make this approach work, you must insist on numbers that you can
-compare, such as, "We will donate ten dollars to the Frobnitz project
-for each disk sold."  Don't be satisfied with a vague promise, such as
-"A portion of the profits are donated," since it doesn't give a basis
-for comparison.
-
-   Even a precise fraction "of the profits from this disk" is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably less
-than a dollar; it might be a few cents, or nothing at all.
-
-   Some redistributors do development work themselves.  This is useful
-too; but to keep everyone honest, you need to inquire how much they do,
-and what kind.  Some kinds of development make much more long-term
-difference than others.  For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much.  Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU Compiler Collection
-contribute more; major new features or packages contribute the most.
-
-   By establishing the idea that supporting further development is "the
-proper thing to do" when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
-     Copyright (C) 1994 Free Software Foundation, Inc.
-     Verbatim copying and redistribution of this section is permitted
-     without royalty; alteration is not permitted.
-
-\1f
-File: libgomp.info,  Node: Index,  Prev: Funding,  Up: Top
-
-Index
-*****
-
-\0\b[index\0\b]
-* Menu:
-
-* Environment Variable <1>:              GOMP_STACKSIZE.        (line 6)
-* Environment Variable <2>:              GOMP_CPU_AFFINITY.     (line 6)
-* Environment Variable <3>:              OMP_WAIT_POLICY.       (line 6)
-* Environment Variable <4>:              OMP_THREAD_LIMIT.      (line 6)
-* Environment Variable <5>:              OMP_STACKSIZE.         (line 6)
-* Environment Variable <6>:              OMP_SCHEDULE.          (line 6)
-* Environment Variable <7>:              OMP_NUM_THREADS.       (line 6)
-* Environment Variable <8>:              OMP_NESTED.            (line 6)
-* Environment Variable <9>:              OMP_MAX_ACTIVE_LEVELS. (line 6)
-* Environment Variable:                  OMP_DYNAMIC.           (line 6)
-* FDL, GNU Free Documentation License:   GNU Free Documentation License.
-                                                                (line 6)
-* Implementation specific setting <1>:   GOMP_STACKSIZE.        (line 6)
-* Implementation specific setting <2>:   OMP_SCHEDULE.          (line 6)
-* Implementation specific setting <3>:   OMP_NUM_THREADS.       (line 6)
-* Implementation specific setting:       OMP_NESTED.            (line 6)
-* Introduction:                          Top.                   (line 6)
-
-
-\1f
-Tag Table:
-Node: Top\7f2039
-Node: Enabling OpenMP\7f3233
-Node: Runtime Library Routines\7f4018
-Node: omp_get_active_level\7f6393
-Node: omp_get_ancestor_thread_num\7f7084
-Node: omp_get_dynamic\7f7998
-Node: omp_get_level\7f8872
-Node: omp_get_max_active_levels\7f9483
-Node: omp_get_max_threads\7f10171
-Node: omp_get_nested\7f10923
-Node: omp_get_num_procs\7f11831
-Node: omp_get_num_threads\7f12345
-Node: omp_get_schedule\7f13415
-Node: omp_get_team_size\7f14322
-Node: omp_get_thread_limit\7f15280
-Node: omp_get_thread_num\7f15899
-Node: omp_in_parallel\7f16753
-Node: omp_set_dynamic\7f17399
-Node: omp_set_max_active_levels\7f18235
-Node: omp_set_nested\7f18997
-Node: omp_set_num_threads\7f19874
-Node: omp_set_schedule\7f20712
-Node: omp_init_lock\7f21756
-Node: omp_set_lock\7f22406
-Node: omp_test_lock\7f23255
-Node: omp_unset_lock\7f24282
-Node: omp_destroy_lock\7f25208
-Node: omp_init_nest_lock\7f25878
-Node: omp_set_nest_lock\7f26610
-Node: omp_test_nest_lock\7f27519
-Node: omp_unset_nest_lock\7f28617
-Node: omp_destroy_nest_lock\7f29626
-Node: omp_get_wtick\7f30374
-Node: omp_get_wtime\7f30961
-Node: Environment Variables\7f31744
-Node: OMP_DYNAMIC\7f32805
-Node: OMP_MAX_ACTIVE_LEVELS\7f33373
-Node: OMP_NESTED\7f34010
-Node: OMP_NUM_THREADS\7f34614
-Node: OMP_SCHEDULE\7f35187
-Node: OMP_STACKSIZE\7f35881
-Node: OMP_THREAD_LIMIT\7f36706
-Node: OMP_WAIT_POLICY\7f37299
-Node: GOMP_CPU_AFFINITY\7f37864
-Node: GOMP_STACKSIZE\7f39348
-Node: The libgomp ABI\7f40158
-Node: Implementing MASTER construct\7f40956
-Node: Implementing CRITICAL construct\7f41369
-Node: Implementing ATOMIC construct\7f42117
-Node: Implementing FLUSH construct\7f42598
-Node: Implementing BARRIER construct\7f42869
-Node: Implementing THREADPRIVATE construct\7f43138
-Node: Implementing PRIVATE clause\7f43790
-Node: Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses\7f44371
-Node: Implementing REDUCTION clause\7f45686
-Node: Implementing PARALLEL construct\7f46242
-Node: Implementing FOR construct\7f47499
-Node: Implementing ORDERED construct\7f49497
-Node: Implementing SECTIONS construct\7f49803
-Node: Implementing SINGLE construct\7f50569
-Node: Reporting Bugs\7f51231
-Node: Copying\7f51539
-Node: GNU Free Documentation License\7f70749
-Node: Funding\7f93160
-Node: Index\7f95677
-\1f
-End Tag Table