1/* This file contains the definitions and documentation for the
2   OpenMP builtins used in the GNU compiler.
3   Copyright (C) 2005 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
11
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING.  If not, write to the Free
19Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2002110-1301, USA.  */
21
22/* Before including this file, you should define a macro:
23
24     DEF_GOMP_BUILTIN (ENUM, NAME, TYPE, ATTRS)
25
26   See builtins.def for details.  */
27
28DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
29		  BT_FN_INT, ATTR_CONST_NOTHROW_LIST)
30DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_NUM_THREADS, "omp_get_num_threads",
31		  BT_FN_INT, ATTR_CONST_NOTHROW_LIST)
32
33DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_START, "GOMP_atomic_start",
34		  BT_FN_VOID, ATTR_NOTHROW_LIST)
35DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_END, "GOMP_atomic_end",
36		  BT_FN_VOID, ATTR_NOTHROW_LIST)
37DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
38		  BT_FN_VOID, ATTR_NOTHROW_LIST)
39DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
40		  BT_FN_VOID, ATTR_NOTHROW_LIST)
41DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
42		  BT_FN_VOID, ATTR_NOTHROW_LIST)
43DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
44		  "GOMP_critical_name_start",
45		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
46DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
47		  "GOMP_critical_name_end",
48		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
49/* NOTE: Do not change the order of BUILT_IN_GOMP_LOOP_*_START.  They
50   are used in index arithmetic with enum omp_clause_schedule_kind
51   in omp-low.c.  */
52DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
53		  "GOMP_loop_static_start",
54		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
55		  ATTR_NOTHROW_LIST)
56DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
57		  "GOMP_loop_dynamic_start",
58		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
59		  ATTR_NOTHROW_LIST)
60DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
61		  "GOMP_loop_guided_start",
62		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
63		  ATTR_NOTHROW_LIST)
64DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
65		  "GOMP_loop_runtime_start",
66		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
67		  ATTR_NOTHROW_LIST)
68DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
69		  "GOMP_loop_ordered_static_start",
70		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
71		  ATTR_NOTHROW_LIST)
72DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
73		  "GOMP_loop_ordered_dynamic_start",
74		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
75		  ATTR_NOTHROW_LIST)
76DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
77		  "GOMP_loop_ordered_guided_start",
78		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
79		  ATTR_NOTHROW_LIST)
80DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
81		  "GOMP_loop_ordered_runtime_start",
82		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
83		  ATTR_NOTHROW_LIST)
84DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
85		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
86DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
87		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
88DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
89		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
90DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
91		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
92DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
93		  "GOMP_loop_ordered_static_next",
94		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
95DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
96		  "GOMP_loop_ordered_dynamic_next",
97		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
98DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
99		  "GOMP_loop_ordered_guided_next",
100		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
101DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
102		  "GOMP_loop_ordered_runtime_next",
103		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
104/* NOTE: Do not change the order of BUILT_IN_GOMP_PARALLEL_LOOP_*_START.
105   They are used in index arithmetic with enum omp_clause_schedule_kind
106   in omp-low.c.  */
107DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
108		  "GOMP_parallel_loop_static_start",
109		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
110		  ATTR_NOTHROW_LIST)
111DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
112		  "GOMP_parallel_loop_dynamic_start",
113		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
114		  ATTR_NOTHROW_LIST)
115DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
116		  "GOMP_parallel_loop_guided_start",
117		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
118		  ATTR_NOTHROW_LIST)
119DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
120		  "GOMP_parallel_loop_runtime_start",
121		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
122		  ATTR_NOTHROW_LIST)
123DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
124		  BT_FN_VOID, ATTR_NOTHROW_LIST)
125DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
126		  BT_FN_VOID, ATTR_NOTHROW_LIST)
127DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
128		  BT_FN_VOID, ATTR_NOTHROW_LIST)
129DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
130		  BT_FN_VOID, ATTR_NOTHROW_LIST)
131DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_START, "GOMP_parallel_start",
132		  BT_FN_VOID_OMPFN_PTR_UINT, ATTR_NOTHROW_LIST)
133DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_END, "GOMP_parallel_end",
134		  BT_FN_VOID, ATTR_NOTHROW_LIST)
135DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
136		  BT_FN_UINT_UINT, ATTR_NOTHROW_LIST)
137DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
138		  BT_FN_UINT, ATTR_NOTHROW_LIST)
139DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
140		  "GOMP_parallel_sections_start",
141		  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
142DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
143		  BT_FN_VOID, ATTR_NOTHROW_LIST)
144DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
145		  "GOMP_sections_end_nowait",
146		  BT_FN_VOID, ATTR_NOTHROW_LIST)
147DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
148		  BT_FN_BOOL, ATTR_NOTHROW_LIST)
149DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
150		  BT_FN_PTR, ATTR_NOTHROW_LIST)
151DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
152		  BT_FN_VOID_PTR, ATTR_NOTHROW_LIST)
153