Mercurial > hg > CbC > CbC_gcc
annotate gcc/targhooks.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
rev | line source |
---|---|
0 | 1 /* Default target hook functions. |
131 | 2 Copyright (C) 2003-2018 Free Software Foundation, Inc. |
0 | 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 /* The migration of target macros to target hooks works as follows: | |
21 | |
22 1. Create a target hook that uses the existing target macros to | |
23 implement the same functionality. | |
24 | |
25 2. Convert all the MI files to use the hook instead of the macro. | |
26 | |
27 3. Repeat for a majority of the remaining target macros. This will | |
28 take some time. | |
29 | |
30 4. Tell target maintainers to start migrating. | |
31 | |
32 5. Eventually convert the backends to override the hook instead of | |
33 defining the macros. This will take some time too. | |
34 | |
35 6. TBD when, poison the macros. Unmigrated targets will break at | |
36 this point. | |
37 | |
38 Note that we expect steps 1-3 to be done by the people that | |
39 understand what the MI does with each macro, and step 5 to be done | |
40 by the target maintainers for their respective targets. | |
41 | |
42 Note that steps 1 and 2 don't have to be done together, but no | |
43 target can override the new hook until step 2 is complete for it. | |
44 | |
45 Once the macros are poisoned, we will revert to the old migration | |
46 rules - migrate the macro, callers, and targets all at once. This | |
47 comment can thus be removed at that point. */ | |
48 | |
49 #include "config.h" | |
50 #include "system.h" | |
51 #include "coretypes.h" | |
111 | 52 #include "target.h" |
53 #include "function.h" | |
0 | 54 #include "rtl.h" |
55 #include "tree.h" | |
111 | 56 #include "tree-ssa-alias.h" |
57 #include "gimple-expr.h" | |
58 #include "memmodel.h" | |
59 #include "tm_p.h" | |
60 #include "stringpool.h" | |
61 #include "tree-vrp.h" | |
62 #include "tree-ssanames.h" | |
63 #include "profile-count.h" | |
64 #include "optabs.h" | |
65 #include "regs.h" | |
66 #include "recog.h" | |
67 #include "diagnostic-core.h" | |
68 #include "fold-const.h" | |
69 #include "stor-layout.h" | |
70 #include "varasm.h" | |
71 #include "flags.h" | |
72 #include "explow.h" | |
73 #include "calls.h" | |
0 | 74 #include "expr.h" |
75 #include "output.h" | |
111 | 76 #include "common/common-target.h" |
0 | 77 #include "reload.h" |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
78 #include "intl.h" |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
79 #include "opts.h" |
111 | 80 #include "gimplify.h" |
81 #include "predict.h" | |
82 #include "params.h" | |
83 #include "real.h" | |
131 | 84 #include "langhooks.h" |
85 #include "sbitmap.h" | |
0 | 86 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
87 bool |
111 | 88 default_legitimate_address_p (machine_mode mode ATTRIBUTE_UNUSED, |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
89 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
|
90 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
|
91 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 #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
|
93 /* 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
|
94 if (strict) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
95 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
|
96 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
97 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
|
98 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
99 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
100 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
101 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
102 |
0 | 103 void |
104 default_external_libcall (rtx fun ATTRIBUTE_UNUSED) | |
105 { | |
106 #ifdef ASM_OUTPUT_EXTERNAL_LIBCALL | |
111 | 107 ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun); |
0 | 108 #endif |
109 } | |
110 | |
111 int | |
112 default_unspec_may_trap_p (const_rtx x, unsigned flags) | |
113 { | |
114 int i; | |
115 | |
111 | 116 /* Any floating arithmetic may trap. */ |
117 if ((SCALAR_FLOAT_MODE_P (GET_MODE (x)) && flag_trapping_math)) | |
0 | 118 return 1; |
119 | |
120 for (i = 0; i < XVECLEN (x, 0); ++i) | |
121 { | |
122 if (may_trap_p_1 (XVECEXP (x, 0, i), flags)) | |
123 return 1; | |
124 } | |
125 | |
126 return 0; | |
127 } | |
128 | |
111 | 129 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
|
130 default_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, |
111 | 131 machine_mode mode, |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 { |
111 | 136 if (type != NULL_TREE && for_return == 2) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
137 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
|
138 return mode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
139 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
140 |
111 | 141 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
|
142 default_promote_function_mode_always_promote (const_tree type, |
111 | 143 machine_mode mode, |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
144 int *punsignedp, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
145 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
|
146 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
|
147 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
148 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
|
149 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
150 |
111 | 151 machine_mode |
152 default_cc_modes_compatible (machine_mode m1, machine_mode m2) | |
0 | 153 { |
154 if (m1 == m2) | |
155 return m1; | |
156 return VOIDmode; | |
157 } | |
158 | |
159 bool | |
160 default_return_in_memory (const_tree type, | |
161 const_tree fntype ATTRIBUTE_UNUSED) | |
162 { | |
163 return (TYPE_MODE (type) == BLKmode); | |
164 } | |
165 | |
166 rtx | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
167 default_legitimize_address (rtx x, rtx orig_x ATTRIBUTE_UNUSED, |
111 | 168 machine_mode mode ATTRIBUTE_UNUSED) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
169 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
170 return x; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
171 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
172 |
111 | 173 bool |
131 | 174 default_legitimize_address_displacement (rtx *, rtx *, poly_int64, |
175 machine_mode) | |
111 | 176 { |
177 return false; | |
178 } | |
179 | |
180 bool | |
181 default_const_not_ok_for_debug_p (rtx x) | |
182 { | |
183 if (GET_CODE (x) == UNSPEC) | |
184 return true; | |
185 return false; | |
186 } | |
187 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
188 rtx |
0 | 189 default_expand_builtin_saveregs (void) |
190 { | |
191 error ("__builtin_saveregs not supported by this target"); | |
192 return const0_rtx; | |
193 } | |
194 | |
195 void | |
111 | 196 default_setup_incoming_varargs (cumulative_args_t ca ATTRIBUTE_UNUSED, |
197 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 198 tree type ATTRIBUTE_UNUSED, |
199 int *pretend_arg_size ATTRIBUTE_UNUSED, | |
200 int second_time ATTRIBUTE_UNUSED) | |
201 { | |
202 } | |
203 | |
204 /* The default implementation of TARGET_BUILTIN_SETJMP_FRAME_VALUE. */ | |
205 | |
206 rtx | |
207 default_builtin_setjmp_frame_value (void) | |
208 { | |
209 return virtual_stack_vars_rtx; | |
210 } | |
211 | |
212 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */ | |
213 | |
214 bool | |
111 | 215 hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t ca ATTRIBUTE_UNUSED) |
0 | 216 { |
217 return false; | |
218 } | |
219 | |
220 bool | |
111 | 221 default_pretend_outgoing_varargs_named (cumulative_args_t ca ATTRIBUTE_UNUSED) |
0 | 222 { |
223 return (targetm.calls.setup_incoming_varargs | |
224 != default_setup_incoming_varargs); | |
225 } | |
226 | |
111 | 227 scalar_int_mode |
0 | 228 default_eh_return_filter_mode (void) |
229 { | |
230 return targetm.unwind_word_mode (); | |
231 } | |
232 | |
111 | 233 scalar_int_mode |
0 | 234 default_libgcc_cmp_return_mode (void) |
235 { | |
236 return word_mode; | |
237 } | |
238 | |
111 | 239 scalar_int_mode |
0 | 240 default_libgcc_shift_count_mode (void) |
241 { | |
242 return word_mode; | |
243 } | |
244 | |
111 | 245 scalar_int_mode |
0 | 246 default_unwind_word_mode (void) |
247 { | |
248 return word_mode; | |
249 } | |
250 | |
251 /* The default implementation of TARGET_SHIFT_TRUNCATION_MASK. */ | |
252 | |
253 unsigned HOST_WIDE_INT | |
111 | 254 default_shift_truncation_mask (machine_mode mode) |
0 | 255 { |
111 | 256 return SHIFT_COUNT_TRUNCATED ? GET_MODE_UNIT_BITSIZE (mode) - 1 : 0; |
0 | 257 } |
258 | |
259 /* The default implementation of TARGET_MIN_DIVISIONS_FOR_RECIP_MUL. */ | |
260 | |
261 unsigned int | |
111 | 262 default_min_divisions_for_recip_mul (machine_mode mode ATTRIBUTE_UNUSED) |
0 | 263 { |
264 return have_insn_for (DIV, mode) ? 3 : 2; | |
265 } | |
266 | |
267 /* The default implementation of TARGET_MODE_REP_EXTENDED. */ | |
268 | |
269 int | |
111 | 270 default_mode_rep_extended (scalar_int_mode, scalar_int_mode) |
0 | 271 { |
272 return UNKNOWN; | |
273 } | |
274 | |
275 /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */ | |
276 | |
277 bool | |
111 | 278 hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t a ATTRIBUTE_UNUSED) |
0 | 279 { |
280 return true; | |
281 } | |
282 | |
283 /* Return machine mode for non-standard suffix | |
284 or VOIDmode if non-standard suffixes are unsupported. */ | |
111 | 285 machine_mode |
0 | 286 default_mode_for_suffix (char suffix ATTRIBUTE_UNUSED) |
287 { | |
288 return VOIDmode; | |
289 } | |
290 | |
291 /* The generic C++ ABI specifies this is a 64-bit value. */ | |
292 tree | |
293 default_cxx_guard_type (void) | |
294 { | |
295 return long_long_integer_type_node; | |
296 } | |
297 | |
298 /* Returns the size of the cookie to use when allocating an array | |
299 whose elements have the indicated TYPE. Assumes that it is already | |
300 known that a cookie is needed. */ | |
301 | |
302 tree | |
303 default_cxx_get_cookie_size (tree type) | |
304 { | |
305 tree cookie_size; | |
306 | |
307 /* We need to allocate an additional max (sizeof (size_t), alignof | |
308 (true_type)) bytes. */ | |
309 tree sizetype_size; | |
310 tree type_align; | |
311 | |
312 sizetype_size = size_in_bytes (sizetype); | |
313 type_align = size_int (TYPE_ALIGN_UNIT (type)); | |
111 | 314 if (tree_int_cst_lt (type_align, sizetype_size)) |
0 | 315 cookie_size = sizetype_size; |
316 else | |
317 cookie_size = type_align; | |
318 | |
319 return cookie_size; | |
320 } | |
321 | |
322 /* Return true if a parameter must be passed by reference. This version | |
323 of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK. */ | |
324 | |
325 bool | |
111 | 326 hook_pass_by_reference_must_pass_in_stack (cumulative_args_t c ATTRIBUTE_UNUSED, |
327 machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, | |
0 | 328 bool named_arg ATTRIBUTE_UNUSED) |
329 { | |
330 return targetm.calls.must_pass_in_stack (mode, type); | |
331 } | |
332 | |
333 /* Return true if a parameter follows callee copies conventions. This | |
334 version of the hook is true for all named arguments. */ | |
335 | |
336 bool | |
111 | 337 hook_callee_copies_named (cumulative_args_t ca ATTRIBUTE_UNUSED, |
338 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 339 const_tree type ATTRIBUTE_UNUSED, bool named) |
340 { | |
341 return named; | |
342 } | |
343 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
344 /* Emit to STREAM the assembler syntax for insn operand X. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
345 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
346 void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
347 default_print_operand (FILE *stream ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
348 int code ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
349 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
350 #ifdef PRINT_OPERAND |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
351 PRINT_OPERAND (stream, x, code); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
352 #else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
353 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
354 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
355 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
356 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
357 /* Emit to STREAM the assembler syntax for an insn operand whose memory |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
358 address is X. */ |
0 | 359 |
360 void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
361 default_print_operand_address (FILE *stream ATTRIBUTE_UNUSED, |
111 | 362 machine_mode /*mode*/, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
363 rtx x ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
364 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
365 #ifdef PRINT_OPERAND_ADDRESS |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
366 PRINT_OPERAND_ADDRESS (stream, x); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
367 #else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
368 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
369 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
370 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
371 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
372 /* Return true if CODE is a valid punctuation character for the |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
373 `print_operand' hook. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
374 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
375 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
376 default_print_operand_punct_valid_p (unsigned char code ATTRIBUTE_UNUSED) |
0 | 377 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
378 #ifdef PRINT_OPERAND_PUNCT_VALID_P |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
379 return PRINT_OPERAND_PUNCT_VALID_P (code); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
380 #else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
381 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
382 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
383 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
384 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
385 /* The default implementation of TARGET_MANGLE_ASSEMBLER_NAME. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
386 tree |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
387 default_mangle_assembler_name (const char *name ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
388 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
389 const char *skipped = name + (*name == '*' ? 1 : 0); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
390 const char *stripped = targetm.strip_name_encoding (skipped); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
391 if (*name != '*' && user_label_prefix[0]) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
392 stripped = ACONCAT ((user_label_prefix, stripped, NULL)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
393 return get_identifier (stripped); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
394 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
395 |
131 | 396 /* The default implementation of TARGET_TRANSLATE_MODE_ATTRIBUTE. */ |
397 | |
398 machine_mode | |
399 default_translate_mode_attribute (machine_mode mode) | |
400 { | |
401 return mode; | |
402 } | |
403 | |
0 | 404 /* True if MODE is valid for the target. By "valid", we mean able to |
405 be manipulated in non-trivial ways. In particular, this means all | |
406 the arithmetic is supported. | |
407 | |
408 By default we guess this means that any C type is supported. If | |
409 we can't map the mode back to a type that would be available in C, | |
410 then reject it. Special case, here, is the double-word arithmetic | |
411 supported by optabs.c. */ | |
412 | |
413 bool | |
111 | 414 default_scalar_mode_supported_p (scalar_mode mode) |
0 | 415 { |
416 int precision = GET_MODE_PRECISION (mode); | |
417 | |
418 switch (GET_MODE_CLASS (mode)) | |
419 { | |
420 case MODE_PARTIAL_INT: | |
421 case MODE_INT: | |
422 if (precision == CHAR_TYPE_SIZE) | |
423 return true; | |
424 if (precision == SHORT_TYPE_SIZE) | |
425 return true; | |
426 if (precision == INT_TYPE_SIZE) | |
427 return true; | |
428 if (precision == LONG_TYPE_SIZE) | |
429 return true; | |
430 if (precision == LONG_LONG_TYPE_SIZE) | |
431 return true; | |
432 if (precision == 2 * BITS_PER_WORD) | |
433 return true; | |
434 return false; | |
435 | |
436 case MODE_FLOAT: | |
437 if (precision == FLOAT_TYPE_SIZE) | |
438 return true; | |
439 if (precision == DOUBLE_TYPE_SIZE) | |
440 return true; | |
441 if (precision == LONG_DOUBLE_TYPE_SIZE) | |
442 return true; | |
443 return false; | |
444 | |
445 case MODE_DECIMAL_FLOAT: | |
446 case MODE_FRACT: | |
447 case MODE_UFRACT: | |
448 case MODE_ACCUM: | |
449 case MODE_UACCUM: | |
450 return false; | |
451 | |
452 default: | |
453 gcc_unreachable (); | |
454 } | |
455 } | |
456 | |
111 | 457 /* Return true if libgcc supports floating-point mode MODE (known to |
458 be supported as a scalar mode). */ | |
459 | |
460 bool | |
461 default_libgcc_floating_mode_supported_p (scalar_float_mode mode) | |
462 { | |
463 switch (mode) | |
464 { | |
465 #ifdef HAVE_SFmode | |
466 case E_SFmode: | |
467 #endif | |
468 #ifdef HAVE_DFmode | |
469 case E_DFmode: | |
470 #endif | |
471 #ifdef HAVE_XFmode | |
472 case E_XFmode: | |
473 #endif | |
474 #ifdef HAVE_TFmode | |
475 case E_TFmode: | |
476 #endif | |
477 return true; | |
478 | |
479 default: | |
480 return false; | |
481 } | |
482 } | |
483 | |
484 /* Return the machine mode to use for the type _FloatN, if EXTENDED is | |
485 false, or _FloatNx, if EXTENDED is true, or VOIDmode if not | |
486 supported. */ | |
487 opt_scalar_float_mode | |
488 default_floatn_mode (int n, bool extended) | |
489 { | |
490 if (extended) | |
491 { | |
492 opt_scalar_float_mode cand1, cand2; | |
493 scalar_float_mode mode; | |
494 switch (n) | |
495 { | |
496 case 32: | |
497 #ifdef HAVE_DFmode | |
498 cand1 = DFmode; | |
499 #endif | |
500 break; | |
501 | |
502 case 64: | |
503 #ifdef HAVE_XFmode | |
504 cand1 = XFmode; | |
505 #endif | |
506 #ifdef HAVE_TFmode | |
507 cand2 = TFmode; | |
508 #endif | |
509 break; | |
510 | |
511 case 128: | |
512 break; | |
513 | |
514 default: | |
515 /* Those are the only valid _FloatNx types. */ | |
516 gcc_unreachable (); | |
517 } | |
518 if (cand1.exists (&mode) | |
519 && REAL_MODE_FORMAT (mode)->ieee_bits > n | |
520 && targetm.scalar_mode_supported_p (mode) | |
521 && targetm.libgcc_floating_mode_supported_p (mode)) | |
522 return cand1; | |
523 if (cand2.exists (&mode) | |
524 && REAL_MODE_FORMAT (mode)->ieee_bits > n | |
525 && targetm.scalar_mode_supported_p (mode) | |
526 && targetm.libgcc_floating_mode_supported_p (mode)) | |
527 return cand2; | |
528 } | |
529 else | |
530 { | |
531 opt_scalar_float_mode cand; | |
532 scalar_float_mode mode; | |
533 switch (n) | |
534 { | |
535 case 16: | |
536 /* Always enable _Float16 if we have basic support for the mode. | |
537 Targets can control the range and precision of operations on | |
538 the _Float16 type using TARGET_C_EXCESS_PRECISION. */ | |
539 #ifdef HAVE_HFmode | |
540 cand = HFmode; | |
541 #endif | |
542 break; | |
543 | |
544 case 32: | |
545 #ifdef HAVE_SFmode | |
546 cand = SFmode; | |
547 #endif | |
548 break; | |
549 | |
550 case 64: | |
551 #ifdef HAVE_DFmode | |
552 cand = DFmode; | |
553 #endif | |
554 break; | |
555 | |
556 case 128: | |
557 #ifdef HAVE_TFmode | |
558 cand = TFmode; | |
559 #endif | |
560 break; | |
561 | |
562 default: | |
563 break; | |
564 } | |
565 if (cand.exists (&mode) | |
566 && REAL_MODE_FORMAT (mode)->ieee_bits == n | |
567 && targetm.scalar_mode_supported_p (mode) | |
568 && targetm.libgcc_floating_mode_supported_p (mode)) | |
569 return cand; | |
570 } | |
571 return opt_scalar_float_mode (); | |
572 } | |
573 | |
131 | 574 /* Define this to return true if the _Floatn and _Floatnx built-in functions |
575 should implicitly enable the built-in function without the __builtin_ prefix | |
576 in addition to the normal built-in function with the __builtin_ prefix. The | |
577 default is to only enable built-in functions without the __builtin_ prefix | |
578 for the GNU C langauge. The argument FUNC is the enum builtin_in_function | |
579 id of the function to be enabled. */ | |
580 | |
581 bool | |
582 default_floatn_builtin_p (int func ATTRIBUTE_UNUSED) | |
583 { | |
584 static bool first_time_p = true; | |
585 static bool c_or_objective_c; | |
586 | |
587 if (first_time_p) | |
588 { | |
589 first_time_p = false; | |
590 c_or_objective_c = lang_GNU_C () || lang_GNU_OBJC (); | |
591 } | |
592 | |
593 return c_or_objective_c; | |
594 } | |
595 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
596 /* Make some target macros useable by target-independent code. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
597 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
598 targhook_words_big_endian (void) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
599 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
600 return !!WORDS_BIG_ENDIAN; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
601 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
602 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
603 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
604 targhook_float_words_big_endian (void) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
605 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
606 return !!FLOAT_WORDS_BIG_ENDIAN; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
607 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
608 |
111 | 609 /* True if the target supports floating-point exceptions and rounding |
610 modes. */ | |
611 | |
612 bool | |
613 default_float_exceptions_rounding_supported_p (void) | |
614 { | |
615 #ifdef HAVE_adddf3 | |
616 return HAVE_adddf3; | |
617 #else | |
618 return false; | |
619 #endif | |
620 } | |
621 | |
0 | 622 /* True if the target supports decimal floating point. */ |
623 | |
624 bool | |
625 default_decimal_float_supported_p (void) | |
626 { | |
627 return ENABLE_DECIMAL_FLOAT; | |
628 } | |
629 | |
630 /* True if the target supports fixed-point arithmetic. */ | |
631 | |
632 bool | |
633 default_fixed_point_supported_p (void) | |
634 { | |
635 return ENABLE_FIXED_POINT; | |
636 } | |
637 | |
111 | 638 /* True if the target supports GNU indirect functions. */ |
639 | |
640 bool | |
641 default_has_ifunc_p (void) | |
642 { | |
643 return HAVE_GNU_INDIRECT_FUNCTION; | |
644 } | |
645 | |
0 | 646 /* NULL if INSN insn is valid within a low-overhead loop, otherwise returns |
647 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
|
648 |
0 | 649 This function checks whether a given INSN is valid within a low-overhead |
650 loop. If INSN is invalid it returns the reason for that, otherwise it | |
651 returns NULL. A called function may clobber any special registers required | |
652 for low-overhead looping. Additionally, some targets (eg, PPC) use the count | |
653 register for branch on table instructions. We reject the doloop pattern in | |
654 these cases. */ | |
655 | |
656 const char * | |
111 | 657 default_invalid_within_doloop (const rtx_insn *insn) |
0 | 658 { |
659 if (CALL_P (insn)) | |
660 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
|
661 |
111 | 662 if (tablejump_p (insn, NULL, NULL) || computed_jump_p (insn)) |
0 | 663 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
|
664 |
0 | 665 return NULL; |
666 } | |
667 | |
668 /* Mapping of builtin functions to vectorized variants. */ | |
669 | |
670 tree | |
111 | 671 default_builtin_vectorized_function (unsigned int, tree, tree) |
672 { | |
673 return NULL_TREE; | |
674 } | |
675 | |
676 /* Mapping of target builtin functions to vectorized variants. */ | |
677 | |
678 tree | |
679 default_builtin_md_vectorized_function (tree, tree, tree) | |
0 | 680 { |
681 return NULL_TREE; | |
682 } | |
683 | |
684 /* Vectorized conversion. */ | |
685 | |
686 tree | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
687 default_builtin_vectorized_conversion (unsigned int code ATTRIBUTE_UNUSED, |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
688 tree dest_type ATTRIBUTE_UNUSED, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
689 tree src_type ATTRIBUTE_UNUSED) |
0 | 690 { |
691 return NULL_TREE; | |
692 } | |
693 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
694 /* Default vectorizer cost model values. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
695 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
696 int |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
697 default_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, |
111 | 698 tree vectype, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
699 int misalign ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
700 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
701 switch (type_of_cost) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
702 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
703 case scalar_stmt: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
704 case scalar_load: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
705 case scalar_store: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
706 case vector_stmt: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
707 case vector_load: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
708 case vector_store: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
709 case vec_to_scalar: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
710 case scalar_to_vec: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
711 case cond_branch_not_taken: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
712 case vec_perm: |
111 | 713 case vec_promote_demote: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
714 return 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
715 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
716 case unaligned_load: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
717 case unaligned_store: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
718 return 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
719 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
720 case cond_branch_taken: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
721 return 3; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
722 |
111 | 723 case vec_construct: |
131 | 724 return estimated_poly_value (TYPE_VECTOR_SUBPARTS (vectype)) - 1; |
111 | 725 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
726 default: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
727 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
728 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
729 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
730 |
0 | 731 /* Reciprocal. */ |
732 | |
733 tree | |
111 | 734 default_builtin_reciprocal (tree) |
0 | 735 { |
736 return NULL_TREE; | |
737 } | |
738 | |
739 bool | |
740 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false ( | |
111 | 741 cumulative_args_t ca ATTRIBUTE_UNUSED, |
742 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 743 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
744 { | |
745 return false; | |
746 } | |
747 | |
748 bool | |
749 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true ( | |
111 | 750 cumulative_args_t ca ATTRIBUTE_UNUSED, |
751 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 752 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
753 { | |
754 return true; | |
755 } | |
756 | |
757 int | |
758 hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 ( | |
111 | 759 cumulative_args_t ca ATTRIBUTE_UNUSED, |
760 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 761 tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
762 { | |
763 return 0; | |
764 } | |
765 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
766 void |
131 | 767 hook_void_CUMULATIVE_ARGS_tree (cumulative_args_t ca ATTRIBUTE_UNUSED, |
768 tree ATTRIBUTE_UNUSED) | |
769 { | |
770 } | |
771 | |
772 void | |
111 | 773 default_function_arg_advance (cumulative_args_t ca ATTRIBUTE_UNUSED, |
774 machine_mode mode ATTRIBUTE_UNUSED, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
775 const_tree type ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
776 bool named ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
777 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
778 gcc_unreachable (); |
111 | 779 } |
780 | |
781 /* Default implementation of TARGET_FUNCTION_ARG_OFFSET. */ | |
782 | |
783 HOST_WIDE_INT | |
784 default_function_arg_offset (machine_mode, const_tree) | |
785 { | |
786 return 0; | |
787 } | |
788 | |
789 /* Default implementation of TARGET_FUNCTION_ARG_PADDING: usually pad | |
790 upward, but pad short args downward on big-endian machines. */ | |
791 | |
792 pad_direction | |
793 default_function_arg_padding (machine_mode mode, const_tree type) | |
794 { | |
795 if (!BYTES_BIG_ENDIAN) | |
796 return PAD_UPWARD; | |
797 | |
798 unsigned HOST_WIDE_INT size; | |
799 if (mode == BLKmode) | |
800 { | |
801 if (!type || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) | |
802 return PAD_UPWARD; | |
803 size = int_size_in_bytes (type); | |
804 } | |
805 else | |
131 | 806 /* Targets with variable-sized modes must override this hook |
807 and handle variable-sized modes explicitly. */ | |
808 size = GET_MODE_SIZE (mode).to_constant (); | |
111 | 809 |
810 if (size < (PARM_BOUNDARY / BITS_PER_UNIT)) | |
811 return PAD_DOWNWARD; | |
812 | |
813 return PAD_UPWARD; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
814 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
815 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
816 rtx |
111 | 817 default_function_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, |
818 machine_mode mode ATTRIBUTE_UNUSED, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
819 const_tree type ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
820 bool named ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
821 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
822 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
823 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
824 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
825 rtx |
111 | 826 default_function_incoming_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, |
827 machine_mode mode ATTRIBUTE_UNUSED, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
828 const_tree type ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
829 bool named ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
830 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
831 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
832 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
833 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
834 unsigned int |
111 | 835 default_function_arg_boundary (machine_mode mode ATTRIBUTE_UNUSED, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
836 const_tree type ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
837 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
838 return PARM_BOUNDARY; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
839 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
840 |
111 | 841 unsigned int |
842 default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED, | |
843 const_tree type ATTRIBUTE_UNUSED) | |
844 { | |
845 return PARM_BOUNDARY; | |
846 } | |
847 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
848 void |
0 | 849 hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED) |
850 { | |
851 } | |
852 | |
853 const char * | |
854 hook_invalid_arg_for_unprototyped_fn ( | |
855 const_tree typelist ATTRIBUTE_UNUSED, | |
856 const_tree funcdecl ATTRIBUTE_UNUSED, | |
857 const_tree val ATTRIBUTE_UNUSED) | |
858 { | |
859 return NULL; | |
860 } | |
861 | |
862 /* Initialize the stack protection decls. */ | |
863 | |
864 /* Stack protection related decls living in libgcc. */ | |
865 static GTY(()) tree stack_chk_guard_decl; | |
866 | |
867 tree | |
868 default_stack_protect_guard (void) | |
869 { | |
870 tree t = stack_chk_guard_decl; | |
871 | |
872 if (t == NULL) | |
873 { | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
874 rtx x; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
875 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
876 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
|
877 VAR_DECL, get_identifier ("__stack_chk_guard"), |
0 | 878 ptr_type_node); |
879 TREE_STATIC (t) = 1; | |
880 TREE_PUBLIC (t) = 1; | |
881 DECL_EXTERNAL (t) = 1; | |
882 TREE_USED (t) = 1; | |
883 TREE_THIS_VOLATILE (t) = 1; | |
884 DECL_ARTIFICIAL (t) = 1; | |
885 DECL_IGNORED_P (t) = 1; | |
886 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
887 /* Do not share RTL as the declaration is visible outside of |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
888 current function. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
889 x = DECL_RTL (t); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
890 RTX_FLAG (x, used) = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
891 |
0 | 892 stack_chk_guard_decl = t; |
893 } | |
894 | |
895 return t; | |
896 } | |
897 | |
898 static GTY(()) tree stack_chk_fail_decl; | |
899 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
900 tree |
0 | 901 default_external_stack_protect_fail (void) |
902 { | |
903 tree t = stack_chk_fail_decl; | |
904 | |
905 if (t == NULL_TREE) | |
906 { | |
907 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
|
908 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
|
909 FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t); |
0 | 910 TREE_STATIC (t) = 1; |
911 TREE_PUBLIC (t) = 1; | |
912 DECL_EXTERNAL (t) = 1; | |
913 TREE_USED (t) = 1; | |
914 TREE_THIS_VOLATILE (t) = 1; | |
915 TREE_NOTHROW (t) = 1; | |
916 DECL_ARTIFICIAL (t) = 1; | |
917 DECL_IGNORED_P (t) = 1; | |
918 DECL_VISIBILITY (t) = VISIBILITY_DEFAULT; | |
919 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
920 | |
921 stack_chk_fail_decl = t; | |
922 } | |
923 | |
924 return build_call_expr (t, 0); | |
925 } | |
926 | |
927 tree | |
928 default_hidden_stack_protect_fail (void) | |
929 { | |
930 #ifndef HAVE_GAS_HIDDEN | |
931 return default_external_stack_protect_fail (); | |
932 #else | |
933 tree t = stack_chk_fail_decl; | |
934 | |
935 if (!flag_pic) | |
936 return default_external_stack_protect_fail (); | |
937 | |
938 if (t == NULL_TREE) | |
939 { | |
940 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
|
941 t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, |
0 | 942 get_identifier ("__stack_chk_fail_local"), t); |
943 TREE_STATIC (t) = 1; | |
944 TREE_PUBLIC (t) = 1; | |
945 DECL_EXTERNAL (t) = 1; | |
946 TREE_USED (t) = 1; | |
947 TREE_THIS_VOLATILE (t) = 1; | |
948 TREE_NOTHROW (t) = 1; | |
949 DECL_ARTIFICIAL (t) = 1; | |
950 DECL_IGNORED_P (t) = 1; | |
951 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
952 DECL_VISIBILITY (t) = VISIBILITY_HIDDEN; | |
953 | |
954 stack_chk_fail_decl = t; | |
955 } | |
956 | |
957 return build_call_expr (t, 0); | |
958 #endif | |
959 } | |
960 | |
961 bool | |
962 hook_bool_const_rtx_commutative_p (const_rtx x, | |
963 int outer_code ATTRIBUTE_UNUSED) | |
964 { | |
965 return COMMUTATIVE_P (x); | |
966 } | |
967 | |
968 rtx | |
969 default_function_value (const_tree ret_type ATTRIBUTE_UNUSED, | |
970 const_tree fn_decl_or_type, | |
971 bool outgoing ATTRIBUTE_UNUSED) | |
972 { | |
973 /* The old interface doesn't handle receiving the function type. */ | |
974 if (fn_decl_or_type | |
975 && !DECL_P (fn_decl_or_type)) | |
976 fn_decl_or_type = NULL; | |
977 | |
978 #ifdef FUNCTION_VALUE | |
979 return FUNCTION_VALUE (ret_type, fn_decl_or_type); | |
980 #else | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
981 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
982 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
983 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
984 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
985 rtx |
111 | 986 default_libcall_value (machine_mode mode ATTRIBUTE_UNUSED, |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
987 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
|
988 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
989 #ifdef LIBCALL_VALUE |
131 | 990 return LIBCALL_VALUE (MACRO_MODE (mode)); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
991 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
992 gcc_unreachable (); |
0 | 993 #endif |
994 } | |
995 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
996 /* The default hook for TARGET_FUNCTION_VALUE_REGNO_P. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
997 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
998 bool |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
999 default_function_value_regno_p (const unsigned int regno ATTRIBUTE_UNUSED) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1000 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1001 #ifdef FUNCTION_VALUE_REGNO_P |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1002 return FUNCTION_VALUE_REGNO_P (regno); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1003 #else |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1004 gcc_unreachable (); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1005 #endif |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1006 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1007 |
0 | 1008 rtx |
1009 default_internal_arg_pointer (void) | |
1010 { | |
1011 /* If the reg that the virtual arg pointer will be translated into is | |
1012 not a fixed reg or is the stack pointer, make a copy of the virtual | |
1013 arg pointer, and address parms via the copy. The frame pointer is | |
1014 considered fixed even though it is not marked as such. */ | |
1015 if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM | |
1016 || ! (fixed_regs[ARG_POINTER_REGNUM] | |
1017 || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM))) | |
1018 return copy_to_reg (virtual_incoming_args_rtx); | |
1019 else | |
1020 return virtual_incoming_args_rtx; | |
1021 } | |
1022 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1023 rtx |
111 | 1024 default_static_chain (const_tree ARG_UNUSED (fndecl_or_type), bool incoming_p) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1025 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1026 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
|
1027 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1028 #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
|
1029 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
|
1030 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1031 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1032 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1033 #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
|
1034 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
|
1035 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1036 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1037 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1038 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
|
1039 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
|
1040 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1041 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
|
1042 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
|
1043 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1044 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1045 /* 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
|
1046 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
|
1047 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
|
1048 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1049 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1050 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1051 void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1052 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
|
1053 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
|
1054 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1055 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
|
1056 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1057 |
131 | 1058 poly_int64 |
1059 default_return_pops_args (tree, tree, poly_int64) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1060 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1061 return 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1062 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1063 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1064 reg_class_t |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1065 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
|
1066 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1067 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
|
1068 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1069 |
111 | 1070 reg_class_t |
1071 default_ira_change_pseudo_allocno_class (int regno ATTRIBUTE_UNUSED, | |
1072 reg_class_t cl, | |
1073 reg_class_t best_cl ATTRIBUTE_UNUSED) | |
1074 { | |
1075 return cl; | |
1076 } | |
1077 | |
1078 extern bool | |
1079 default_lra_p (void) | |
0 | 1080 { |
111 | 1081 return true; |
1082 } | |
1083 | |
1084 int | |
1085 default_register_priority (int hard_regno ATTRIBUTE_UNUSED) | |
1086 { | |
1087 return 0; | |
0 | 1088 } |
111 | 1089 |
1090 extern bool | |
1091 default_register_usage_leveling_p (void) | |
1092 { | |
1093 return false; | |
1094 } | |
1095 | |
1096 extern bool | |
1097 default_different_addr_displacement_p (void) | |
1098 { | |
1099 return false; | |
1100 } | |
0 | 1101 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1102 reg_class_t |
0 | 1103 default_secondary_reload (bool in_p ATTRIBUTE_UNUSED, rtx x ATTRIBUTE_UNUSED, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1104 reg_class_t reload_class_i ATTRIBUTE_UNUSED, |
111 | 1105 machine_mode reload_mode ATTRIBUTE_UNUSED, |
0 | 1106 secondary_reload_info *sri) |
1107 { | |
1108 enum reg_class rclass = NO_REGS; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1109 enum reg_class reload_class = (enum reg_class) reload_class_i; |
0 | 1110 |
1111 if (sri->prev_sri && sri->prev_sri->t_icode != CODE_FOR_nothing) | |
1112 { | |
1113 sri->icode = sri->prev_sri->t_icode; | |
1114 return NO_REGS; | |
1115 } | |
1116 #ifdef SECONDARY_INPUT_RELOAD_CLASS | |
1117 if (in_p) | |
131 | 1118 rclass = SECONDARY_INPUT_RELOAD_CLASS (reload_class, |
1119 MACRO_MODE (reload_mode), x); | |
0 | 1120 #endif |
1121 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS | |
1122 if (! in_p) | |
131 | 1123 rclass = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, |
1124 MACRO_MODE (reload_mode), x); | |
0 | 1125 #endif |
1126 if (rclass != NO_REGS) | |
1127 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1128 enum insn_code icode |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1129 = direct_optab_handler (in_p ? reload_in_optab : reload_out_optab, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1130 reload_mode); |
0 | 1131 |
1132 if (icode != CODE_FOR_nothing | |
111 | 1133 && !insn_operand_matches (icode, in_p, x)) |
0 | 1134 icode = CODE_FOR_nothing; |
1135 else if (icode != CODE_FOR_nothing) | |
1136 { | |
1137 const char *insn_constraint, *scratch_constraint; | |
1138 enum reg_class insn_class, scratch_class; | |
1139 | |
1140 gcc_assert (insn_data[(int) icode].n_operands == 3); | |
1141 insn_constraint = insn_data[(int) icode].operand[!in_p].constraint; | |
1142 if (!*insn_constraint) | |
1143 insn_class = ALL_REGS; | |
1144 else | |
1145 { | |
1146 if (in_p) | |
1147 { | |
1148 gcc_assert (*insn_constraint == '='); | |
1149 insn_constraint++; | |
1150 } | |
111 | 1151 insn_class = (reg_class_for_constraint |
1152 (lookup_constraint (insn_constraint))); | |
0 | 1153 gcc_assert (insn_class != NO_REGS); |
1154 } | |
1155 | |
1156 scratch_constraint = insn_data[(int) icode].operand[2].constraint; | |
1157 /* The scratch register's constraint must start with "=&", | |
1158 except for an input reload, where only "=" is necessary, | |
1159 and where it might be beneficial to re-use registers from | |
1160 the input. */ | |
1161 gcc_assert (scratch_constraint[0] == '=' | |
1162 && (in_p || scratch_constraint[1] == '&')); | |
1163 scratch_constraint++; | |
1164 if (*scratch_constraint == '&') | |
1165 scratch_constraint++; | |
111 | 1166 scratch_class = (reg_class_for_constraint |
1167 (lookup_constraint (scratch_constraint))); | |
0 | 1168 |
1169 if (reg_class_subset_p (reload_class, insn_class)) | |
1170 { | |
1171 gcc_assert (scratch_class == rclass); | |
1172 rclass = NO_REGS; | |
1173 } | |
1174 else | |
1175 rclass = insn_class; | |
1176 | |
1177 } | |
1178 if (rclass == NO_REGS) | |
1179 sri->icode = icode; | |
1180 else | |
1181 sri->t_icode = icode; | |
1182 } | |
1183 return rclass; | |
1184 } | |
1185 | |
111 | 1186 /* The default implementation of TARGET_SECONDARY_MEMORY_NEEDED_MODE. */ |
1187 | |
1188 machine_mode | |
1189 default_secondary_memory_needed_mode (machine_mode mode) | |
0 | 1190 { |
111 | 1191 if (!targetm.lra_p () |
131 | 1192 && known_lt (GET_MODE_BITSIZE (mode), BITS_PER_WORD) |
111 | 1193 && INTEGRAL_MODE_P (mode)) |
1194 return mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0).require (); | |
1195 return mode; | |
0 | 1196 } |
1197 | |
1198 /* By default, if flag_pic is true, then neither local nor global relocs | |
1199 should be placed in readonly memory. */ | |
1200 | |
1201 int | |
1202 default_reloc_rw_mask (void) | |
1203 { | |
1204 return flag_pic ? 3 : 0; | |
1205 } | |
1206 | |
131 | 1207 /* By default, address diff vectors are generated |
1208 for jump tables when flag_pic is true. */ | |
1209 | |
1210 bool | |
1211 default_generate_pic_addr_diff_vec (void) | |
1212 { | |
1213 return flag_pic; | |
1214 } | |
1215 | |
0 | 1216 /* By default, do no modification. */ |
1217 tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED, | |
1218 tree id) | |
1219 { | |
1220 return id; | |
1221 } | |
1222 | |
111 | 1223 /* The default implementation of TARGET_STATIC_RTX_ALIGNMENT. */ |
1224 | |
1225 HOST_WIDE_INT | |
1226 default_static_rtx_alignment (machine_mode mode) | |
0 | 1227 { |
111 | 1228 return GET_MODE_ALIGNMENT (mode); |
1229 } | |
1230 | |
1231 /* The default implementation of TARGET_CONSTANT_ALIGNMENT. */ | |
1232 | |
1233 HOST_WIDE_INT | |
1234 default_constant_alignment (const_tree, HOST_WIDE_INT align) | |
1235 { | |
1236 return align; | |
1237 } | |
1238 | |
1239 /* An implementation of TARGET_CONSTANT_ALIGNMENT that aligns strings | |
1240 to at least BITS_PER_WORD but otherwise makes no changes. */ | |
0 | 1241 |
111 | 1242 HOST_WIDE_INT |
1243 constant_alignment_word_strings (const_tree exp, HOST_WIDE_INT align) | |
1244 { | |
1245 if (TREE_CODE (exp) == STRING_CST) | |
1246 return MAX (align, BITS_PER_WORD); | |
1247 return align; | |
1248 } | |
0 | 1249 |
111 | 1250 /* Default to natural alignment for vector types. */ |
1251 HOST_WIDE_INT | |
1252 default_vector_alignment (const_tree type) | |
1253 { | |
1254 HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type)); | |
1255 if (align > MAX_OFILE_ALIGNMENT) | |
1256 align = MAX_OFILE_ALIGNMENT; | |
1257 return align; | |
1258 } | |
1259 | |
1260 /* The default implementation of | |
1261 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT. */ | |
1262 | |
1263 HOST_WIDE_INT | |
1264 default_preferred_vector_alignment (const_tree type) | |
1265 { | |
1266 return TYPE_ALIGN (type); | |
1267 } | |
1268 | |
1269 /* By default assume vectors of element TYPE require a multiple of the natural | |
1270 alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */ | |
1271 bool | |
1272 default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed) | |
1273 { | |
1274 return ! is_packed; | |
0 | 1275 } |
1276 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1277 /* 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
|
1278 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
|
1279 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
|
1280 bool |
111 | 1281 default_builtin_support_vector_misalignment (machine_mode mode, |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1282 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
|
1283 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1284 int misalignment |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1285 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1286 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
|
1287 ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1288 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1289 if (optab_handler (movmisalign_optab, mode) != CODE_FOR_nothing) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1290 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1291 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1292 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1293 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1294 /* By default, only attempt to parallelize bitwise operations, and |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1295 possibly adds/subtracts using bit-twiddling. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1296 |
111 | 1297 machine_mode |
1298 default_preferred_simd_mode (scalar_mode) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1299 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1300 return word_mode; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1301 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1302 |
131 | 1303 /* By default do not split reductions further. */ |
1304 | |
1305 machine_mode | |
1306 default_split_reduction (machine_mode mode) | |
1307 { | |
1308 return mode; | |
1309 } | |
1310 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1311 /* By default only the size derived from the preferred vector mode |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1312 is tried. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1313 |
131 | 1314 void |
1315 default_autovectorize_vector_sizes (vector_sizes *) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1316 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1317 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1318 |
131 | 1319 /* By default a vector of integers is used as a mask. */ |
111 | 1320 |
1321 opt_machine_mode | |
131 | 1322 default_get_mask_mode (poly_uint64 nunits, poly_uint64 vector_size) |
111 | 1323 { |
131 | 1324 unsigned int elem_size = vector_element_size (vector_size, nunits); |
111 | 1325 scalar_int_mode elem_mode |
1326 = smallest_int_mode_for_size (elem_size * BITS_PER_UNIT); | |
1327 machine_mode vector_mode; | |
1328 | |
131 | 1329 gcc_assert (known_eq (elem_size * nunits, vector_size)); |
111 | 1330 |
1331 if (mode_for_vector (elem_mode, nunits).exists (&vector_mode) | |
1332 && VECTOR_MODE_P (vector_mode) | |
1333 && targetm.vector_mode_supported_p (vector_mode)) | |
1334 return vector_mode; | |
1335 | |
1336 return opt_machine_mode (); | |
1337 } | |
1338 | |
131 | 1339 /* By default consider masked stores to be expensive. */ |
1340 | |
1341 bool | |
1342 default_empty_mask_is_expensive (unsigned ifn) | |
1343 { | |
1344 return ifn == IFN_MASK_STORE; | |
1345 } | |
1346 | |
111 | 1347 /* By default, the cost model accumulates three separate costs (prologue, |
1348 loop body, and epilogue) for a vectorized loop or block. So allocate an | |
1349 array of three unsigned ints, set it to zero, and return its address. */ | |
1350 | |
1351 void * | |
1352 default_init_cost (struct loop *loop_info ATTRIBUTE_UNUSED) | |
1353 { | |
1354 unsigned *cost = XNEWVEC (unsigned, 3); | |
1355 cost[vect_prologue] = cost[vect_body] = cost[vect_epilogue] = 0; | |
1356 return cost; | |
1357 } | |
1358 | |
1359 /* By default, the cost model looks up the cost of the given statement | |
1360 kind and mode, multiplies it by the occurrence count, accumulates | |
1361 it into the cost specified by WHERE, and returns the cost added. */ | |
1362 | |
1363 unsigned | |
1364 default_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind, | |
1365 struct _stmt_vec_info *stmt_info, int misalign, | |
1366 enum vect_cost_model_location where) | |
1367 { | |
1368 unsigned *cost = (unsigned *) data; | |
1369 unsigned retval = 0; | |
1370 | |
1371 tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE; | |
1372 int stmt_cost = targetm.vectorize.builtin_vectorization_cost (kind, vectype, | |
1373 misalign); | |
1374 /* Statements in an inner loop relative to the loop being | |
1375 vectorized are weighted more heavily. The value here is | |
1376 arbitrary and could potentially be improved with analysis. */ | |
1377 if (where == vect_body && stmt_info && stmt_in_inner_loop_p (stmt_info)) | |
1378 count *= 50; /* FIXME. */ | |
1379 | |
1380 retval = (unsigned) (count * stmt_cost); | |
1381 cost[where] += retval; | |
1382 | |
1383 return retval; | |
1384 } | |
1385 | |
1386 /* By default, the cost model just returns the accumulated costs. */ | |
1387 | |
1388 void | |
1389 default_finish_cost (void *data, unsigned *prologue_cost, | |
1390 unsigned *body_cost, unsigned *epilogue_cost) | |
1391 { | |
1392 unsigned *cost = (unsigned *) data; | |
1393 *prologue_cost = cost[vect_prologue]; | |
1394 *body_cost = cost[vect_body]; | |
1395 *epilogue_cost = cost[vect_epilogue]; | |
1396 } | |
1397 | |
1398 /* Free the cost data. */ | |
1399 | |
1400 void | |
1401 default_destroy_cost_data (void *data) | |
1402 { | |
1403 free (data); | |
1404 } | |
1405 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1406 /* 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
|
1407 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
|
1408 bool |
111 | 1409 default_valid_pointer_mode (scalar_int_mode mode) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1410 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1411 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
|
1412 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1413 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1414 /* Determine whether the memory reference specified by REF may alias |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1415 the C libraries errno location. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1416 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1417 default_ref_may_alias_errno (ao_ref *ref) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1418 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1419 tree base = ao_ref_base (ref); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1420 /* The default implementation assumes the errno location is |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1421 a declaration of type int or is always accessed via a |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1422 pointer to int. We assume that accesses to errno are |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1423 not deliberately obfuscated (even in conforming ways). */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1424 if (TYPE_UNSIGNED (TREE_TYPE (base)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1425 || TYPE_MODE (TREE_TYPE (base)) != TYPE_MODE (integer_type_node)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1426 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1427 /* The default implementation assumes an errno location |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1428 declaration is never defined in the current compilation unit. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1429 if (DECL_P (base) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1430 && !TREE_STATIC (base)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1431 return true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1432 else if (TREE_CODE (base) == MEM_REF |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1433 && TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1434 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1435 struct ptr_info_def *pi = SSA_NAME_PTR_INFO (TREE_OPERAND (base, 0)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1436 return !pi || pi->pt.anything || pi->pt.nonlocal; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1437 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1438 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1439 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1440 |
111 | 1441 /* Return the mode for a pointer to a given ADDRSPACE, |
1442 defaulting to ptr_mode for all address spaces. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1443 |
111 | 1444 scalar_int_mode |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1445 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
|
1446 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1447 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
|
1448 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1449 |
111 | 1450 /* Return the mode for an address in a given ADDRSPACE, |
1451 defaulting to Pmode for all address spaces. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1452 |
111 | 1453 scalar_int_mode |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1454 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
|
1455 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1456 return Pmode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1457 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1458 |
111 | 1459 /* Named address space version of valid_pointer_mode. |
1460 To match the above, the same modes apply to all address spaces. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1461 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1462 bool |
111 | 1463 default_addr_space_valid_pointer_mode (scalar_int_mode mode, |
1464 addr_space_t as ATTRIBUTE_UNUSED) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1465 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1466 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
|
1467 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1468 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1469 /* 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
|
1470 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
|
1471 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
|
1472 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
|
1473 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1474 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1475 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
|
1476 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1477 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
|
1478 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1479 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
|
1480 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1481 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1482 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1483 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1484 |
111 | 1485 /* Named address space version of legitimate_address_p. |
1486 By default, all address spaces have the same form. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1487 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1488 bool |
111 | 1489 default_addr_space_legitimate_address_p (machine_mode mode, rtx mem, |
1490 bool strict, | |
1491 addr_space_t as ATTRIBUTE_UNUSED) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1492 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1493 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
|
1494 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1495 |
111 | 1496 /* Named address space version of LEGITIMIZE_ADDRESS. |
1497 By default, all address spaces have the same form. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1498 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1499 rtx |
111 | 1500 default_addr_space_legitimize_address (rtx x, rtx oldx, machine_mode mode, |
1501 addr_space_t as ATTRIBUTE_UNUSED) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1502 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1503 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
|
1504 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1505 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1506 /* 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
|
1507 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
|
1508 space. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1509 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1510 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1511 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
|
1512 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1513 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
|
1514 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1515 |
111 | 1516 /* The default hook for determining if 0 within a named address |
1517 space is a valid address. */ | |
1518 | |
1519 bool | |
1520 default_addr_space_zero_address_valid (addr_space_t as ATTRIBUTE_UNUSED) | |
1521 { | |
1522 return false; | |
1523 } | |
1524 | |
1525 /* The default hook for debugging the address space is to return the | |
1526 address space number to indicate DW_AT_address_class. */ | |
1527 int | |
1528 default_addr_space_debug (addr_space_t as) | |
1529 { | |
1530 return as; | |
1531 } | |
1532 | |
1533 /* The default hook implementation for TARGET_ADDR_SPACE_DIAGNOSE_USAGE. | |
1534 Don't complain about any address space. */ | |
1535 | |
1536 void | |
1537 default_addr_space_diagnose_usage (addr_space_t, location_t) | |
1538 { | |
1539 } | |
1540 | |
1541 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1542 /* 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
|
1543 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
|
1544 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1545 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1546 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
|
1547 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
|
1548 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
|
1549 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1550 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1551 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1552 |
111 | 1553 /* The defualt implementation of TARGET_HARD_REGNO_NREGS. */ |
1554 | |
1555 unsigned int | |
1556 default_hard_regno_nregs (unsigned int, machine_mode mode) | |
1557 { | |
131 | 1558 /* Targets with variable-sized modes must provide their own definition |
1559 of this hook. */ | |
1560 return CEIL (GET_MODE_SIZE (mode).to_constant (), UNITS_PER_WORD); | |
111 | 1561 } |
1562 | |
0 | 1563 bool |
1564 default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED) | |
1565 { | |
1566 return true; | |
1567 } | |
1568 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1569 /* The default implementation of TARGET_MODE_DEPENDENT_ADDRESS_P. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1570 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1571 bool |
111 | 1572 default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED, |
1573 addr_space_t addrspace ATTRIBUTE_UNUSED) | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1574 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1575 return false; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1576 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1577 |
0 | 1578 bool |
1579 default_target_option_valid_attribute_p (tree ARG_UNUSED (fndecl), | |
1580 tree ARG_UNUSED (name), | |
1581 tree ARG_UNUSED (args), | |
1582 int ARG_UNUSED (flags)) | |
1583 { | |
1584 warning (OPT_Wattributes, | |
1585 "target attribute is not supported on this machine"); | |
1586 | |
1587 return false; | |
1588 } | |
1589 | |
1590 bool | |
1591 default_target_option_pragma_parse (tree ARG_UNUSED (args), | |
1592 tree ARG_UNUSED (pop_target)) | |
1593 { | |
111 | 1594 /* If args is NULL the caller is handle_pragma_pop_options (). In that case, |
1595 emit no warning because "#pragma GCC pop_target" is valid on targets that | |
1596 do not have the "target" pragma. */ | |
1597 if (args) | |
1598 warning (OPT_Wpragmas, | |
1599 "#pragma GCC target is not supported for this machine"); | |
0 | 1600 |
1601 return false; | |
1602 } | |
1603 | |
1604 bool | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1605 default_target_can_inline_p (tree caller, tree callee) |
0 | 1606 { |
1607 tree callee_opts = DECL_FUNCTION_SPECIFIC_TARGET (callee); | |
1608 tree caller_opts = DECL_FUNCTION_SPECIFIC_TARGET (caller); | |
111 | 1609 if (! callee_opts) |
1610 callee_opts = target_option_default_node; | |
1611 if (! caller_opts) | |
1612 caller_opts = target_option_default_node; | |
0 | 1613 |
111 | 1614 /* If both caller and callee have attributes, assume that if the |
1615 pointer is different, the two functions have different target | |
1616 options since build_target_option_node uses a hash table for the | |
1617 options. */ | |
1618 return callee_opts == caller_opts; | |
0 | 1619 } |
1620 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1621 /* 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
|
1622 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
|
1623 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
|
1624 |
111 | 1625 unsigned int |
1626 default_case_values_threshold (void) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1627 { |
111 | 1628 return (targetm.have_casesi () ? 4 : 5); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1629 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1630 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1631 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1632 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
|
1633 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1634 return HAVE_conditional_execution; |
111 | 1635 } |
1636 | |
1637 /* By default we assume that c99 functions are present at the runtime, | |
1638 but sincos is not. */ | |
1639 bool | |
1640 default_libc_has_function (enum function_class fn_class) | |
1641 { | |
1642 if (fn_class == function_c94 | |
1643 || fn_class == function_c99_misc | |
1644 || fn_class == function_c99_math_complex) | |
1645 return true; | |
1646 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1647 return false; |
111 | 1648 } |
1649 | |
1650 bool | |
1651 gnu_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED) | |
1652 { | |
1653 return true; | |
1654 } | |
1655 | |
1656 bool | |
1657 no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED) | |
1658 { | |
1659 return false; | |
1660 } | |
1661 | |
1662 tree | |
1663 default_builtin_tm_load_store (tree ARG_UNUSED (type)) | |
1664 { | |
1665 return 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
|
1666 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1667 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1668 /* Compute cost of moving registers to/from memory. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1669 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1670 int |
111 | 1671 default_memory_move_cost (machine_mode mode ATTRIBUTE_UNUSED, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1672 reg_class_t rclass ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1673 bool in ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1674 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1675 #ifndef MEMORY_MOVE_COST |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1676 return (4 + memory_move_secondary_cost (mode, (enum reg_class) rclass, in)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1677 #else |
131 | 1678 return MEMORY_MOVE_COST (MACRO_MODE (mode), (enum reg_class) rclass, in); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1679 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1680 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1681 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1682 /* Compute cost of moving data from a register of class FROM to one of |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1683 TO, using MODE. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1684 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1685 int |
111 | 1686 default_register_move_cost (machine_mode mode ATTRIBUTE_UNUSED, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1687 reg_class_t from ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1688 reg_class_t to ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1689 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1690 #ifndef REGISTER_MOVE_COST |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1691 return 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1692 #else |
131 | 1693 return REGISTER_MOVE_COST (MACRO_MODE (mode), |
1694 (enum reg_class) from, (enum reg_class) to); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1695 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1696 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1697 |
111 | 1698 /* The default implementation of TARGET_SLOW_UNALIGNED_ACCESS. */ |
1699 | |
1700 bool | |
1701 default_slow_unaligned_access (machine_mode, unsigned int) | |
1702 { | |
1703 return STRICT_ALIGNMENT; | |
1704 } | |
1705 | |
131 | 1706 /* The default implementation of TARGET_ESTIMATED_POLY_VALUE. */ |
1707 | |
1708 HOST_WIDE_INT | |
1709 default_estimated_poly_value (poly_int64 x) | |
1710 { | |
1711 return x.coeffs[0]; | |
1712 } | |
1713 | |
111 | 1714 /* For hooks which use the MOVE_RATIO macro, this gives the legacy default |
1715 behavior. SPEED_P is true if we are compiling for speed. */ | |
1716 | |
1717 unsigned int | |
1718 get_move_ratio (bool speed_p ATTRIBUTE_UNUSED) | |
1719 { | |
1720 unsigned int move_ratio; | |
1721 #ifdef MOVE_RATIO | |
1722 move_ratio = (unsigned int) MOVE_RATIO (speed_p); | |
1723 #else | |
1724 #if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti) | |
1725 move_ratio = 2; | |
1726 #else /* No movmem patterns, pick a default. */ | |
1727 move_ratio = ((speed_p) ? 15 : 3); | |
1728 #endif | |
1729 #endif | |
1730 return move_ratio; | |
1731 } | |
1732 | |
1733 /* Return TRUE if the move_by_pieces/set_by_pieces infrastructure should be | |
1734 used; return FALSE if the movmem/setmem optab should be expanded, or | |
1735 a call to memcpy emitted. */ | |
1736 | |
1737 bool | |
1738 default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT size, | |
1739 unsigned int alignment, | |
1740 enum by_pieces_operation op, | |
1741 bool speed_p) | |
1742 { | |
1743 unsigned int max_size = 0; | |
1744 unsigned int ratio = 0; | |
1745 | |
1746 switch (op) | |
1747 { | |
1748 case CLEAR_BY_PIECES: | |
1749 max_size = STORE_MAX_PIECES; | |
1750 ratio = CLEAR_RATIO (speed_p); | |
1751 break; | |
1752 case MOVE_BY_PIECES: | |
1753 max_size = MOVE_MAX_PIECES; | |
1754 ratio = get_move_ratio (speed_p); | |
1755 break; | |
1756 case SET_BY_PIECES: | |
1757 max_size = STORE_MAX_PIECES; | |
1758 ratio = SET_RATIO (speed_p); | |
1759 break; | |
1760 case STORE_BY_PIECES: | |
1761 max_size = STORE_MAX_PIECES; | |
1762 ratio = get_move_ratio (speed_p); | |
1763 break; | |
1764 case COMPARE_BY_PIECES: | |
1765 max_size = COMPARE_MAX_PIECES; | |
1766 /* Pick a likely default, just as in get_move_ratio. */ | |
1767 ratio = speed_p ? 15 : 3; | |
1768 break; | |
1769 } | |
1770 | |
1771 return by_pieces_ninsns (size, alignment, max_size + 1, op) < ratio; | |
1772 } | |
1773 | |
1774 /* This hook controls code generation for expanding a memcmp operation by | |
1775 pieces. Return 1 for the normal pattern of compare/jump after each pair | |
1776 of loads, or a higher number to reduce the number of branches. */ | |
1777 | |
1778 int | |
1779 default_compare_by_pieces_branch_ratio (machine_mode) | |
1780 { | |
1781 return 1; | |
1782 } | |
1783 | |
1784 /* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function | |
1785 entry. If RECORD_P is true and the target supports named sections, | |
1786 the location of the NOPs will be recorded in a special object section | |
1787 called "__patchable_function_entries". This routine may be called | |
1788 twice per function to put NOPs before and after the function | |
1789 entry. */ | |
1790 | |
1791 void | |
1792 default_print_patchable_function_entry (FILE *file, | |
1793 unsigned HOST_WIDE_INT patch_area_size, | |
1794 bool record_p) | |
1795 { | |
1796 const char *nop_templ = 0; | |
1797 int code_num; | |
1798 rtx_insn *my_nop = make_insn_raw (gen_nop ()); | |
1799 | |
1800 /* We use the template alone, relying on the (currently sane) assumption | |
1801 that the NOP template does not have variable operands. */ | |
1802 code_num = recog_memoized (my_nop); | |
1803 nop_templ = get_insn_template (code_num, my_nop); | |
1804 | |
1805 if (record_p && targetm_common.have_named_sections) | |
1806 { | |
1807 char buf[256]; | |
1808 static int patch_area_number; | |
1809 section *previous_section = in_section; | |
1810 | |
1811 patch_area_number++; | |
1812 ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number); | |
1813 | |
1814 switch_to_section (get_section ("__patchable_function_entries", | |
1815 0, NULL)); | |
1816 fputs (integer_asm_op (POINTER_SIZE_UNITS, false), file); | |
1817 assemble_name_raw (file, buf); | |
1818 fputc ('\n', file); | |
1819 | |
1820 switch_to_section (previous_section); | |
1821 ASM_OUTPUT_LABEL (file, buf); | |
1822 } | |
1823 | |
1824 unsigned i; | |
1825 for (i = 0; i < patch_area_size; ++i) | |
1826 fprintf (file, "\t%s\n", nop_templ); | |
1827 } | |
1828 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1829 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1830 default_profile_before_prologue (void) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1831 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1832 #ifdef PROFILE_BEFORE_PROLOGUE |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1833 return true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1834 #else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1835 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1836 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1837 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1838 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1839 /* The default implementation of TARGET_PREFERRED_RELOAD_CLASS. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1840 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1841 reg_class_t |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1842 default_preferred_reload_class (rtx x ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1843 reg_class_t rclass) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1844 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1845 #ifdef PREFERRED_RELOAD_CLASS |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1846 return (reg_class_t) PREFERRED_RELOAD_CLASS (x, (enum reg_class) rclass); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1847 #else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1848 return rclass; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1849 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1850 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1851 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1852 /* The default implementation of TARGET_OUTPUT_PREFERRED_RELOAD_CLASS. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1853 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1854 reg_class_t |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1855 default_preferred_output_reload_class (rtx x ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1856 reg_class_t rclass) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1857 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1858 return rclass; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1859 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1860 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1861 /* The default implementation of TARGET_PREFERRED_RENAME_CLASS. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1862 reg_class_t |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1863 default_preferred_rename_class (reg_class_t rclass ATTRIBUTE_UNUSED) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1864 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1865 return NO_REGS; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1866 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1867 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1868 /* The default implementation of TARGET_CLASS_LIKELY_SPILLED_P. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1869 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1870 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1871 default_class_likely_spilled_p (reg_class_t rclass) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1872 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1873 return (reg_class_size[(int) rclass] == 1); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1874 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1875 |
111 | 1876 /* The default implementation of TARGET_CLASS_MAX_NREGS. */ |
1877 | |
1878 unsigned char | |
1879 default_class_max_nregs (reg_class_t rclass ATTRIBUTE_UNUSED, | |
1880 machine_mode mode ATTRIBUTE_UNUSED) | |
1881 { | |
1882 #ifdef CLASS_MAX_NREGS | |
131 | 1883 return (unsigned char) CLASS_MAX_NREGS ((enum reg_class) rclass, |
1884 MACRO_MODE (mode)); | |
111 | 1885 #else |
131 | 1886 /* Targets with variable-sized modes must provide their own definition |
1887 of this hook. */ | |
1888 unsigned int size = GET_MODE_SIZE (mode).to_constant (); | |
1889 return (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD; | |
111 | 1890 #endif |
1891 } | |
1892 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1893 /* Determine the debugging unwind mechanism for the target. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1894 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1895 enum unwind_info_type |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1896 default_debug_unwind_info (void) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1897 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1898 /* If the target wants to force the use of dwarf2 unwind info, let it. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1899 /* ??? Change all users to the hook, then poison this. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1900 #ifdef DWARF2_FRAME_INFO |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1901 if (DWARF2_FRAME_INFO) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1902 return UI_DWARF2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1903 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1904 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1905 /* Otherwise, only turn it on if dwarf2 debugging is enabled. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1906 #ifdef DWARF2_DEBUGGING_INFO |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1907 if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1908 return UI_DWARF2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1909 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1910 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1911 return UI_NONE; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1912 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1913 |
131 | 1914 /* Targets that set NUM_POLY_INT_COEFFS to something greater than 1 |
1915 must define this hook. */ | |
1916 | |
1917 unsigned int | |
1918 default_dwarf_poly_indeterminate_value (unsigned int, unsigned int *, int *) | |
1919 { | |
1920 gcc_unreachable (); | |
1921 } | |
1922 | |
111 | 1923 /* Determine the correct mode for a Dwarf frame register that represents |
1924 register REGNO. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1925 |
111 | 1926 machine_mode |
1927 default_dwarf_frame_reg_mode (int regno) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1928 { |
111 | 1929 machine_mode save_mode = reg_raw_mode[regno]; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1930 |
111 | 1931 if (targetm.hard_regno_call_part_clobbered (regno, save_mode)) |
1932 save_mode = choose_hard_reg_mode (regno, 1, true); | |
1933 return save_mode; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1934 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1935 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1936 /* To be used by targets where reg_raw_mode doesn't return the right |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1937 mode for registers used in apply_builtin_return and apply_builtin_arg. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1938 |
131 | 1939 fixed_size_mode |
111 | 1940 default_get_reg_raw_mode (int regno) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1941 { |
131 | 1942 /* Targets must override this hook if the underlying register is |
1943 variable-sized. */ | |
1944 return as_a <fixed_size_mode> (reg_raw_mode[regno]); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1945 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1946 |
111 | 1947 /* Return true if a leaf function should stay leaf even with profiling |
1948 enabled. */ | |
1949 | |
1950 bool | |
1951 default_keep_leaf_when_profiled () | |
1952 { | |
1953 return false; | |
1954 } | |
1955 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1956 /* Return true if the state of option OPTION should be stored in PCH files |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1957 and checked by default_pch_valid_p. Store the option's current state |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1958 in STATE if so. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1959 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1960 static inline bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1961 option_affects_pch_p (int option, struct cl_option_state *state) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1962 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1963 if ((cl_options[option].flags & CL_TARGET) == 0) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1964 return false; |
111 | 1965 if ((cl_options[option].flags & CL_PCH_IGNORE) != 0) |
1966 return false; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1967 if (option_flag_var (option, &global_options) == &target_flags) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1968 if (targetm.check_pch_target_flags) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1969 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1970 return get_option_state (&global_options, option, state); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1971 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1972 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1973 /* Default version of get_pch_validity. |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1974 By default, every flag difference is fatal; that will be mostly right for |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1975 most targets, but completely right for very few. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1976 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1977 void * |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1978 default_get_pch_validity (size_t *sz) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1979 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1980 struct cl_option_state state; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1981 size_t i; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1982 char *result, *r; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1983 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1984 *sz = 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1985 if (targetm.check_pch_target_flags) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1986 *sz += sizeof (target_flags); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1987 for (i = 0; i < cl_options_count; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1988 if (option_affects_pch_p (i, &state)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1989 *sz += state.size; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1990 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1991 result = r = XNEWVEC (char, *sz); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1992 r[0] = flag_pic; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1993 r[1] = flag_pie; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1994 r += 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1995 if (targetm.check_pch_target_flags) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1996 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1997 memcpy (r, &target_flags, sizeof (target_flags)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1998 r += sizeof (target_flags); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1999 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2000 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2001 for (i = 0; i < cl_options_count; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2002 if (option_affects_pch_p (i, &state)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2003 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2004 memcpy (r, state.data, state.size); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2005 r += state.size; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2006 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2007 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2008 return result; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2009 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2010 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2011 /* Return a message which says that a PCH file was created with a different |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2012 setting of OPTION. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2013 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2014 static const char * |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2015 pch_option_mismatch (const char *option) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2016 { |
111 | 2017 return xasprintf (_("created and used with differing settings of '%s'"), |
2018 option); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2019 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2020 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2021 /* Default version of pch_valid_p. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2022 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2023 const char * |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2024 default_pch_valid_p (const void *data_p, size_t len) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2025 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2026 struct cl_option_state state; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2027 const char *data = (const char *)data_p; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2028 size_t i; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2029 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2030 /* -fpic and -fpie also usually make a PCH invalid. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2031 if (data[0] != flag_pic) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2032 return _("created and used with different settings of -fpic"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2033 if (data[1] != flag_pie) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2034 return _("created and used with different settings of -fpie"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2035 data += 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2036 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2037 /* Check target_flags. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2038 if (targetm.check_pch_target_flags) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2039 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2040 int tf; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2041 const char *r; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2042 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2043 memcpy (&tf, data, sizeof (target_flags)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2044 data += sizeof (target_flags); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2045 len -= sizeof (target_flags); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2046 r = targetm.check_pch_target_flags (tf); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2047 if (r != NULL) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2048 return r; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2049 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2050 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2051 for (i = 0; i < cl_options_count; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2052 if (option_affects_pch_p (i, &state)) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2053 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2054 if (memcmp (data, state.data, state.size) != 0) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2055 return pch_option_mismatch (cl_options[i].opt_text); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2056 data += state.size; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2057 len -= state.size; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2058 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2059 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2060 return NULL; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2061 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2062 |
111 | 2063 /* Default version of cstore_mode. */ |
2064 | |
2065 scalar_int_mode | |
2066 default_cstore_mode (enum insn_code icode) | |
2067 { | |
2068 return as_a <scalar_int_mode> (insn_data[(int) icode].operand[0].mode); | |
2069 } | |
2070 | |
2071 /* Default version of member_type_forces_blk. */ | |
2072 | |
2073 bool | |
2074 default_member_type_forces_blk (const_tree, machine_mode) | |
2075 { | |
2076 return false; | |
2077 } | |
2078 | |
2079 rtx | |
2080 default_load_bounds_for_arg (rtx addr ATTRIBUTE_UNUSED, | |
2081 rtx ptr ATTRIBUTE_UNUSED, | |
2082 rtx bnd ATTRIBUTE_UNUSED) | |
2083 { | |
2084 gcc_unreachable (); | |
2085 } | |
2086 | |
2087 void | |
2088 default_store_bounds_for_arg (rtx val ATTRIBUTE_UNUSED, | |
2089 rtx addr ATTRIBUTE_UNUSED, | |
2090 rtx bounds ATTRIBUTE_UNUSED, | |
2091 rtx to ATTRIBUTE_UNUSED) | |
2092 { | |
2093 gcc_unreachable (); | |
2094 } | |
2095 | |
2096 rtx | |
2097 default_load_returned_bounds (rtx slot ATTRIBUTE_UNUSED) | |
2098 { | |
2099 gcc_unreachable (); | |
2100 } | |
2101 | |
2102 void | |
2103 default_store_returned_bounds (rtx slot ATTRIBUTE_UNUSED, | |
2104 rtx bounds ATTRIBUTE_UNUSED) | |
2105 { | |
2106 gcc_unreachable (); | |
2107 } | |
2108 | |
2109 /* Default version of canonicalize_comparison. */ | |
2110 | |
2111 void | |
2112 default_canonicalize_comparison (int *, rtx *, rtx *, bool) | |
2113 { | |
2114 } | |
2115 | |
2116 /* Default implementation of TARGET_ATOMIC_ASSIGN_EXPAND_FENV. */ | |
2117 | |
2118 void | |
2119 default_atomic_assign_expand_fenv (tree *, tree *, tree *) | |
2120 { | |
2121 } | |
2122 | |
2123 #ifndef PAD_VARARGS_DOWN | |
2124 #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN | |
2125 #endif | |
2126 | |
2127 /* Build an indirect-ref expression over the given TREE, which represents a | |
2128 piece of a va_arg() expansion. */ | |
2129 tree | |
2130 build_va_arg_indirect_ref (tree addr) | |
2131 { | |
2132 addr = build_simple_mem_ref_loc (EXPR_LOCATION (addr), addr); | |
2133 return addr; | |
2134 } | |
2135 | |
2136 /* The "standard" implementation of va_arg: read the value from the | |
2137 current (padded) address and increment by the (padded) size. */ | |
2138 | |
2139 tree | |
2140 std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, | |
2141 gimple_seq *post_p) | |
2142 { | |
2143 tree addr, t, type_size, rounded_size, valist_tmp; | |
2144 unsigned HOST_WIDE_INT align, boundary; | |
2145 bool indirect; | |
2146 | |
2147 /* All of the alignment and movement below is for args-grow-up machines. | |
2148 As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all | |
2149 implement their own specialized gimplify_va_arg_expr routines. */ | |
2150 if (ARGS_GROW_DOWNWARD) | |
2151 gcc_unreachable (); | |
2152 | |
2153 indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false); | |
2154 if (indirect) | |
2155 type = build_pointer_type (type); | |
2156 | |
131 | 2157 if (targetm.calls.split_complex_arg |
2158 && TREE_CODE (type) == COMPLEX_TYPE | |
2159 && targetm.calls.split_complex_arg (type)) | |
2160 { | |
2161 tree real_part, imag_part; | |
2162 | |
2163 real_part = std_gimplify_va_arg_expr (valist, | |
2164 TREE_TYPE (type), pre_p, NULL); | |
2165 real_part = get_initialized_tmp_var (real_part, pre_p, NULL); | |
2166 | |
2167 imag_part = std_gimplify_va_arg_expr (unshare_expr (valist), | |
2168 TREE_TYPE (type), pre_p, NULL); | |
2169 imag_part = get_initialized_tmp_var (imag_part, pre_p, NULL); | |
2170 | |
2171 return build2 (COMPLEX_EXPR, type, real_part, imag_part); | |
2172 } | |
2173 | |
111 | 2174 align = PARM_BOUNDARY / BITS_PER_UNIT; |
2175 boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type); | |
2176 | |
2177 /* When we align parameter on stack for caller, if the parameter | |
2178 alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be | |
2179 aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee | |
2180 here with caller. */ | |
2181 if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT) | |
2182 boundary = MAX_SUPPORTED_STACK_ALIGNMENT; | |
2183 | |
2184 boundary /= BITS_PER_UNIT; | |
2185 | |
2186 /* Hoist the valist value into a temporary for the moment. */ | |
2187 valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL); | |
2188 | |
2189 /* va_list pointer is aligned to PARM_BOUNDARY. If argument actually | |
2190 requires greater alignment, we must perform dynamic alignment. */ | |
2191 if (boundary > align | |
131 | 2192 && !TYPE_EMPTY_P (type) |
111 | 2193 && !integer_zerop (TYPE_SIZE (type))) |
2194 { | |
2195 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp, | |
2196 fold_build_pointer_plus_hwi (valist_tmp, boundary - 1)); | |
2197 gimplify_and_add (t, pre_p); | |
2198 | |
2199 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp, | |
2200 fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist), | |
2201 valist_tmp, | |
2202 build_int_cst (TREE_TYPE (valist), -boundary))); | |
2203 gimplify_and_add (t, pre_p); | |
2204 } | |
2205 else | |
2206 boundary = align; | |
2207 | |
2208 /* If the actual alignment is less than the alignment of the type, | |
2209 adjust the type accordingly so that we don't assume strict alignment | |
2210 when dereferencing the pointer. */ | |
2211 boundary *= BITS_PER_UNIT; | |
2212 if (boundary < TYPE_ALIGN (type)) | |
2213 { | |
2214 type = build_variant_type_copy (type); | |
2215 SET_TYPE_ALIGN (type, boundary); | |
2216 } | |
2217 | |
2218 /* Compute the rounded size of the type. */ | |
131 | 2219 type_size = arg_size_in_bytes (type); |
111 | 2220 rounded_size = round_up (type_size, align); |
2221 | |
2222 /* Reduce rounded_size so it's sharable with the postqueue. */ | |
2223 gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue); | |
2224 | |
2225 /* Get AP. */ | |
2226 addr = valist_tmp; | |
2227 if (PAD_VARARGS_DOWN && !integer_zerop (rounded_size)) | |
2228 { | |
2229 /* Small args are padded downward. */ | |
2230 t = fold_build2_loc (input_location, GT_EXPR, sizetype, | |
2231 rounded_size, size_int (align)); | |
2232 t = fold_build3 (COND_EXPR, sizetype, t, size_zero_node, | |
2233 size_binop (MINUS_EXPR, rounded_size, type_size)); | |
2234 addr = fold_build_pointer_plus (addr, t); | |
2235 } | |
2236 | |
2237 /* Compute new value for AP. */ | |
2238 t = fold_build_pointer_plus (valist_tmp, rounded_size); | |
2239 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t); | |
2240 gimplify_and_add (t, pre_p); | |
2241 | |
2242 addr = fold_convert (build_pointer_type (type), addr); | |
2243 | |
2244 if (indirect) | |
2245 addr = build_va_arg_indirect_ref (addr); | |
2246 | |
2247 return build_va_arg_indirect_ref (addr); | |
2248 } | |
2249 | |
2250 void | |
2251 default_setup_incoming_vararg_bounds (cumulative_args_t ca ATTRIBUTE_UNUSED, | |
2252 machine_mode mode ATTRIBUTE_UNUSED, | |
2253 tree type ATTRIBUTE_UNUSED, | |
2254 int *pretend_arg_size ATTRIBUTE_UNUSED, | |
2255 int second_time ATTRIBUTE_UNUSED) | |
2256 { | |
2257 } | |
2258 | |
2259 /* An implementation of TARGET_CAN_USE_DOLOOP_P for targets that do | |
2260 not support nested low-overhead loops. */ | |
2261 | |
2262 bool | |
2263 can_use_doloop_if_innermost (const widest_int &, const widest_int &, | |
2264 unsigned int loop_depth, bool) | |
2265 { | |
2266 return loop_depth == 1; | |
2267 } | |
2268 | |
2269 /* Default implementation of TARGET_OPTAB_SUPPORTED_P. */ | |
2270 | |
2271 bool | |
2272 default_optab_supported_p (int, machine_mode, machine_mode, optimization_type) | |
2273 { | |
2274 return true; | |
2275 } | |
2276 | |
2277 /* Default implementation of TARGET_MAX_NOCE_IFCVT_SEQ_COST. */ | |
2278 | |
2279 unsigned int | |
2280 default_max_noce_ifcvt_seq_cost (edge e) | |
2281 { | |
2282 bool predictable_p = predictable_edge_p (e); | |
2283 | |
2284 enum compiler_param param | |
2285 = (predictable_p | |
2286 ? PARAM_MAX_RTL_IF_CONVERSION_PREDICTABLE_COST | |
2287 : PARAM_MAX_RTL_IF_CONVERSION_UNPREDICTABLE_COST); | |
2288 | |
2289 /* If we have a parameter set, use that, otherwise take a guess using | |
2290 BRANCH_COST. */ | |
2291 if (global_options_set.x_param_values[param]) | |
2292 return PARAM_VALUE (param); | |
2293 else | |
2294 return BRANCH_COST (true, predictable_p) * COSTS_N_INSNS (3); | |
2295 } | |
2296 | |
2297 /* Default implementation of TARGET_MIN_ARITHMETIC_PRECISION. */ | |
2298 | |
2299 unsigned int | |
2300 default_min_arithmetic_precision (void) | |
2301 { | |
2302 return WORD_REGISTER_OPERATIONS ? BITS_PER_WORD : BITS_PER_UNIT; | |
2303 } | |
2304 | |
2305 /* Default implementation of TARGET_C_EXCESS_PRECISION. */ | |
2306 | |
2307 enum flt_eval_method | |
2308 default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED) | |
2309 { | |
2310 return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; | |
2311 } | |
2312 | |
131 | 2313 /* Default implementation for |
2314 TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE. */ | |
2315 HOST_WIDE_INT | |
2316 default_stack_clash_protection_alloca_probe_range (void) | |
111 | 2317 { |
2318 return 0; | |
2319 } | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2320 |
131 | 2321 /* The default implementation of TARGET_EARLY_REMAT_MODES. */ |
2322 | |
2323 void | |
2324 default_select_early_remat_modes (sbitmap) | |
2325 { | |
2326 } | |
2327 | |
2328 /* The default implementation of TARGET_PREFERRED_ELSE_VALUE. */ | |
2329 | |
2330 tree | |
2331 default_preferred_else_value (unsigned, tree type, unsigned, tree *) | |
2332 { | |
2333 return build_zero_cst (type); | |
2334 } | |
2335 | |
2336 /* Default implementation of TARGET_HAVE_SPECULATION_SAFE_VALUE. */ | |
2337 bool | |
2338 default_have_speculation_safe_value (bool active ATTRIBUTE_UNUSED) | |
2339 { | |
2340 #ifdef HAVE_speculation_barrier | |
2341 return active ? HAVE_speculation_barrier : true; | |
2342 #else | |
2343 return false; | |
2344 #endif | |
2345 } | |
2346 /* Alternative implementation of TARGET_HAVE_SPECULATION_SAFE_VALUE | |
2347 that can be used on targets that never have speculative execution. */ | |
2348 bool | |
2349 speculation_safe_value_not_needed (bool active) | |
2350 { | |
2351 return !active; | |
2352 } | |
2353 | |
2354 /* Default implementation of the speculation-safe-load builtin. This | |
2355 implementation simply copies val to result and generates a | |
2356 speculation_barrier insn, if such a pattern is defined. */ | |
2357 rtx | |
2358 default_speculation_safe_value (machine_mode mode ATTRIBUTE_UNUSED, | |
2359 rtx result, rtx val, | |
2360 rtx failval ATTRIBUTE_UNUSED) | |
2361 { | |
2362 emit_move_insn (result, val); | |
2363 | |
2364 #ifdef HAVE_speculation_barrier | |
2365 /* Assume the target knows what it is doing: if it defines a | |
2366 speculation barrier, but it is not enabled, then assume that one | |
2367 isn't needed. */ | |
2368 if (HAVE_speculation_barrier) | |
2369 emit_insn (gen_speculation_barrier ()); | |
2370 #endif | |
2371 | |
2372 return result; | |
2373 } | |
2374 | |
0 | 2375 #include "gt-targhooks.h" |