fortran.c revision 302408
1/* Copyright (C) 2005 Free Software Foundation, Inc.
2   Contributed by Jakub Jelinek <jakub@redhat.com>.
3
4   This file is part of the GNU OpenMP Library (libgomp).
5
6   Libgomp is free software; you can redistribute it and/or modify it
7   under the terms of the GNU Lesser General Public License as published by
8   the Free Software Foundation; either version 2.1 of the License, or
9   (at your option) any later version.
10
11   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13   FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
14   more details.
15
16   You should have received a copy of the GNU Lesser General Public License
17   along with libgomp; see the file COPYING.LIB.  If not, write to the
18   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19   MA 02110-1301, USA.  */
20
21/* As a special exception, if you link this library with other files, some
22   of which are compiled with GCC, to produce an executable, this library
23   does not by itself cause the resulting executable to be covered by the
24   GNU General Public License.  This exception does not however invalidate
25   any other reasons why the executable file might be covered by the GNU
26   General Public License.  */
27
28/* This file contains Fortran wrapper routines.  */
29
30#include "libgomp.h"
31#include "libgomp_f.h"
32#include <stdlib.h>
33
34#ifdef HAVE_ATTRIBUTE_ALIAS
35/* Use internal aliases if possible.  */
36#define ULP	STR1(__USER_LABEL_PREFIX__)
37#define STR1(x)	STR2(x)
38#define STR2(x)	#x
39# define ialias_redirect(fn) \
40  extern __typeof (fn) fn __asm__ (ULP "gomp_ialias_" #fn) attribute_hidden;
41ialias_redirect (omp_init_lock)
42ialias_redirect (omp_init_nest_lock)
43ialias_redirect (omp_destroy_lock)
44ialias_redirect (omp_destroy_nest_lock)
45ialias_redirect (omp_set_lock)
46ialias_redirect (omp_set_nest_lock)
47ialias_redirect (omp_unset_lock)
48ialias_redirect (omp_unset_nest_lock)
49ialias_redirect (omp_test_lock)
50ialias_redirect (omp_test_nest_lock)
51ialias_redirect (omp_set_dynamic)
52ialias_redirect (omp_set_nested)
53ialias_redirect (omp_set_num_threads)
54ialias_redirect (omp_get_dynamic)
55ialias_redirect (omp_get_nested)
56ialias_redirect (omp_in_parallel)
57ialias_redirect (omp_get_max_threads)
58ialias_redirect (omp_get_num_procs)
59ialias_redirect (omp_get_num_threads)
60ialias_redirect (omp_get_thread_num)
61ialias_redirect (omp_get_wtick)
62ialias_redirect (omp_get_wtime)
63#endif
64
65void
66omp_init_lock_ (omp_lock_arg_t lock)
67{
68#ifndef OMP_LOCK_DIRECT
69  omp_lock_arg (lock) = malloc (sizeof (omp_lock_t));
70#endif
71  omp_init_lock (omp_lock_arg (lock));
72}
73
74void
75omp_init_nest_lock_ (omp_nest_lock_arg_t lock)
76{
77#ifndef OMP_NEST_LOCK_DIRECT
78  omp_nest_lock_arg (lock) = malloc (sizeof (omp_nest_lock_t));
79#endif
80  omp_init_nest_lock (omp_nest_lock_arg (lock));
81}
82
83void
84omp_destroy_lock_ (omp_lock_arg_t lock)
85{
86  omp_destroy_lock (omp_lock_arg (lock));
87#ifndef OMP_LOCK_DIRECT
88  free (omp_lock_arg (lock));
89  omp_lock_arg (lock) = NULL;
90#endif
91}
92
93void
94omp_destroy_nest_lock_ (omp_nest_lock_arg_t lock)
95{
96  omp_destroy_nest_lock (omp_nest_lock_arg (lock));
97#ifndef OMP_NEST_LOCK_DIRECT
98  free (omp_nest_lock_arg (lock));
99  omp_nest_lock_arg (lock) = NULL;
100#endif
101}
102
103void
104omp_set_lock_ (omp_lock_arg_t lock)
105{
106  omp_set_lock (omp_lock_arg (lock));
107}
108
109void
110omp_set_nest_lock_ (omp_nest_lock_arg_t lock)
111{
112  omp_set_nest_lock (omp_nest_lock_arg (lock));
113}
114
115void
116omp_unset_lock_ (omp_lock_arg_t lock)
117{
118  omp_unset_lock (omp_lock_arg (lock));
119}
120
121void
122omp_unset_nest_lock_ (omp_nest_lock_arg_t lock)
123{
124  omp_unset_nest_lock (omp_nest_lock_arg (lock));
125}
126
127void
128omp_set_dynamic_ (const int32_t *set)
129{
130  omp_set_dynamic (*set);
131}
132
133void
134omp_set_dynamic_8_ (const int64_t *set)
135{
136  omp_set_dynamic (*set);
137}
138
139void
140omp_set_nested_ (const int32_t *set)
141{
142  omp_set_nested (*set);
143}
144
145void
146omp_set_nested_8_ (const int64_t *set)
147{
148  omp_set_nested (*set);
149}
150
151void
152omp_set_num_threads_ (const int32_t *set)
153{
154  omp_set_num_threads (*set);
155}
156
157void
158omp_set_num_threads_8_ (const int64_t *set)
159{
160  omp_set_num_threads (*set);
161}
162
163int32_t
164omp_get_dynamic_ (void)
165{
166  return omp_get_dynamic ();
167}
168
169int32_t
170omp_get_nested_ (void)
171{
172  return omp_get_nested ();
173}
174
175int32_t
176omp_in_parallel_ (void)
177{
178  return omp_in_parallel ();
179}
180
181int32_t
182omp_test_lock_ (omp_lock_arg_t lock)
183{
184  return omp_test_lock (omp_lock_arg (lock));
185}
186
187int32_t
188omp_get_max_threads_ (void)
189{
190  return omp_get_max_threads ();
191}
192
193int32_t
194omp_get_num_procs_ (void)
195{
196  return omp_get_num_procs ();
197}
198
199int32_t
200omp_get_num_threads_ (void)
201{
202  return omp_get_num_threads ();
203}
204
205int32_t
206omp_get_thread_num_ (void)
207{
208  return omp_get_thread_num ();
209}
210
211int32_t
212omp_test_nest_lock_ (omp_nest_lock_arg_t lock)
213{
214  return omp_test_nest_lock (omp_nest_lock_arg (lock));
215}
216
217double
218omp_get_wtick_ (void)
219{
220  return omp_get_wtick ();
221}
222
223double
224omp_get_wtime_ (void)
225{
226  return omp_get_wtime ();
227}
228