Mercurial > hg > CbC > CbC_gcc
comparison gcc/internal-fn.def @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /* Internal functions. | |
2 Copyright (C) 2011-2017 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify it under | |
7 the terms of the GNU General Public License as published by the Free | |
8 Software Foundation; either version 3, or (at your option) any later | |
9 version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 /* This file specifies a list of internal "functions". These functions | |
21 differ from built-in functions in that they have no linkage and cannot | |
22 be called directly by the user. They represent operations that are only | |
23 synthesised by GCC itself. | |
24 | |
25 Internal functions are used instead of tree codes if the operation | |
26 and its operands are more naturally represented as a GIMPLE_CALL | |
27 than a GIMPLE_ASSIGN. | |
28 | |
29 Each entry in this file has one of the forms: | |
30 | |
31 DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC) | |
32 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) | |
33 DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE) | |
34 DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE) | |
35 | |
36 where NAME is the name of the function, FLAGS is a set of | |
37 ECF_* flags and FNSPEC is a string describing functions fnspec. | |
38 | |
39 DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a | |
40 direct optab. The function should only be called with a given | |
41 set of types if the associated optab is available for the modes | |
42 of those types. OPTAB says what optab to use (without the trailing | |
43 "_optab") and TYPE categorizes the optab based on its inputs and | |
44 outputs. The possible types of optab are: | |
45 | |
46 - mask_load: currently just maskload | |
47 - load_lanes: currently just vec_load_lanes | |
48 | |
49 - mask_store: currently just maskstore | |
50 - store_lanes: currently just vec_store_lanes | |
51 | |
52 DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition, | |
53 the function implements the computational part of a built-in math | |
54 function BUILT_IN_<NAME>{F,,L}. Unlike some built-in functions, | |
55 these internal functions never set errno. | |
56 | |
57 DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition | |
58 says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX} | |
59 group of functions to any integral mode (including vector modes). | |
60 | |
61 Each entry must have a corresponding expander of the form: | |
62 | |
63 void expand_NAME (gimple_call stmt) | |
64 | |
65 where STMT is the statement that performs the call. These are generated | |
66 automatically for optab functions and call out to a function or macro | |
67 called expand_<TYPE>_optab_fn. */ | |
68 | |
69 #ifndef DEF_INTERNAL_FN | |
70 #define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) | |
71 #endif | |
72 | |
73 #ifndef DEF_INTERNAL_OPTAB_FN | |
74 #define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
75 DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL) | |
76 #endif | |
77 | |
78 #ifndef DEF_INTERNAL_FLT_FN | |
79 #define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
80 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) | |
81 #endif | |
82 | |
83 #ifndef DEF_INTERNAL_INT_FN | |
84 #define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \ | |
85 DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE) | |
86 #endif | |
87 | |
88 DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load) | |
89 DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes) | |
90 | |
91 DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store) | |
92 DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes) | |
93 | |
94 DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary) | |
95 | |
96 /* Unary math functions. */ | |
97 DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary) | |
98 DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary) | |
99 DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary) | |
100 DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary) | |
101 DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary) | |
102 DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary) | |
103 DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary) | |
104 DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary) | |
105 DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary) | |
106 DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary) | |
107 DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary) | |
108 DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary) | |
109 DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary) | |
110 DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary) | |
111 DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary) | |
112 DEF_INTERNAL_FLT_FN (SQRT, ECF_CONST, sqrt, unary) | |
113 DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary) | |
114 | |
115 /* FP rounding. */ | |
116 DEF_INTERNAL_FLT_FN (CEIL, ECF_CONST, ceil, unary) | |
117 DEF_INTERNAL_FLT_FN (FLOOR, ECF_CONST, floor, unary) | |
118 DEF_INTERNAL_FLT_FN (NEARBYINT, ECF_CONST, nearbyint, unary) | |
119 DEF_INTERNAL_FLT_FN (RINT, ECF_CONST, rint, unary) | |
120 DEF_INTERNAL_FLT_FN (ROUND, ECF_CONST, round, unary) | |
121 DEF_INTERNAL_FLT_FN (TRUNC, ECF_CONST, btrunc, unary) | |
122 | |
123 /* Binary math functions. */ | |
124 DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary) | |
125 DEF_INTERNAL_FLT_FN (COPYSIGN, ECF_CONST, copysign, binary) | |
126 DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary) | |
127 DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary) | |
128 DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary) | |
129 DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary) | |
130 DEF_INTERNAL_FLT_FN (FMIN, ECF_CONST, fmin, binary) | |
131 DEF_INTERNAL_FLT_FN (FMAX, ECF_CONST, fmax, binary) | |
132 DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary) | |
133 | |
134 /* FP scales. */ | |
135 DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary) | |
136 | |
137 /* Unary integer ops. */ | |
138 DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary) | |
139 DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary) | |
140 DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary) | |
141 DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary) | |
142 DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary) | |
143 DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary) | |
144 | |
145 DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
146 DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL) | |
147 DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL) | |
148 DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL) | |
149 DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
150 DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
151 DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
152 DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL) | |
153 DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
154 DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
155 DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
156 DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
157 DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
158 DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
159 DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL) | |
160 DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL) | |
161 DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
162 DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
163 DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
164 DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.") | |
165 DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL) | |
166 DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..") | |
167 DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
168 DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
169 DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
170 DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.") | |
171 DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL) | |
172 DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL) | |
173 DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
174 DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, ".R...") | |
175 DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, ".R..") | |
176 DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) | |
177 DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) | |
178 DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
179 DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
180 DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) | |
181 DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) | |
182 DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL) | |
183 | |
184 /* An unduplicable, uncombinable function. Generally used to preserve | |
185 a CFG property in the face of jump threading, tail merging or | |
186 other such optimizations. The first argument distinguishes | |
187 between uses. See internal-fn.h for usage. */ | |
188 DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL) | |
189 DEF_INTERNAL_FN (PHI, 0, NULL) | |
190 | |
191 /* DIM_SIZE and DIM_POS return the size of a particular compute | |
192 dimension and the executing thread's position within that | |
193 dimension. DIM_POS is pure (and not const) so that it isn't | |
194 thought to clobber memory and can be gcse'd within a single | |
195 parallel region, but not across FORK/JOIN boundaries. They take a | |
196 single INTEGER_CST argument. This might be overly conservative. */ | |
197 DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".") | |
198 DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".") | |
199 | |
200 /* OpenACC looping abstraction. See internal-fn.h for usage. */ | |
201 DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL) | |
202 | |
203 /* OpenACC reduction abstraction. See internal-fn.h for usage. */ | |
204 DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL) | |
205 | |
206 /* Openacc tile abstraction. Describes the spans of the element loop. | |
207 GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask). */ | |
208 DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL) | |
209 | |
210 /* Set errno to EDOM, if GCC knows how to do that directly for the | |
211 current target. */ | |
212 DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL) | |
213 | |
214 /* Atomic functions. These don't have ECF_NOTHROW because for | |
215 -fnon-call-exceptions they can throw, otherwise we set | |
216 gimple_call_nothrow_p on it. */ | |
217 DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL) | |
218 DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL) | |
219 DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL) | |
220 DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL) | |
221 | |
222 /* To implement [[fallthrough]]. */ | |
223 DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL) | |
224 | |
225 /* To implement __builtin_launder. */ | |
226 DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) | |
227 | |
228 /* Divmod function. */ | |
229 DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL) | |
230 | |
231 #undef DEF_INTERNAL_INT_FN | |
232 #undef DEF_INTERNAL_FLT_FN | |
233 #undef DEF_INTERNAL_OPTAB_FN | |
234 #undef DEF_INTERNAL_FN |