Mercurial > hg > CbC > CbC_gcc
annotate gcc/targhooks.c @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | b7f97abdc517 |
rev | line source |
---|---|
0 | 1 /* Default target hook functions. |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
2 Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
3 Free Software Foundation, Inc. |
0 | 4 |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it under | |
8 the terms of the GNU General Public License as published by the Free | |
9 Software Foundation; either version 3, or (at your option) any later | |
10 version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 /* The migration of target macros to target hooks works as follows: | |
22 | |
23 1. Create a target hook that uses the existing target macros to | |
24 implement the same functionality. | |
25 | |
26 2. Convert all the MI files to use the hook instead of the macro. | |
27 | |
28 3. Repeat for a majority of the remaining target macros. This will | |
29 take some time. | |
30 | |
31 4. Tell target maintainers to start migrating. | |
32 | |
33 5. Eventually convert the backends to override the hook instead of | |
34 defining the macros. This will take some time too. | |
35 | |
36 6. TBD when, poison the macros. Unmigrated targets will break at | |
37 this point. | |
38 | |
39 Note that we expect steps 1-3 to be done by the people that | |
40 understand what the MI does with each macro, and step 5 to be done | |
41 by the target maintainers for their respective targets. | |
42 | |
43 Note that steps 1 and 2 don't have to be done together, but no | |
44 target can override the new hook until step 2 is complete for it. | |
45 | |
46 Once the macros are poisoned, we will revert to the old migration | |
47 rules - migrate the macro, callers, and targets all at once. This | |
48 comment can thus be removed at that point. */ | |
49 | |
50 #include "config.h" | |
51 #include "system.h" | |
52 #include "coretypes.h" | |
53 #include "tm.h" | |
54 #include "machmode.h" | |
55 #include "rtl.h" | |
56 #include "tree.h" | |
57 #include "expr.h" | |
58 #include "output.h" | |
59 #include "toplev.h" | |
60 #include "function.h" | |
61 #include "target.h" | |
62 #include "tm_p.h" | |
63 #include "target-def.h" | |
64 #include "ggc.h" | |
65 #include "hard-reg-set.h" | |
66 #include "reload.h" | |
67 #include "optabs.h" | |
68 #include "recog.h" | |
69 | |
70 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
71 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
72 default_legitimate_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
73 rtx addr ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
74 bool strict ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
75 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
76 #ifdef GO_IF_LEGITIMATE_ADDRESS |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
77 /* Defer to the old implementation using a goto. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
78 if (strict) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
79 return strict_memory_address_p (mode, addr); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
80 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
81 return memory_address_p (mode, addr); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
82 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
83 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
84 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
85 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
86 |
0 | 87 void |
88 default_external_libcall (rtx fun ATTRIBUTE_UNUSED) | |
89 { | |
90 #ifdef ASM_OUTPUT_EXTERNAL_LIBCALL | |
91 ASM_OUTPUT_EXTERNAL_LIBCALL(asm_out_file, fun); | |
92 #endif | |
93 } | |
94 | |
95 int | |
96 default_unspec_may_trap_p (const_rtx x, unsigned flags) | |
97 { | |
98 int i; | |
99 | |
100 if (GET_CODE (x) == UNSPEC_VOLATILE | |
101 /* Any floating arithmetic may trap. */ | |
102 || (SCALAR_FLOAT_MODE_P (GET_MODE (x)) | |
103 && flag_trapping_math)) | |
104 return 1; | |
105 | |
106 for (i = 0; i < XVECLEN (x, 0); ++i) | |
107 { | |
108 if (may_trap_p_1 (XVECEXP (x, 0, i), flags)) | |
109 return 1; | |
110 } | |
111 | |
112 return 0; | |
113 } | |
114 | |
115 enum machine_mode | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
116 default_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
117 enum machine_mode mode, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
118 int *punsignedp ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
119 const_tree funtype ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
120 int for_return ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
121 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
122 if (for_return == 2) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
123 return promote_mode (type, mode, punsignedp); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
124 return mode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
125 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
126 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
127 enum machine_mode |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
128 default_promote_function_mode_always_promote (const_tree type, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
129 enum machine_mode mode, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
130 int *punsignedp, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
131 const_tree funtype ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
132 int for_return ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
133 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
134 return promote_mode (type, mode, punsignedp); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
135 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
136 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
137 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
138 enum machine_mode |
0 | 139 default_cc_modes_compatible (enum machine_mode m1, enum machine_mode m2) |
140 { | |
141 if (m1 == m2) | |
142 return m1; | |
143 return VOIDmode; | |
144 } | |
145 | |
146 bool | |
147 default_return_in_memory (const_tree type, | |
148 const_tree fntype ATTRIBUTE_UNUSED) | |
149 { | |
150 return (TYPE_MODE (type) == BLKmode); | |
151 } | |
152 | |
153 rtx | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
154 default_legitimize_address (rtx x, rtx orig_x ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
155 enum machine_mode mode ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
156 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
157 return x; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
158 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
159 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
160 rtx |
0 | 161 default_expand_builtin_saveregs (void) |
162 { | |
163 error ("__builtin_saveregs not supported by this target"); | |
164 return const0_rtx; | |
165 } | |
166 | |
167 void | |
168 default_setup_incoming_varargs (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, | |
169 enum machine_mode mode ATTRIBUTE_UNUSED, | |
170 tree type ATTRIBUTE_UNUSED, | |
171 int *pretend_arg_size ATTRIBUTE_UNUSED, | |
172 int second_time ATTRIBUTE_UNUSED) | |
173 { | |
174 } | |
175 | |
176 /* The default implementation of TARGET_BUILTIN_SETJMP_FRAME_VALUE. */ | |
177 | |
178 rtx | |
179 default_builtin_setjmp_frame_value (void) | |
180 { | |
181 return virtual_stack_vars_rtx; | |
182 } | |
183 | |
184 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */ | |
185 | |
186 bool | |
187 hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED) | |
188 { | |
189 return false; | |
190 } | |
191 | |
192 bool | |
193 default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED) | |
194 { | |
195 return (targetm.calls.setup_incoming_varargs | |
196 != default_setup_incoming_varargs); | |
197 } | |
198 | |
199 enum machine_mode | |
200 default_eh_return_filter_mode (void) | |
201 { | |
202 return targetm.unwind_word_mode (); | |
203 } | |
204 | |
205 enum machine_mode | |
206 default_libgcc_cmp_return_mode (void) | |
207 { | |
208 return word_mode; | |
209 } | |
210 | |
211 enum machine_mode | |
212 default_libgcc_shift_count_mode (void) | |
213 { | |
214 return word_mode; | |
215 } | |
216 | |
217 enum machine_mode | |
218 default_unwind_word_mode (void) | |
219 { | |
220 return word_mode; | |
221 } | |
222 | |
223 /* The default implementation of TARGET_SHIFT_TRUNCATION_MASK. */ | |
224 | |
225 unsigned HOST_WIDE_INT | |
226 default_shift_truncation_mask (enum machine_mode mode) | |
227 { | |
228 return SHIFT_COUNT_TRUNCATED ? GET_MODE_BITSIZE (mode) - 1 : 0; | |
229 } | |
230 | |
231 /* The default implementation of TARGET_MIN_DIVISIONS_FOR_RECIP_MUL. */ | |
232 | |
233 unsigned int | |
234 default_min_divisions_for_recip_mul (enum machine_mode mode ATTRIBUTE_UNUSED) | |
235 { | |
236 return have_insn_for (DIV, mode) ? 3 : 2; | |
237 } | |
238 | |
239 /* The default implementation of TARGET_MODE_REP_EXTENDED. */ | |
240 | |
241 int | |
242 default_mode_rep_extended (enum machine_mode mode ATTRIBUTE_UNUSED, | |
243 enum machine_mode mode_rep ATTRIBUTE_UNUSED) | |
244 { | |
245 return UNKNOWN; | |
246 } | |
247 | |
248 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */ | |
249 | |
250 bool | |
251 hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS * a ATTRIBUTE_UNUSED) | |
252 { | |
253 return true; | |
254 } | |
255 | |
256 /* Return machine mode for non-standard suffix | |
257 or VOIDmode if non-standard suffixes are unsupported. */ | |
258 enum machine_mode | |
259 default_mode_for_suffix (char suffix ATTRIBUTE_UNUSED) | |
260 { | |
261 return VOIDmode; | |
262 } | |
263 | |
264 /* The generic C++ ABI specifies this is a 64-bit value. */ | |
265 tree | |
266 default_cxx_guard_type (void) | |
267 { | |
268 return long_long_integer_type_node; | |
269 } | |
270 | |
271 | |
272 /* Returns the size of the cookie to use when allocating an array | |
273 whose elements have the indicated TYPE. Assumes that it is already | |
274 known that a cookie is needed. */ | |
275 | |
276 tree | |
277 default_cxx_get_cookie_size (tree type) | |
278 { | |
279 tree cookie_size; | |
280 | |
281 /* We need to allocate an additional max (sizeof (size_t), alignof | |
282 (true_type)) bytes. */ | |
283 tree sizetype_size; | |
284 tree type_align; | |
285 | |
286 sizetype_size = size_in_bytes (sizetype); | |
287 type_align = size_int (TYPE_ALIGN_UNIT (type)); | |
288 if (INT_CST_LT_UNSIGNED (type_align, sizetype_size)) | |
289 cookie_size = sizetype_size; | |
290 else | |
291 cookie_size = type_align; | |
292 | |
293 return cookie_size; | |
294 } | |
295 | |
296 /* Return true if a parameter must be passed by reference. This version | |
297 of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK. */ | |
298 | |
299 bool | |
300 hook_pass_by_reference_must_pass_in_stack (CUMULATIVE_ARGS *c ATTRIBUTE_UNUSED, | |
301 enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, | |
302 bool named_arg ATTRIBUTE_UNUSED) | |
303 { | |
304 return targetm.calls.must_pass_in_stack (mode, type); | |
305 } | |
306 | |
307 /* Return true if a parameter follows callee copies conventions. This | |
308 version of the hook is true for all named arguments. */ | |
309 | |
310 bool | |
311 hook_callee_copies_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, | |
312 enum machine_mode mode ATTRIBUTE_UNUSED, | |
313 const_tree type ATTRIBUTE_UNUSED, bool named) | |
314 { | |
315 return named; | |
316 } | |
317 | |
318 /* Emit any directives required to unwind this instruction. */ | |
319 | |
320 void | |
321 default_unwind_emit (FILE * stream ATTRIBUTE_UNUSED, | |
322 rtx insn ATTRIBUTE_UNUSED) | |
323 { | |
324 /* Should never happen. */ | |
325 gcc_unreachable (); | |
326 } | |
327 | |
328 /* True if MODE is valid for the target. By "valid", we mean able to | |
329 be manipulated in non-trivial ways. In particular, this means all | |
330 the arithmetic is supported. | |
331 | |
332 By default we guess this means that any C type is supported. If | |
333 we can't map the mode back to a type that would be available in C, | |
334 then reject it. Special case, here, is the double-word arithmetic | |
335 supported by optabs.c. */ | |
336 | |
337 bool | |
338 default_scalar_mode_supported_p (enum machine_mode mode) | |
339 { | |
340 int precision = GET_MODE_PRECISION (mode); | |
341 | |
342 switch (GET_MODE_CLASS (mode)) | |
343 { | |
344 case MODE_PARTIAL_INT: | |
345 case MODE_INT: | |
346 if (precision == CHAR_TYPE_SIZE) | |
347 return true; | |
348 if (precision == SHORT_TYPE_SIZE) | |
349 return true; | |
350 if (precision == INT_TYPE_SIZE) | |
351 return true; | |
352 if (precision == LONG_TYPE_SIZE) | |
353 return true; | |
354 if (precision == LONG_LONG_TYPE_SIZE) | |
355 return true; | |
356 if (precision == 2 * BITS_PER_WORD) | |
357 return true; | |
358 return false; | |
359 | |
360 case MODE_FLOAT: | |
361 if (precision == FLOAT_TYPE_SIZE) | |
362 return true; | |
363 if (precision == DOUBLE_TYPE_SIZE) | |
364 return true; | |
365 if (precision == LONG_DOUBLE_TYPE_SIZE) | |
366 return true; | |
367 return false; | |
368 | |
369 case MODE_DECIMAL_FLOAT: | |
370 case MODE_FRACT: | |
371 case MODE_UFRACT: | |
372 case MODE_ACCUM: | |
373 case MODE_UACCUM: | |
374 return false; | |
375 | |
376 default: | |
377 gcc_unreachable (); | |
378 } | |
379 } | |
380 | |
381 /* True if the target supports decimal floating point. */ | |
382 | |
383 bool | |
384 default_decimal_float_supported_p (void) | |
385 { | |
386 return ENABLE_DECIMAL_FLOAT; | |
387 } | |
388 | |
389 /* True if the target supports fixed-point arithmetic. */ | |
390 | |
391 bool | |
392 default_fixed_point_supported_p (void) | |
393 { | |
394 return ENABLE_FIXED_POINT; | |
395 } | |
396 | |
397 /* NULL if INSN insn is valid within a low-overhead loop, otherwise returns | |
398 an error message. | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
399 |
0 | 400 This function checks whether a given INSN is valid within a low-overhead |
401 loop. If INSN is invalid it returns the reason for that, otherwise it | |
402 returns NULL. A called function may clobber any special registers required | |
403 for low-overhead looping. Additionally, some targets (eg, PPC) use the count | |
404 register for branch on table instructions. We reject the doloop pattern in | |
405 these cases. */ | |
406 | |
407 const char * | |
408 default_invalid_within_doloop (const_rtx insn) | |
409 { | |
410 if (CALL_P (insn)) | |
411 return "Function call in loop."; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
412 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
413 if (JUMP_TABLE_DATA_P (insn)) |
0 | 414 return "Computed branch in the loop."; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
415 |
0 | 416 return NULL; |
417 } | |
418 | |
419 /* Mapping of builtin functions to vectorized variants. */ | |
420 | |
421 tree | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
422 default_builtin_vectorized_function (unsigned int fn ATTRIBUTE_UNUSED, |
0 | 423 tree type_out ATTRIBUTE_UNUSED, |
424 tree type_in ATTRIBUTE_UNUSED) | |
425 { | |
426 return NULL_TREE; | |
427 } | |
428 | |
429 /* Vectorized conversion. */ | |
430 | |
431 tree | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
432 default_builtin_vectorized_conversion (unsigned int code ATTRIBUTE_UNUSED, |
0 | 433 tree type ATTRIBUTE_UNUSED) |
434 { | |
435 return NULL_TREE; | |
436 } | |
437 | |
438 /* Reciprocal. */ | |
439 | |
440 tree | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
441 default_builtin_reciprocal (unsigned int fn ATTRIBUTE_UNUSED, |
0 | 442 bool md_fn ATTRIBUTE_UNUSED, |
443 bool sqrt ATTRIBUTE_UNUSED) | |
444 { | |
445 return NULL_TREE; | |
446 } | |
447 | |
448 bool | |
449 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false ( | |
450 CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, | |
451 enum machine_mode mode ATTRIBUTE_UNUSED, | |
452 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) | |
453 { | |
454 return false; | |
455 } | |
456 | |
457 bool | |
458 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true ( | |
459 CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, | |
460 enum machine_mode mode ATTRIBUTE_UNUSED, | |
461 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) | |
462 { | |
463 return true; | |
464 } | |
465 | |
466 int | |
467 hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 ( | |
468 CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, | |
469 enum machine_mode mode ATTRIBUTE_UNUSED, | |
470 tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) | |
471 { | |
472 return 0; | |
473 } | |
474 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
475 void |
0 | 476 hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED) |
477 { | |
478 } | |
479 | |
480 const char * | |
481 hook_invalid_arg_for_unprototyped_fn ( | |
482 const_tree typelist ATTRIBUTE_UNUSED, | |
483 const_tree funcdecl ATTRIBUTE_UNUSED, | |
484 const_tree val ATTRIBUTE_UNUSED) | |
485 { | |
486 return NULL; | |
487 } | |
488 | |
489 /* Initialize the stack protection decls. */ | |
490 | |
491 /* Stack protection related decls living in libgcc. */ | |
492 static GTY(()) tree stack_chk_guard_decl; | |
493 | |
494 tree | |
495 default_stack_protect_guard (void) | |
496 { | |
497 tree t = stack_chk_guard_decl; | |
498 | |
499 if (t == NULL) | |
500 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
501 t = build_decl (UNKNOWN_LOCATION, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
502 VAR_DECL, get_identifier ("__stack_chk_guard"), |
0 | 503 ptr_type_node); |
504 TREE_STATIC (t) = 1; | |
505 TREE_PUBLIC (t) = 1; | |
506 DECL_EXTERNAL (t) = 1; | |
507 TREE_USED (t) = 1; | |
508 TREE_THIS_VOLATILE (t) = 1; | |
509 DECL_ARTIFICIAL (t) = 1; | |
510 DECL_IGNORED_P (t) = 1; | |
511 | |
512 stack_chk_guard_decl = t; | |
513 } | |
514 | |
515 return t; | |
516 } | |
517 | |
518 static GTY(()) tree stack_chk_fail_decl; | |
519 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
520 tree |
0 | 521 default_external_stack_protect_fail (void) |
522 { | |
523 tree t = stack_chk_fail_decl; | |
524 | |
525 if (t == NULL_TREE) | |
526 { | |
527 t = build_function_type_list (void_type_node, NULL_TREE); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
528 t = build_decl (UNKNOWN_LOCATION, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
529 FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t); |
0 | 530 TREE_STATIC (t) = 1; |
531 TREE_PUBLIC (t) = 1; | |
532 DECL_EXTERNAL (t) = 1; | |
533 TREE_USED (t) = 1; | |
534 TREE_THIS_VOLATILE (t) = 1; | |
535 TREE_NOTHROW (t) = 1; | |
536 DECL_ARTIFICIAL (t) = 1; | |
537 DECL_IGNORED_P (t) = 1; | |
538 DECL_VISIBILITY (t) = VISIBILITY_DEFAULT; | |
539 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
540 | |
541 stack_chk_fail_decl = t; | |
542 } | |
543 | |
544 return build_call_expr (t, 0); | |
545 } | |
546 | |
547 tree | |
548 default_hidden_stack_protect_fail (void) | |
549 { | |
550 #ifndef HAVE_GAS_HIDDEN | |
551 return default_external_stack_protect_fail (); | |
552 #else | |
553 tree t = stack_chk_fail_decl; | |
554 | |
555 if (!flag_pic) | |
556 return default_external_stack_protect_fail (); | |
557 | |
558 if (t == NULL_TREE) | |
559 { | |
560 t = build_function_type_list (void_type_node, NULL_TREE); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
561 t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, |
0 | 562 get_identifier ("__stack_chk_fail_local"), t); |
563 TREE_STATIC (t) = 1; | |
564 TREE_PUBLIC (t) = 1; | |
565 DECL_EXTERNAL (t) = 1; | |
566 TREE_USED (t) = 1; | |
567 TREE_THIS_VOLATILE (t) = 1; | |
568 TREE_NOTHROW (t) = 1; | |
569 DECL_ARTIFICIAL (t) = 1; | |
570 DECL_IGNORED_P (t) = 1; | |
571 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
572 DECL_VISIBILITY (t) = VISIBILITY_HIDDEN; | |
573 | |
574 stack_chk_fail_decl = t; | |
575 } | |
576 | |
577 return build_call_expr (t, 0); | |
578 #endif | |
579 } | |
580 | |
581 bool | |
582 hook_bool_const_rtx_commutative_p (const_rtx x, | |
583 int outer_code ATTRIBUTE_UNUSED) | |
584 { | |
585 return COMMUTATIVE_P (x); | |
586 } | |
587 | |
588 rtx | |
589 default_function_value (const_tree ret_type ATTRIBUTE_UNUSED, | |
590 const_tree fn_decl_or_type, | |
591 bool outgoing ATTRIBUTE_UNUSED) | |
592 { | |
593 /* The old interface doesn't handle receiving the function type. */ | |
594 if (fn_decl_or_type | |
595 && !DECL_P (fn_decl_or_type)) | |
596 fn_decl_or_type = NULL; | |
597 | |
598 #ifdef FUNCTION_OUTGOING_VALUE | |
599 if (outgoing) | |
600 return FUNCTION_OUTGOING_VALUE (ret_type, fn_decl_or_type); | |
601 #endif | |
602 | |
603 #ifdef FUNCTION_VALUE | |
604 return FUNCTION_VALUE (ret_type, fn_decl_or_type); | |
605 #else | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
606 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
607 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
608 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
609 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
610 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
611 default_libcall_value (enum machine_mode mode ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
612 const_rtx fun ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
613 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
614 #ifdef LIBCALL_VALUE |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
615 return LIBCALL_VALUE (mode); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
616 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
617 gcc_unreachable (); |
0 | 618 #endif |
619 } | |
620 | |
621 rtx | |
622 default_internal_arg_pointer (void) | |
623 { | |
624 /* If the reg that the virtual arg pointer will be translated into is | |
625 not a fixed reg or is the stack pointer, make a copy of the virtual | |
626 arg pointer, and address parms via the copy. The frame pointer is | |
627 considered fixed even though it is not marked as such. */ | |
628 if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM | |
629 || ! (fixed_regs[ARG_POINTER_REGNUM] | |
630 || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM))) | |
631 return copy_to_reg (virtual_incoming_args_rtx); | |
632 else | |
633 return virtual_incoming_args_rtx; | |
634 } | |
635 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
636 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
637 default_static_chain (const_tree fndecl, bool incoming_p) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
638 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
639 if (!DECL_STATIC_CHAIN (fndecl)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
640 return NULL; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
641 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
642 if (incoming_p) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
643 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
644 #ifdef STATIC_CHAIN_INCOMING_REGNUM |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
645 return gen_rtx_REG (Pmode, STATIC_CHAIN_INCOMING_REGNUM); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
646 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
647 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
648 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
649 #ifdef STATIC_CHAIN_REGNUM |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
650 return gen_rtx_REG (Pmode, STATIC_CHAIN_REGNUM); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
651 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
652 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
653 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
654 static bool issued_error; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
655 if (!issued_error) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
656 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
657 issued_error = true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
658 sorry ("nested functions not supported on this target"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
659 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
660 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
661 /* It really doesn't matter what we return here, so long at it |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
662 doesn't cause the rest of the compiler to crash. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
663 return gen_rtx_MEM (Pmode, stack_pointer_rtx); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
664 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
665 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
666 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
667 void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
668 default_trampoline_init (rtx ARG_UNUSED (m_tramp), tree ARG_UNUSED (t_func), |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
669 rtx ARG_UNUSED (r_chain)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
670 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
671 sorry ("nested function trampolines not supported on this target"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
672 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
673 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
674 enum reg_class |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
675 default_branch_target_register_class (void) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
676 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
677 return NO_REGS; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
678 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
679 |
0 | 680 #ifdef IRA_COVER_CLASSES |
681 const enum reg_class * | |
682 default_ira_cover_classes (void) | |
683 { | |
684 static enum reg_class classes[] = IRA_COVER_CLASSES; | |
685 return classes; | |
686 } | |
687 #endif | |
688 | |
689 enum reg_class | |
690 default_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED, | |
691 enum reg_class reload_class ATTRIBUTE_UNUSED, | |
692 enum machine_mode reload_mode ATTRIBUTE_UNUSED, | |
693 secondary_reload_info *sri) | |
694 { | |
695 enum reg_class rclass = NO_REGS; | |
696 | |
697 if (sri->prev_sri && sri->prev_sri->t_icode != CODE_FOR_nothing) | |
698 { | |
699 sri->icode = sri->prev_sri->t_icode; | |
700 return NO_REGS; | |
701 } | |
702 #ifdef SECONDARY_INPUT_RELOAD_CLASS | |
703 if (in_p) | |
704 rclass = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x); | |
705 #endif | |
706 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS | |
707 if (! in_p) | |
708 rclass = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x); | |
709 #endif | |
710 if (rclass != NO_REGS) | |
711 { | |
712 enum insn_code icode = (in_p ? reload_in_optab[(int) reload_mode] | |
713 : reload_out_optab[(int) reload_mode]); | |
714 | |
715 if (icode != CODE_FOR_nothing | |
716 && insn_data[(int) icode].operand[in_p].predicate | |
717 && ! insn_data[(int) icode].operand[in_p].predicate (x, reload_mode)) | |
718 icode = CODE_FOR_nothing; | |
719 else if (icode != CODE_FOR_nothing) | |
720 { | |
721 const char *insn_constraint, *scratch_constraint; | |
722 char insn_letter, scratch_letter; | |
723 enum reg_class insn_class, scratch_class; | |
724 | |
725 gcc_assert (insn_data[(int) icode].n_operands == 3); | |
726 insn_constraint = insn_data[(int) icode].operand[!in_p].constraint; | |
727 if (!*insn_constraint) | |
728 insn_class = ALL_REGS; | |
729 else | |
730 { | |
731 if (in_p) | |
732 { | |
733 gcc_assert (*insn_constraint == '='); | |
734 insn_constraint++; | |
735 } | |
736 insn_letter = *insn_constraint; | |
737 insn_class | |
738 = (insn_letter == 'r' ? GENERAL_REGS | |
739 : REG_CLASS_FROM_CONSTRAINT ((unsigned char) insn_letter, | |
740 insn_constraint)); | |
741 gcc_assert (insn_class != NO_REGS); | |
742 } | |
743 | |
744 scratch_constraint = insn_data[(int) icode].operand[2].constraint; | |
745 /* The scratch register's constraint must start with "=&", | |
746 except for an input reload, where only "=" is necessary, | |
747 and where it might be beneficial to re-use registers from | |
748 the input. */ | |
749 gcc_assert (scratch_constraint[0] == '=' | |
750 && (in_p || scratch_constraint[1] == '&')); | |
751 scratch_constraint++; | |
752 if (*scratch_constraint == '&') | |
753 scratch_constraint++; | |
754 scratch_letter = *scratch_constraint; | |
755 scratch_class | |
756 = (scratch_letter == 'r' ? GENERAL_REGS | |
757 : REG_CLASS_FROM_CONSTRAINT ((unsigned char) scratch_letter, | |
758 scratch_constraint)); | |
759 | |
760 if (reg_class_subset_p (reload_class, insn_class)) | |
761 { | |
762 gcc_assert (scratch_class == rclass); | |
763 rclass = NO_REGS; | |
764 } | |
765 else | |
766 rclass = insn_class; | |
767 | |
768 } | |
769 if (rclass == NO_REGS) | |
770 sri->icode = icode; | |
771 else | |
772 sri->t_icode = icode; | |
773 } | |
774 return rclass; | |
775 } | |
776 | |
777 bool | |
778 default_handle_c_option (size_t code ATTRIBUTE_UNUSED, | |
779 const char *arg ATTRIBUTE_UNUSED, | |
780 int value ATTRIBUTE_UNUSED) | |
781 { | |
782 return false; | |
783 } | |
784 | |
785 /* By default, if flag_pic is true, then neither local nor global relocs | |
786 should be placed in readonly memory. */ | |
787 | |
788 int | |
789 default_reloc_rw_mask (void) | |
790 { | |
791 return flag_pic ? 3 : 0; | |
792 } | |
793 | |
794 /* By default, do no modification. */ | |
795 tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED, | |
796 tree id) | |
797 { | |
798 return id; | |
799 } | |
800 | |
801 bool | |
802 default_builtin_vector_alignment_reachable (const_tree type, bool is_packed) | |
803 { | |
804 if (is_packed) | |
805 return false; | |
806 | |
807 /* Assuming that types whose size is > pointer-size are not guaranteed to be | |
808 naturally aligned. */ | |
809 if (tree_int_cst_compare (TYPE_SIZE (type), bitsize_int (POINTER_SIZE)) > 0) | |
810 return false; | |
811 | |
812 /* Assuming that types whose size is <= pointer-size | |
813 are naturally aligned. */ | |
814 return true; | |
815 } | |
816 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
817 /* By default, assume that a target supports any factor of misalignment |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
818 memory access if it supports movmisalign patten. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
819 is_packed is true if the memory access is defined in a packed struct. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
820 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
821 default_builtin_support_vector_misalignment (enum machine_mode mode, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
822 const_tree type |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
823 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
824 int misalignment |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
825 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
826 bool is_packed |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
827 ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
828 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
829 if (optab_handler (movmisalign_optab, mode)->insn_code != CODE_FOR_nothing) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
830 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
831 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
832 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
833 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
834 /* Determine whether or not a pointer mode is valid. Assume defaults |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
835 of ptr_mode or Pmode - can be overridden. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
836 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
837 default_valid_pointer_mode (enum machine_mode mode) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
838 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
839 return (mode == ptr_mode || mode == Pmode); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
840 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
841 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
842 /* Return the mode for a pointer to a given ADDRSPACE, defaulting to ptr_mode |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
843 for the generic address space only. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
844 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
845 enum machine_mode |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
846 default_addr_space_pointer_mode (addr_space_t addrspace ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
847 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
848 gcc_assert (ADDR_SPACE_GENERIC_P (addrspace)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
849 return ptr_mode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
850 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
851 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
852 /* Return the mode for an address in a given ADDRSPACE, defaulting to Pmode |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
853 for the generic address space only. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
854 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
855 enum machine_mode |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
856 default_addr_space_address_mode (addr_space_t addrspace ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
857 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
858 gcc_assert (ADDR_SPACE_GENERIC_P (addrspace)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
859 return Pmode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
860 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
861 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
862 /* Named address space version of valid_pointer_mode. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
863 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
864 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
865 default_addr_space_valid_pointer_mode (enum machine_mode mode, addr_space_t as) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
866 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
867 if (!ADDR_SPACE_GENERIC_P (as)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
868 return (mode == targetm.addr_space.pointer_mode (as) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
869 || mode == targetm.addr_space.address_mode (as)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
870 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
871 return targetm.valid_pointer_mode (mode); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
872 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
873 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
874 /* Some places still assume that all pointer or address modes are the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
875 standard Pmode and ptr_mode. These optimizations become invalid if |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
876 the target actually supports multiple different modes. For now, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
877 we disable such optimizations on such targets, using this function. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
878 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
879 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
880 target_default_pointer_address_modes_p (void) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
881 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
882 if (targetm.addr_space.address_mode != default_addr_space_address_mode) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
883 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
884 if (targetm.addr_space.pointer_mode != default_addr_space_pointer_mode) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
885 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
886 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
887 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
888 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
889 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
890 /* Named address space version of legitimate_address_p. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
891 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
892 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
893 default_addr_space_legitimate_address_p (enum machine_mode mode, rtx mem, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
894 bool strict, addr_space_t as) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
895 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
896 if (!ADDR_SPACE_GENERIC_P (as)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
897 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
898 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
899 return targetm.legitimate_address_p (mode, mem, strict); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
900 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
901 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
902 /* Named address space version of LEGITIMIZE_ADDRESS. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
903 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
904 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
905 default_addr_space_legitimize_address (rtx x, rtx oldx, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
906 enum machine_mode mode, addr_space_t as) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
907 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
908 if (!ADDR_SPACE_GENERIC_P (as)) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
909 return x; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
910 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
911 return targetm.legitimize_address (x, oldx, mode); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
912 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
913 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
914 /* The default hook for determining if one named address space is a subset of |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
915 another and to return which address space to use as the common address |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
916 space. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
917 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
918 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
919 default_addr_space_subset_p (addr_space_t subset, addr_space_t superset) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
920 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
921 return (subset == superset); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
922 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
923 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
924 /* The default hook for TARGET_ADDR_SPACE_CONVERT. This hook should never be |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
925 called for targets with only a generic address space. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
926 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
927 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
928 default_addr_space_convert (rtx op ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
929 tree from_type ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
930 tree to_type ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
931 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
932 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
933 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
934 |
0 | 935 bool |
936 default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED) | |
937 { | |
938 return true; | |
939 } | |
940 | |
941 bool | |
942 default_target_option_valid_attribute_p (tree ARG_UNUSED (fndecl), | |
943 tree ARG_UNUSED (name), | |
944 tree ARG_UNUSED (args), | |
945 int ARG_UNUSED (flags)) | |
946 { | |
947 warning (OPT_Wattributes, | |
948 "target attribute is not supported on this machine"); | |
949 | |
950 return false; | |
951 } | |
952 | |
953 bool | |
954 default_target_option_pragma_parse (tree ARG_UNUSED (args), | |
955 tree ARG_UNUSED (pop_target)) | |
956 { | |
957 warning (OPT_Wpragmas, | |
958 "#pragma GCC target is not supported for this machine"); | |
959 | |
960 return false; | |
961 } | |
962 | |
963 bool | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
964 default_target_can_inline_p (tree caller, tree callee) |
0 | 965 { |
966 bool ret = false; | |
967 tree callee_opts = DECL_FUNCTION_SPECIFIC_TARGET (callee); | |
968 tree caller_opts = DECL_FUNCTION_SPECIFIC_TARGET (caller); | |
969 | |
970 /* If callee has no option attributes, then it is ok to inline */ | |
971 if (!callee_opts) | |
972 ret = true; | |
973 | |
974 /* If caller has no option attributes, but callee does then it is not ok to | |
975 inline */ | |
976 else if (!caller_opts) | |
977 ret = false; | |
978 | |
979 /* If both caller and callee have attributes, assume that if the pointer is | |
980 different, the the two functions have different target options since | |
981 build_target_option_node uses a hash table for the options. */ | |
982 else | |
983 ret = (callee_opts == caller_opts); | |
984 | |
985 return ret; | |
986 } | |
987 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
988 #ifndef HAVE_casesi |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
989 # define HAVE_casesi 0 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
990 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
991 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
992 /* If the machine does not have a case insn that compares the bounds, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
993 this means extra overhead for dispatch tables, which raises the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
994 threshold for using them. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
995 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
996 unsigned int default_case_values_threshold (void) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
997 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
998 return (HAVE_casesi ? 4 : 5); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
999 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1000 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1001 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1002 default_have_conditional_execution (void) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1003 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1004 #ifdef HAVE_conditional_execution |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1005 return HAVE_conditional_execution; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1006 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1007 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1008 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1009 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1010 |
0 | 1011 #include "gt-targhooks.h" |