Mercurial > hg > CbC > CbC_gcc
annotate gcc/targhooks.c @ 118:fd00160c1b76
ifdef TARGET_64BIT
author | mir3636 |
---|---|
date | Tue, 27 Feb 2018 15:01:35 +0900 |
parents | 04ced10e8804 |
children | 84e7813d76e9 |
rev | line source |
---|---|
0 | 1 /* Default target hook functions. |
111 | 2 Copyright (C) 2003-2017 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" | |
0 | 84 |
85 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
86 bool |
111 | 87 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
|
88 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
|
89 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
|
90 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 #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
|
92 /* 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
|
93 if (strict) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
94 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
|
95 else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
96 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
|
97 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
98 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
99 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
100 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
101 |
0 | 102 void |
103 default_external_libcall (rtx fun ATTRIBUTE_UNUSED) | |
104 { | |
105 #ifdef ASM_OUTPUT_EXTERNAL_LIBCALL | |
111 | 106 ASM_OUTPUT_EXTERNAL_LIBCALL (asm_out_file, fun); |
0 | 107 #endif |
108 } | |
109 | |
110 int | |
111 default_unspec_may_trap_p (const_rtx x, unsigned flags) | |
112 { | |
113 int i; | |
114 | |
111 | 115 /* Any floating arithmetic may trap. */ |
116 if ((SCALAR_FLOAT_MODE_P (GET_MODE (x)) && flag_trapping_math)) | |
0 | 117 return 1; |
118 | |
119 for (i = 0; i < XVECLEN (x, 0); ++i) | |
120 { | |
121 if (may_trap_p_1 (XVECEXP (x, 0, i), flags)) | |
122 return 1; | |
123 } | |
124 | |
125 return 0; | |
126 } | |
127 | |
111 | 128 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
|
129 default_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, |
111 | 130 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
|
131 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
|
132 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
|
133 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
|
134 { |
111 | 135 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
|
136 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
|
137 return mode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
138 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
139 |
111 | 140 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
|
141 default_promote_function_mode_always_promote (const_tree type, |
111 | 142 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
|
143 int *punsignedp, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
144 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
|
145 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
|
146 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
147 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
|
148 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
149 |
111 | 150 machine_mode |
151 default_cc_modes_compatible (machine_mode m1, machine_mode m2) | |
0 | 152 { |
153 if (m1 == m2) | |
154 return m1; | |
155 return VOIDmode; | |
156 } | |
157 | |
158 bool | |
159 default_return_in_memory (const_tree type, | |
160 const_tree fntype ATTRIBUTE_UNUSED) | |
161 { | |
162 return (TYPE_MODE (type) == BLKmode); | |
163 } | |
164 | |
165 rtx | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
166 default_legitimize_address (rtx x, rtx orig_x ATTRIBUTE_UNUSED, |
111 | 167 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
|
168 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
169 return x; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
170 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
171 |
111 | 172 bool |
173 default_legitimize_address_displacement (rtx *disp ATTRIBUTE_UNUSED, | |
174 rtx *offset ATTRIBUTE_UNUSED, | |
175 machine_mode mode ATTRIBUTE_UNUSED) | |
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 |
0 | 396 /* True if MODE is valid for the target. By "valid", we mean able to |
397 be manipulated in non-trivial ways. In particular, this means all | |
398 the arithmetic is supported. | |
399 | |
400 By default we guess this means that any C type is supported. If | |
401 we can't map the mode back to a type that would be available in C, | |
402 then reject it. Special case, here, is the double-word arithmetic | |
403 supported by optabs.c. */ | |
404 | |
405 bool | |
111 | 406 default_scalar_mode_supported_p (scalar_mode mode) |
0 | 407 { |
408 int precision = GET_MODE_PRECISION (mode); | |
409 | |
410 switch (GET_MODE_CLASS (mode)) | |
411 { | |
412 case MODE_PARTIAL_INT: | |
413 case MODE_INT: | |
414 if (precision == CHAR_TYPE_SIZE) | |
415 return true; | |
416 if (precision == SHORT_TYPE_SIZE) | |
417 return true; | |
418 if (precision == INT_TYPE_SIZE) | |
419 return true; | |
420 if (precision == LONG_TYPE_SIZE) | |
421 return true; | |
422 if (precision == LONG_LONG_TYPE_SIZE) | |
423 return true; | |
424 if (precision == 2 * BITS_PER_WORD) | |
425 return true; | |
426 return false; | |
427 | |
428 case MODE_FLOAT: | |
429 if (precision == FLOAT_TYPE_SIZE) | |
430 return true; | |
431 if (precision == DOUBLE_TYPE_SIZE) | |
432 return true; | |
433 if (precision == LONG_DOUBLE_TYPE_SIZE) | |
434 return true; | |
435 return false; | |
436 | |
437 case MODE_DECIMAL_FLOAT: | |
438 case MODE_FRACT: | |
439 case MODE_UFRACT: | |
440 case MODE_ACCUM: | |
441 case MODE_UACCUM: | |
442 return false; | |
443 | |
444 default: | |
445 gcc_unreachable (); | |
446 } | |
447 } | |
448 | |
111 | 449 /* Return true if libgcc supports floating-point mode MODE (known to |
450 be supported as a scalar mode). */ | |
451 | |
452 bool | |
453 default_libgcc_floating_mode_supported_p (scalar_float_mode mode) | |
454 { | |
455 switch (mode) | |
456 { | |
457 #ifdef HAVE_SFmode | |
458 case E_SFmode: | |
459 #endif | |
460 #ifdef HAVE_DFmode | |
461 case E_DFmode: | |
462 #endif | |
463 #ifdef HAVE_XFmode | |
464 case E_XFmode: | |
465 #endif | |
466 #ifdef HAVE_TFmode | |
467 case E_TFmode: | |
468 #endif | |
469 return true; | |
470 | |
471 default: | |
472 return false; | |
473 } | |
474 } | |
475 | |
476 /* Return the machine mode to use for the type _FloatN, if EXTENDED is | |
477 false, or _FloatNx, if EXTENDED is true, or VOIDmode if not | |
478 supported. */ | |
479 opt_scalar_float_mode | |
480 default_floatn_mode (int n, bool extended) | |
481 { | |
482 if (extended) | |
483 { | |
484 opt_scalar_float_mode cand1, cand2; | |
485 scalar_float_mode mode; | |
486 switch (n) | |
487 { | |
488 case 32: | |
489 #ifdef HAVE_DFmode | |
490 cand1 = DFmode; | |
491 #endif | |
492 break; | |
493 | |
494 case 64: | |
495 #ifdef HAVE_XFmode | |
496 cand1 = XFmode; | |
497 #endif | |
498 #ifdef HAVE_TFmode | |
499 cand2 = TFmode; | |
500 #endif | |
501 break; | |
502 | |
503 case 128: | |
504 break; | |
505 | |
506 default: | |
507 /* Those are the only valid _FloatNx types. */ | |
508 gcc_unreachable (); | |
509 } | |
510 if (cand1.exists (&mode) | |
511 && REAL_MODE_FORMAT (mode)->ieee_bits > n | |
512 && targetm.scalar_mode_supported_p (mode) | |
513 && targetm.libgcc_floating_mode_supported_p (mode)) | |
514 return cand1; | |
515 if (cand2.exists (&mode) | |
516 && REAL_MODE_FORMAT (mode)->ieee_bits > n | |
517 && targetm.scalar_mode_supported_p (mode) | |
518 && targetm.libgcc_floating_mode_supported_p (mode)) | |
519 return cand2; | |
520 } | |
521 else | |
522 { | |
523 opt_scalar_float_mode cand; | |
524 scalar_float_mode mode; | |
525 switch (n) | |
526 { | |
527 case 16: | |
528 /* Always enable _Float16 if we have basic support for the mode. | |
529 Targets can control the range and precision of operations on | |
530 the _Float16 type using TARGET_C_EXCESS_PRECISION. */ | |
531 #ifdef HAVE_HFmode | |
532 cand = HFmode; | |
533 #endif | |
534 break; | |
535 | |
536 case 32: | |
537 #ifdef HAVE_SFmode | |
538 cand = SFmode; | |
539 #endif | |
540 break; | |
541 | |
542 case 64: | |
543 #ifdef HAVE_DFmode | |
544 cand = DFmode; | |
545 #endif | |
546 break; | |
547 | |
548 case 128: | |
549 #ifdef HAVE_TFmode | |
550 cand = TFmode; | |
551 #endif | |
552 break; | |
553 | |
554 default: | |
555 break; | |
556 } | |
557 if (cand.exists (&mode) | |
558 && REAL_MODE_FORMAT (mode)->ieee_bits == n | |
559 && targetm.scalar_mode_supported_p (mode) | |
560 && targetm.libgcc_floating_mode_supported_p (mode)) | |
561 return cand; | |
562 } | |
563 return opt_scalar_float_mode (); | |
564 } | |
565 | |
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
|
566 /* 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
|
567 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
|
568 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
|
569 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
570 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
|
571 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
572 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
573 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
|
574 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
|
575 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
576 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
|
577 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
578 |
111 | 579 /* True if the target supports floating-point exceptions and rounding |
580 modes. */ | |
581 | |
582 bool | |
583 default_float_exceptions_rounding_supported_p (void) | |
584 { | |
585 #ifdef HAVE_adddf3 | |
586 return HAVE_adddf3; | |
587 #else | |
588 return false; | |
589 #endif | |
590 } | |
591 | |
0 | 592 /* True if the target supports decimal floating point. */ |
593 | |
594 bool | |
595 default_decimal_float_supported_p (void) | |
596 { | |
597 return ENABLE_DECIMAL_FLOAT; | |
598 } | |
599 | |
600 /* True if the target supports fixed-point arithmetic. */ | |
601 | |
602 bool | |
603 default_fixed_point_supported_p (void) | |
604 { | |
605 return ENABLE_FIXED_POINT; | |
606 } | |
607 | |
111 | 608 /* True if the target supports GNU indirect functions. */ |
609 | |
610 bool | |
611 default_has_ifunc_p (void) | |
612 { | |
613 return HAVE_GNU_INDIRECT_FUNCTION; | |
614 } | |
615 | |
0 | 616 /* NULL if INSN insn is valid within a low-overhead loop, otherwise returns |
617 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
|
618 |
0 | 619 This function checks whether a given INSN is valid within a low-overhead |
620 loop. If INSN is invalid it returns the reason for that, otherwise it | |
621 returns NULL. A called function may clobber any special registers required | |
622 for low-overhead looping. Additionally, some targets (eg, PPC) use the count | |
623 register for branch on table instructions. We reject the doloop pattern in | |
624 these cases. */ | |
625 | |
626 const char * | |
111 | 627 default_invalid_within_doloop (const rtx_insn *insn) |
0 | 628 { |
629 if (CALL_P (insn)) | |
630 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
|
631 |
111 | 632 if (tablejump_p (insn, NULL, NULL) || computed_jump_p (insn)) |
0 | 633 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
|
634 |
0 | 635 return NULL; |
636 } | |
637 | |
638 /* Mapping of builtin functions to vectorized variants. */ | |
639 | |
640 tree | |
111 | 641 default_builtin_vectorized_function (unsigned int, tree, tree) |
642 { | |
643 return NULL_TREE; | |
644 } | |
645 | |
646 /* Mapping of target builtin functions to vectorized variants. */ | |
647 | |
648 tree | |
649 default_builtin_md_vectorized_function (tree, tree, tree) | |
0 | 650 { |
651 return NULL_TREE; | |
652 } | |
653 | |
654 /* Vectorized conversion. */ | |
655 | |
656 tree | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
657 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
|
658 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
|
659 tree src_type ATTRIBUTE_UNUSED) |
0 | 660 { |
661 return NULL_TREE; | |
662 } | |
663 | |
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
|
664 /* 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
|
665 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
666 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
|
667 default_builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost, |
111 | 668 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
|
669 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
|
670 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
671 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
|
672 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
673 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
|
674 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
|
675 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
|
676 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
|
677 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
|
678 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
|
679 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
|
680 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
|
681 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
|
682 case vec_perm: |
111 | 683 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
|
684 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
|
685 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
686 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
|
687 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
|
688 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
|
689 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
690 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
|
691 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
|
692 |
111 | 693 case vec_construct: |
694 return TYPE_VECTOR_SUBPARTS (vectype) - 1; | |
695 | |
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
|
696 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
|
697 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
|
698 } |
f6334be47118
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 } |
f6334be47118
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 |
0 | 701 /* Reciprocal. */ |
702 | |
703 tree | |
111 | 704 default_builtin_reciprocal (tree) |
0 | 705 { |
706 return NULL_TREE; | |
707 } | |
708 | |
709 bool | |
710 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false ( | |
111 | 711 cumulative_args_t ca ATTRIBUTE_UNUSED, |
712 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 713 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
714 { | |
715 return false; | |
716 } | |
717 | |
718 bool | |
719 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true ( | |
111 | 720 cumulative_args_t ca ATTRIBUTE_UNUSED, |
721 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 722 const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
723 { | |
724 return true; | |
725 } | |
726 | |
727 int | |
728 hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 ( | |
111 | 729 cumulative_args_t ca ATTRIBUTE_UNUSED, |
730 machine_mode mode ATTRIBUTE_UNUSED, | |
0 | 731 tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) |
732 { | |
733 return 0; | |
734 } | |
735 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
736 void |
111 | 737 default_function_arg_advance (cumulative_args_t ca ATTRIBUTE_UNUSED, |
738 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
|
739 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
|
740 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
|
741 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
742 gcc_unreachable (); |
111 | 743 } |
744 | |
745 /* Default implementation of TARGET_FUNCTION_ARG_OFFSET. */ | |
746 | |
747 HOST_WIDE_INT | |
748 default_function_arg_offset (machine_mode, const_tree) | |
749 { | |
750 return 0; | |
751 } | |
752 | |
753 /* Default implementation of TARGET_FUNCTION_ARG_PADDING: usually pad | |
754 upward, but pad short args downward on big-endian machines. */ | |
755 | |
756 pad_direction | |
757 default_function_arg_padding (machine_mode mode, const_tree type) | |
758 { | |
759 if (!BYTES_BIG_ENDIAN) | |
760 return PAD_UPWARD; | |
761 | |
762 unsigned HOST_WIDE_INT size; | |
763 if (mode == BLKmode) | |
764 { | |
765 if (!type || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) | |
766 return PAD_UPWARD; | |
767 size = int_size_in_bytes (type); | |
768 } | |
769 else | |
770 size = GET_MODE_SIZE (mode); | |
771 | |
772 if (size < (PARM_BOUNDARY / BITS_PER_UNIT)) | |
773 return PAD_DOWNWARD; | |
774 | |
775 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
|
776 } |
f6334be47118
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 rtx |
111 | 779 default_function_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, |
780 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
|
781 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
|
782 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
|
783 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
784 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
|
785 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
786 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
787 rtx |
111 | 788 default_function_incoming_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, |
789 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
|
790 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
|
791 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
|
792 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
793 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
|
794 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
795 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
796 unsigned int |
111 | 797 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
|
798 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
|
799 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
800 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
|
801 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
802 |
111 | 803 unsigned int |
804 default_function_arg_round_boundary (machine_mode mode ATTRIBUTE_UNUSED, | |
805 const_tree type ATTRIBUTE_UNUSED) | |
806 { | |
807 return PARM_BOUNDARY; | |
808 } | |
809 | |
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
|
810 void |
0 | 811 hook_void_bitmap (bitmap regs ATTRIBUTE_UNUSED) |
812 { | |
813 } | |
814 | |
815 const char * | |
816 hook_invalid_arg_for_unprototyped_fn ( | |
817 const_tree typelist ATTRIBUTE_UNUSED, | |
818 const_tree funcdecl ATTRIBUTE_UNUSED, | |
819 const_tree val ATTRIBUTE_UNUSED) | |
820 { | |
821 return NULL; | |
822 } | |
823 | |
824 /* Initialize the stack protection decls. */ | |
825 | |
826 /* Stack protection related decls living in libgcc. */ | |
827 static GTY(()) tree stack_chk_guard_decl; | |
828 | |
829 tree | |
830 default_stack_protect_guard (void) | |
831 { | |
832 tree t = stack_chk_guard_decl; | |
833 | |
834 if (t == NULL) | |
835 { | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
836 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
|
837 |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
838 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
|
839 VAR_DECL, get_identifier ("__stack_chk_guard"), |
0 | 840 ptr_type_node); |
841 TREE_STATIC (t) = 1; | |
842 TREE_PUBLIC (t) = 1; | |
843 DECL_EXTERNAL (t) = 1; | |
844 TREE_USED (t) = 1; | |
845 TREE_THIS_VOLATILE (t) = 1; | |
846 DECL_ARTIFICIAL (t) = 1; | |
847 DECL_IGNORED_P (t) = 1; | |
848 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
849 /* 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
|
850 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
|
851 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
|
852 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
|
853 |
0 | 854 stack_chk_guard_decl = t; |
855 } | |
856 | |
857 return t; | |
858 } | |
859 | |
860 static GTY(()) tree stack_chk_fail_decl; | |
861 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
862 tree |
0 | 863 default_external_stack_protect_fail (void) |
864 { | |
865 tree t = stack_chk_fail_decl; | |
866 | |
867 if (t == NULL_TREE) | |
868 { | |
869 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
|
870 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
|
871 FUNCTION_DECL, get_identifier ("__stack_chk_fail"), t); |
0 | 872 TREE_STATIC (t) = 1; |
873 TREE_PUBLIC (t) = 1; | |
874 DECL_EXTERNAL (t) = 1; | |
875 TREE_USED (t) = 1; | |
876 TREE_THIS_VOLATILE (t) = 1; | |
877 TREE_NOTHROW (t) = 1; | |
878 DECL_ARTIFICIAL (t) = 1; | |
879 DECL_IGNORED_P (t) = 1; | |
880 DECL_VISIBILITY (t) = VISIBILITY_DEFAULT; | |
881 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
882 | |
883 stack_chk_fail_decl = t; | |
884 } | |
885 | |
886 return build_call_expr (t, 0); | |
887 } | |
888 | |
889 tree | |
890 default_hidden_stack_protect_fail (void) | |
891 { | |
892 #ifndef HAVE_GAS_HIDDEN | |
893 return default_external_stack_protect_fail (); | |
894 #else | |
895 tree t = stack_chk_fail_decl; | |
896 | |
897 if (!flag_pic) | |
898 return default_external_stack_protect_fail (); | |
899 | |
900 if (t == NULL_TREE) | |
901 { | |
902 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
|
903 t = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL, |
0 | 904 get_identifier ("__stack_chk_fail_local"), t); |
905 TREE_STATIC (t) = 1; | |
906 TREE_PUBLIC (t) = 1; | |
907 DECL_EXTERNAL (t) = 1; | |
908 TREE_USED (t) = 1; | |
909 TREE_THIS_VOLATILE (t) = 1; | |
910 TREE_NOTHROW (t) = 1; | |
911 DECL_ARTIFICIAL (t) = 1; | |
912 DECL_IGNORED_P (t) = 1; | |
913 DECL_VISIBILITY_SPECIFIED (t) = 1; | |
914 DECL_VISIBILITY (t) = VISIBILITY_HIDDEN; | |
915 | |
916 stack_chk_fail_decl = t; | |
917 } | |
918 | |
919 return build_call_expr (t, 0); | |
920 #endif | |
921 } | |
922 | |
923 bool | |
924 hook_bool_const_rtx_commutative_p (const_rtx x, | |
925 int outer_code ATTRIBUTE_UNUSED) | |
926 { | |
927 return COMMUTATIVE_P (x); | |
928 } | |
929 | |
930 rtx | |
931 default_function_value (const_tree ret_type ATTRIBUTE_UNUSED, | |
932 const_tree fn_decl_or_type, | |
933 bool outgoing ATTRIBUTE_UNUSED) | |
934 { | |
935 /* The old interface doesn't handle receiving the function type. */ | |
936 if (fn_decl_or_type | |
937 && !DECL_P (fn_decl_or_type)) | |
938 fn_decl_or_type = NULL; | |
939 | |
940 #ifdef FUNCTION_VALUE | |
941 return FUNCTION_VALUE (ret_type, fn_decl_or_type); | |
942 #else | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
943 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
944 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
945 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
946 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
947 rtx |
111 | 948 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
|
949 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
|
950 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
951 #ifdef LIBCALL_VALUE |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
952 return LIBCALL_VALUE (mode); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
953 #else |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
954 gcc_unreachable (); |
0 | 955 #endif |
956 } | |
957 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
958 /* 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
|
959 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
960 bool |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
961 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
|
962 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
963 #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
|
964 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
|
965 #else |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
966 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
|
967 #endif |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
968 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
969 |
0 | 970 rtx |
971 default_internal_arg_pointer (void) | |
972 { | |
973 /* If the reg that the virtual arg pointer will be translated into is | |
974 not a fixed reg or is the stack pointer, make a copy of the virtual | |
975 arg pointer, and address parms via the copy. The frame pointer is | |
976 considered fixed even though it is not marked as such. */ | |
977 if ((ARG_POINTER_REGNUM == STACK_POINTER_REGNUM | |
978 || ! (fixed_regs[ARG_POINTER_REGNUM] | |
979 || ARG_POINTER_REGNUM == FRAME_POINTER_REGNUM))) | |
980 return copy_to_reg (virtual_incoming_args_rtx); | |
981 else | |
982 return virtual_incoming_args_rtx; | |
983 } | |
984 | |
55
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_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
|
987 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
988 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
|
989 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
990 #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
|
991 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
|
992 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
993 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
994 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
995 #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
|
996 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
|
997 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
998 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
999 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1000 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
|
1001 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
|
1002 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1003 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
|
1004 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
|
1005 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1006 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1007 /* 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
|
1008 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
|
1009 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
|
1010 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1011 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1012 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1013 void |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1014 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
|
1015 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
|
1016 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1017 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
|
1018 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1019 |
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
|
1020 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
|
1021 default_return_pops_args (tree fundecl 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
|
1022 tree funtype 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
|
1023 int size 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
|
1024 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1025 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
|
1026 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1027 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1028 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
|
1029 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
|
1030 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1031 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
|
1032 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1033 |
111 | 1034 reg_class_t |
1035 default_ira_change_pseudo_allocno_class (int regno ATTRIBUTE_UNUSED, | |
1036 reg_class_t cl, | |
1037 reg_class_t best_cl ATTRIBUTE_UNUSED) | |
1038 { | |
1039 return cl; | |
1040 } | |
1041 | |
1042 extern bool | |
1043 default_lra_p (void) | |
0 | 1044 { |
111 | 1045 return true; |
1046 } | |
1047 | |
1048 int | |
1049 default_register_priority (int hard_regno ATTRIBUTE_UNUSED) | |
1050 { | |
1051 return 0; | |
0 | 1052 } |
111 | 1053 |
1054 extern bool | |
1055 default_register_usage_leveling_p (void) | |
1056 { | |
1057 return false; | |
1058 } | |
1059 | |
1060 extern bool | |
1061 default_different_addr_displacement_p (void) | |
1062 { | |
1063 return false; | |
1064 } | |
0 | 1065 |
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
|
1066 reg_class_t |
0 | 1067 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
|
1068 reg_class_t reload_class_i ATTRIBUTE_UNUSED, |
111 | 1069 machine_mode reload_mode ATTRIBUTE_UNUSED, |
0 | 1070 secondary_reload_info *sri) |
1071 { | |
1072 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
|
1073 enum reg_class reload_class = (enum reg_class) reload_class_i; |
0 | 1074 |
1075 if (sri->prev_sri && sri->prev_sri->t_icode != CODE_FOR_nothing) | |
1076 { | |
1077 sri->icode = sri->prev_sri->t_icode; | |
1078 return NO_REGS; | |
1079 } | |
1080 #ifdef SECONDARY_INPUT_RELOAD_CLASS | |
1081 if (in_p) | |
1082 rclass = SECONDARY_INPUT_RELOAD_CLASS (reload_class, reload_mode, x); | |
1083 #endif | |
1084 #ifdef SECONDARY_OUTPUT_RELOAD_CLASS | |
1085 if (! in_p) | |
1086 rclass = SECONDARY_OUTPUT_RELOAD_CLASS (reload_class, reload_mode, x); | |
1087 #endif | |
1088 if (rclass != NO_REGS) | |
1089 { | |
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
|
1090 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
|
1091 = 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
|
1092 reload_mode); |
0 | 1093 |
1094 if (icode != CODE_FOR_nothing | |
111 | 1095 && !insn_operand_matches (icode, in_p, x)) |
0 | 1096 icode = CODE_FOR_nothing; |
1097 else if (icode != CODE_FOR_nothing) | |
1098 { | |
1099 const char *insn_constraint, *scratch_constraint; | |
1100 enum reg_class insn_class, scratch_class; | |
1101 | |
1102 gcc_assert (insn_data[(int) icode].n_operands == 3); | |
1103 insn_constraint = insn_data[(int) icode].operand[!in_p].constraint; | |
1104 if (!*insn_constraint) | |
1105 insn_class = ALL_REGS; | |
1106 else | |
1107 { | |
1108 if (in_p) | |
1109 { | |
1110 gcc_assert (*insn_constraint == '='); | |
1111 insn_constraint++; | |
1112 } | |
111 | 1113 insn_class = (reg_class_for_constraint |
1114 (lookup_constraint (insn_constraint))); | |
0 | 1115 gcc_assert (insn_class != NO_REGS); |
1116 } | |
1117 | |
1118 scratch_constraint = insn_data[(int) icode].operand[2].constraint; | |
1119 /* The scratch register's constraint must start with "=&", | |
1120 except for an input reload, where only "=" is necessary, | |
1121 and where it might be beneficial to re-use registers from | |
1122 the input. */ | |
1123 gcc_assert (scratch_constraint[0] == '=' | |
1124 && (in_p || scratch_constraint[1] == '&')); | |
1125 scratch_constraint++; | |
1126 if (*scratch_constraint == '&') | |
1127 scratch_constraint++; | |
111 | 1128 scratch_class = (reg_class_for_constraint |
1129 (lookup_constraint (scratch_constraint))); | |
0 | 1130 |
1131 if (reg_class_subset_p (reload_class, insn_class)) | |
1132 { | |
1133 gcc_assert (scratch_class == rclass); | |
1134 rclass = NO_REGS; | |
1135 } | |
1136 else | |
1137 rclass = insn_class; | |
1138 | |
1139 } | |
1140 if (rclass == NO_REGS) | |
1141 sri->icode = icode; | |
1142 else | |
1143 sri->t_icode = icode; | |
1144 } | |
1145 return rclass; | |
1146 } | |
1147 | |
111 | 1148 /* The default implementation of TARGET_SECONDARY_MEMORY_NEEDED_MODE. */ |
1149 | |
1150 machine_mode | |
1151 default_secondary_memory_needed_mode (machine_mode mode) | |
0 | 1152 { |
111 | 1153 if (!targetm.lra_p () |
1154 && GET_MODE_BITSIZE (mode) < BITS_PER_WORD | |
1155 && INTEGRAL_MODE_P (mode)) | |
1156 return mode_for_size (BITS_PER_WORD, GET_MODE_CLASS (mode), 0).require (); | |
1157 return mode; | |
0 | 1158 } |
1159 | |
1160 /* By default, if flag_pic is true, then neither local nor global relocs | |
1161 should be placed in readonly memory. */ | |
1162 | |
1163 int | |
1164 default_reloc_rw_mask (void) | |
1165 { | |
1166 return flag_pic ? 3 : 0; | |
1167 } | |
1168 | |
1169 /* By default, do no modification. */ | |
1170 tree default_mangle_decl_assembler_name (tree decl ATTRIBUTE_UNUSED, | |
1171 tree id) | |
1172 { | |
1173 return id; | |
1174 } | |
1175 | |
111 | 1176 /* The default implementation of TARGET_STATIC_RTX_ALIGNMENT. */ |
1177 | |
1178 HOST_WIDE_INT | |
1179 default_static_rtx_alignment (machine_mode mode) | |
0 | 1180 { |
111 | 1181 return GET_MODE_ALIGNMENT (mode); |
1182 } | |
1183 | |
1184 /* The default implementation of TARGET_CONSTANT_ALIGNMENT. */ | |
1185 | |
1186 HOST_WIDE_INT | |
1187 default_constant_alignment (const_tree, HOST_WIDE_INT align) | |
1188 { | |
1189 return align; | |
1190 } | |
1191 | |
1192 /* An implementation of TARGET_CONSTANT_ALIGNMENT that aligns strings | |
1193 to at least BITS_PER_WORD but otherwise makes no changes. */ | |
0 | 1194 |
111 | 1195 HOST_WIDE_INT |
1196 constant_alignment_word_strings (const_tree exp, HOST_WIDE_INT align) | |
1197 { | |
1198 if (TREE_CODE (exp) == STRING_CST) | |
1199 return MAX (align, BITS_PER_WORD); | |
1200 return align; | |
1201 } | |
0 | 1202 |
111 | 1203 /* Default to natural alignment for vector types. */ |
1204 HOST_WIDE_INT | |
1205 default_vector_alignment (const_tree type) | |
1206 { | |
1207 HOST_WIDE_INT align = tree_to_shwi (TYPE_SIZE (type)); | |
1208 if (align > MAX_OFILE_ALIGNMENT) | |
1209 align = MAX_OFILE_ALIGNMENT; | |
1210 return align; | |
1211 } | |
1212 | |
1213 /* The default implementation of | |
1214 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT. */ | |
1215 | |
1216 HOST_WIDE_INT | |
1217 default_preferred_vector_alignment (const_tree type) | |
1218 { | |
1219 return TYPE_ALIGN (type); | |
1220 } | |
1221 | |
1222 /* By default assume vectors of element TYPE require a multiple of the natural | |
1223 alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */ | |
1224 bool | |
1225 default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed) | |
1226 { | |
1227 return ! is_packed; | |
0 | 1228 } |
1229 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1230 /* 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
|
1231 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
|
1232 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
|
1233 bool |
111 | 1234 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
|
1235 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
|
1236 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1237 int misalignment |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1238 ATTRIBUTE_UNUSED, |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1239 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
|
1240 ATTRIBUTE_UNUSED) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1241 { |
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
|
1242 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
|
1243 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1244 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1245 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1246 |
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
|
1247 /* 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
|
1248 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
|
1249 |
111 | 1250 machine_mode |
1251 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
|
1252 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1253 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
|
1254 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1255 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1256 /* 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
|
1257 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
|
1258 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1259 unsigned 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
|
1260 default_autovectorize_vector_sizes (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
|
1261 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1262 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
|
1263 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1264 |
111 | 1265 /* By defaults a vector of integers is used as a mask. */ |
1266 | |
1267 opt_machine_mode | |
1268 default_get_mask_mode (unsigned nunits, unsigned vector_size) | |
1269 { | |
1270 unsigned elem_size = vector_size / nunits; | |
1271 scalar_int_mode elem_mode | |
1272 = smallest_int_mode_for_size (elem_size * BITS_PER_UNIT); | |
1273 machine_mode vector_mode; | |
1274 | |
1275 gcc_assert (elem_size * nunits == vector_size); | |
1276 | |
1277 if (mode_for_vector (elem_mode, nunits).exists (&vector_mode) | |
1278 && VECTOR_MODE_P (vector_mode) | |
1279 && targetm.vector_mode_supported_p (vector_mode)) | |
1280 return vector_mode; | |
1281 | |
1282 return opt_machine_mode (); | |
1283 } | |
1284 | |
1285 /* By default, the cost model accumulates three separate costs (prologue, | |
1286 loop body, and epilogue) for a vectorized loop or block. So allocate an | |
1287 array of three unsigned ints, set it to zero, and return its address. */ | |
1288 | |
1289 void * | |
1290 default_init_cost (struct loop *loop_info ATTRIBUTE_UNUSED) | |
1291 { | |
1292 unsigned *cost = XNEWVEC (unsigned, 3); | |
1293 cost[vect_prologue] = cost[vect_body] = cost[vect_epilogue] = 0; | |
1294 return cost; | |
1295 } | |
1296 | |
1297 /* By default, the cost model looks up the cost of the given statement | |
1298 kind and mode, multiplies it by the occurrence count, accumulates | |
1299 it into the cost specified by WHERE, and returns the cost added. */ | |
1300 | |
1301 unsigned | |
1302 default_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind, | |
1303 struct _stmt_vec_info *stmt_info, int misalign, | |
1304 enum vect_cost_model_location where) | |
1305 { | |
1306 unsigned *cost = (unsigned *) data; | |
1307 unsigned retval = 0; | |
1308 | |
1309 tree vectype = stmt_info ? stmt_vectype (stmt_info) : NULL_TREE; | |
1310 int stmt_cost = targetm.vectorize.builtin_vectorization_cost (kind, vectype, | |
1311 misalign); | |
1312 /* Statements in an inner loop relative to the loop being | |
1313 vectorized are weighted more heavily. The value here is | |
1314 arbitrary and could potentially be improved with analysis. */ | |
1315 if (where == vect_body && stmt_info && stmt_in_inner_loop_p (stmt_info)) | |
1316 count *= 50; /* FIXME. */ | |
1317 | |
1318 retval = (unsigned) (count * stmt_cost); | |
1319 cost[where] += retval; | |
1320 | |
1321 return retval; | |
1322 } | |
1323 | |
1324 /* By default, the cost model just returns the accumulated costs. */ | |
1325 | |
1326 void | |
1327 default_finish_cost (void *data, unsigned *prologue_cost, | |
1328 unsigned *body_cost, unsigned *epilogue_cost) | |
1329 { | |
1330 unsigned *cost = (unsigned *) data; | |
1331 *prologue_cost = cost[vect_prologue]; | |
1332 *body_cost = cost[vect_body]; | |
1333 *epilogue_cost = cost[vect_epilogue]; | |
1334 } | |
1335 | |
1336 /* Free the cost data. */ | |
1337 | |
1338 void | |
1339 default_destroy_cost_data (void *data) | |
1340 { | |
1341 free (data); | |
1342 } | |
1343 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1344 /* 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
|
1345 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
|
1346 bool |
111 | 1347 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
|
1348 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1349 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
|
1350 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1351 |
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
|
1352 /* 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
|
1353 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
|
1354 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
|
1355 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
|
1356 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1357 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
|
1358 /* 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
|
1359 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
|
1360 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
|
1361 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
|
1362 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
|
1363 || 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
|
1364 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
|
1365 /* 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
|
1366 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
|
1367 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
|
1368 && !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
|
1369 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
|
1370 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
|
1371 && 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
|
1372 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1373 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
|
1374 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
|
1375 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1376 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
|
1377 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1378 |
111 | 1379 /* Return the mode for a pointer to a given ADDRSPACE, |
1380 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
|
1381 |
111 | 1382 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
|
1383 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
|
1384 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1385 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
|
1386 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1387 |
111 | 1388 /* Return the mode for an address in a given ADDRSPACE, |
1389 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
|
1390 |
111 | 1391 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
|
1392 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
|
1393 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1394 return Pmode; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1395 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1396 |
111 | 1397 /* Named address space version of valid_pointer_mode. |
1398 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
|
1399 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1400 bool |
111 | 1401 default_addr_space_valid_pointer_mode (scalar_int_mode mode, |
1402 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
|
1403 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1404 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
|
1405 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1406 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1407 /* 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
|
1408 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
|
1409 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
|
1410 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
|
1411 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1412 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1413 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
|
1414 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1415 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
|
1416 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1417 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
|
1418 return false; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1419 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1420 return true; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1421 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1422 |
111 | 1423 /* Named address space version of legitimate_address_p. |
1424 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
|
1425 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1426 bool |
111 | 1427 default_addr_space_legitimate_address_p (machine_mode mode, rtx mem, |
1428 bool strict, | |
1429 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
|
1430 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1431 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
|
1432 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1433 |
111 | 1434 /* Named address space version of LEGITIMIZE_ADDRESS. |
1435 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
|
1436 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1437 rtx |
111 | 1438 default_addr_space_legitimize_address (rtx x, rtx oldx, machine_mode mode, |
1439 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
|
1440 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1441 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
|
1442 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1443 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1444 /* 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
|
1445 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
|
1446 space. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1447 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1448 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1449 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
|
1450 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1451 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
|
1452 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1453 |
111 | 1454 /* The default hook for determining if 0 within a named address |
1455 space is a valid address. */ | |
1456 | |
1457 bool | |
1458 default_addr_space_zero_address_valid (addr_space_t as ATTRIBUTE_UNUSED) | |
1459 { | |
1460 return false; | |
1461 } | |
1462 | |
1463 /* The default hook for debugging the address space is to return the | |
1464 address space number to indicate DW_AT_address_class. */ | |
1465 int | |
1466 default_addr_space_debug (addr_space_t as) | |
1467 { | |
1468 return as; | |
1469 } | |
1470 | |
1471 /* The default hook implementation for TARGET_ADDR_SPACE_DIAGNOSE_USAGE. | |
1472 Don't complain about any address space. */ | |
1473 | |
1474 void | |
1475 default_addr_space_diagnose_usage (addr_space_t, location_t) | |
1476 { | |
1477 } | |
1478 | |
1479 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1480 /* 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
|
1481 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
|
1482 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1483 rtx |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1484 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
|
1485 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
|
1486 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
|
1487 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1488 gcc_unreachable (); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1489 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1490 |
111 | 1491 /* The defualt implementation of TARGET_HARD_REGNO_NREGS. */ |
1492 | |
1493 unsigned int | |
1494 default_hard_regno_nregs (unsigned int, machine_mode mode) | |
1495 { | |
1496 return CEIL (GET_MODE_SIZE (mode), UNITS_PER_WORD); | |
1497 } | |
1498 | |
0 | 1499 bool |
1500 default_hard_regno_scratch_ok (unsigned int regno ATTRIBUTE_UNUSED) | |
1501 { | |
1502 return true; | |
1503 } | |
1504 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1505 /* 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
|
1506 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1507 bool |
111 | 1508 default_mode_dependent_address_p (const_rtx addr ATTRIBUTE_UNUSED, |
1509 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
|
1510 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1511 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
|
1512 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1513 |
0 | 1514 bool |
1515 default_target_option_valid_attribute_p (tree ARG_UNUSED (fndecl), | |
1516 tree ARG_UNUSED (name), | |
1517 tree ARG_UNUSED (args), | |
1518 int ARG_UNUSED (flags)) | |
1519 { | |
1520 warning (OPT_Wattributes, | |
1521 "target attribute is not supported on this machine"); | |
1522 | |
1523 return false; | |
1524 } | |
1525 | |
1526 bool | |
1527 default_target_option_pragma_parse (tree ARG_UNUSED (args), | |
1528 tree ARG_UNUSED (pop_target)) | |
1529 { | |
111 | 1530 /* If args is NULL the caller is handle_pragma_pop_options (). In that case, |
1531 emit no warning because "#pragma GCC pop_target" is valid on targets that | |
1532 do not have the "target" pragma. */ | |
1533 if (args) | |
1534 warning (OPT_Wpragmas, | |
1535 "#pragma GCC target is not supported for this machine"); | |
0 | 1536 |
1537 return false; | |
1538 } | |
1539 | |
1540 bool | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1541 default_target_can_inline_p (tree caller, tree callee) |
0 | 1542 { |
1543 tree callee_opts = DECL_FUNCTION_SPECIFIC_TARGET (callee); | |
1544 tree caller_opts = DECL_FUNCTION_SPECIFIC_TARGET (caller); | |
111 | 1545 if (! callee_opts) |
1546 callee_opts = target_option_default_node; | |
1547 if (! caller_opts) | |
1548 caller_opts = target_option_default_node; | |
0 | 1549 |
111 | 1550 /* If both caller and callee have attributes, assume that if the |
1551 pointer is different, the two functions have different target | |
1552 options since build_target_option_node uses a hash table for the | |
1553 options. */ | |
1554 return callee_opts == caller_opts; | |
0 | 1555 } |
1556 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1557 /* 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
|
1558 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
|
1559 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
|
1560 |
111 | 1561 unsigned int |
1562 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
|
1563 { |
111 | 1564 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
|
1565 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1566 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1567 bool |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1568 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
|
1569 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1570 return HAVE_conditional_execution; |
111 | 1571 } |
1572 | |
1573 /* By default we assume that c99 functions are present at the runtime, | |
1574 but sincos is not. */ | |
1575 bool | |
1576 default_libc_has_function (enum function_class fn_class) | |
1577 { | |
1578 if (fn_class == function_c94 | |
1579 || fn_class == function_c99_misc | |
1580 || fn_class == function_c99_math_complex) | |
1581 return true; | |
1582 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1583 return false; |
111 | 1584 } |
1585 | |
1586 bool | |
1587 gnu_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED) | |
1588 { | |
1589 return true; | |
1590 } | |
1591 | |
1592 bool | |
1593 no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED) | |
1594 { | |
1595 return false; | |
1596 } | |
1597 | |
1598 tree | |
1599 default_builtin_tm_load_store (tree ARG_UNUSED (type)) | |
1600 { | |
1601 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
|
1602 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1603 |
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
|
1604 /* 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
|
1605 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1606 int |
111 | 1607 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
|
1608 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
|
1609 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
|
1610 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1611 #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
|
1612 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
|
1613 #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
|
1614 return MEMORY_MOVE_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
|
1615 #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
|
1616 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1617 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1618 /* 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
|
1619 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
|
1620 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1621 int |
111 | 1622 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
|
1623 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
|
1624 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
|
1625 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1626 #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
|
1627 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
|
1628 #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
|
1629 return REGISTER_MOVE_COST (mode, (enum reg_class) from, (enum reg_class) to); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1630 #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
|
1631 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1632 |
111 | 1633 /* The default implementation of TARGET_SLOW_UNALIGNED_ACCESS. */ |
1634 | |
1635 bool | |
1636 default_slow_unaligned_access (machine_mode, unsigned int) | |
1637 { | |
1638 return STRICT_ALIGNMENT; | |
1639 } | |
1640 | |
1641 /* For hooks which use the MOVE_RATIO macro, this gives the legacy default | |
1642 behavior. SPEED_P is true if we are compiling for speed. */ | |
1643 | |
1644 unsigned int | |
1645 get_move_ratio (bool speed_p ATTRIBUTE_UNUSED) | |
1646 { | |
1647 unsigned int move_ratio; | |
1648 #ifdef MOVE_RATIO | |
1649 move_ratio = (unsigned int) MOVE_RATIO (speed_p); | |
1650 #else | |
1651 #if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti) | |
1652 move_ratio = 2; | |
1653 #else /* No movmem patterns, pick a default. */ | |
1654 move_ratio = ((speed_p) ? 15 : 3); | |
1655 #endif | |
1656 #endif | |
1657 return move_ratio; | |
1658 } | |
1659 | |
1660 /* Return TRUE if the move_by_pieces/set_by_pieces infrastructure should be | |
1661 used; return FALSE if the movmem/setmem optab should be expanded, or | |
1662 a call to memcpy emitted. */ | |
1663 | |
1664 bool | |
1665 default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT size, | |
1666 unsigned int alignment, | |
1667 enum by_pieces_operation op, | |
1668 bool speed_p) | |
1669 { | |
1670 unsigned int max_size = 0; | |
1671 unsigned int ratio = 0; | |
1672 | |
1673 switch (op) | |
1674 { | |
1675 case CLEAR_BY_PIECES: | |
1676 max_size = STORE_MAX_PIECES; | |
1677 ratio = CLEAR_RATIO (speed_p); | |
1678 break; | |
1679 case MOVE_BY_PIECES: | |
1680 max_size = MOVE_MAX_PIECES; | |
1681 ratio = get_move_ratio (speed_p); | |
1682 break; | |
1683 case SET_BY_PIECES: | |
1684 max_size = STORE_MAX_PIECES; | |
1685 ratio = SET_RATIO (speed_p); | |
1686 break; | |
1687 case STORE_BY_PIECES: | |
1688 max_size = STORE_MAX_PIECES; | |
1689 ratio = get_move_ratio (speed_p); | |
1690 break; | |
1691 case COMPARE_BY_PIECES: | |
1692 max_size = COMPARE_MAX_PIECES; | |
1693 /* Pick a likely default, just as in get_move_ratio. */ | |
1694 ratio = speed_p ? 15 : 3; | |
1695 break; | |
1696 } | |
1697 | |
1698 return by_pieces_ninsns (size, alignment, max_size + 1, op) < ratio; | |
1699 } | |
1700 | |
1701 /* This hook controls code generation for expanding a memcmp operation by | |
1702 pieces. Return 1 for the normal pattern of compare/jump after each pair | |
1703 of loads, or a higher number to reduce the number of branches. */ | |
1704 | |
1705 int | |
1706 default_compare_by_pieces_branch_ratio (machine_mode) | |
1707 { | |
1708 return 1; | |
1709 } | |
1710 | |
1711 /* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function | |
1712 entry. If RECORD_P is true and the target supports named sections, | |
1713 the location of the NOPs will be recorded in a special object section | |
1714 called "__patchable_function_entries". This routine may be called | |
1715 twice per function to put NOPs before and after the function | |
1716 entry. */ | |
1717 | |
1718 void | |
1719 default_print_patchable_function_entry (FILE *file, | |
1720 unsigned HOST_WIDE_INT patch_area_size, | |
1721 bool record_p) | |
1722 { | |
1723 const char *nop_templ = 0; | |
1724 int code_num; | |
1725 rtx_insn *my_nop = make_insn_raw (gen_nop ()); | |
1726 | |
1727 /* We use the template alone, relying on the (currently sane) assumption | |
1728 that the NOP template does not have variable operands. */ | |
1729 code_num = recog_memoized (my_nop); | |
1730 nop_templ = get_insn_template (code_num, my_nop); | |
1731 | |
1732 if (record_p && targetm_common.have_named_sections) | |
1733 { | |
1734 char buf[256]; | |
1735 static int patch_area_number; | |
1736 section *previous_section = in_section; | |
1737 | |
1738 patch_area_number++; | |
1739 ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number); | |
1740 | |
1741 switch_to_section (get_section ("__patchable_function_entries", | |
1742 0, NULL)); | |
1743 fputs (integer_asm_op (POINTER_SIZE_UNITS, false), file); | |
1744 assemble_name_raw (file, buf); | |
1745 fputc ('\n', file); | |
1746 | |
1747 switch_to_section (previous_section); | |
1748 ASM_OUTPUT_LABEL (file, buf); | |
1749 } | |
1750 | |
1751 unsigned i; | |
1752 for (i = 0; i < patch_area_size; ++i) | |
1753 fprintf (file, "\t%s\n", nop_templ); | |
1754 } | |
1755 | |
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
|
1756 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
|
1757 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
|
1758 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1759 #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
|
1760 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
|
1761 #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
|
1762 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
|
1763 #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
|
1764 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1765 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1766 /* 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
|
1767 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1768 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
|
1769 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
|
1770 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
|
1771 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1772 #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
|
1773 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
|
1774 #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
|
1775 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
|
1776 #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
|
1777 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1778 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1779 /* 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
|
1780 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1781 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
|
1782 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
|
1783 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
|
1784 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1785 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
|
1786 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1787 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1788 /* 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
|
1789 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
|
1790 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
|
1791 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1792 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
|
1793 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1794 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1795 /* 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
|
1796 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1797 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
|
1798 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
|
1799 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1800 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
|
1801 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1802 |
111 | 1803 /* The default implementation of TARGET_CLASS_MAX_NREGS. */ |
1804 | |
1805 unsigned char | |
1806 default_class_max_nregs (reg_class_t rclass ATTRIBUTE_UNUSED, | |
1807 machine_mode mode ATTRIBUTE_UNUSED) | |
1808 { | |
1809 #ifdef CLASS_MAX_NREGS | |
1810 return (unsigned char) CLASS_MAX_NREGS ((enum reg_class) rclass, mode); | |
1811 #else | |
1812 return ((GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD); | |
1813 #endif | |
1814 } | |
1815 | |
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
|
1816 /* 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
|
1817 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1818 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
|
1819 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
|
1820 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1821 /* 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
|
1822 /* ??? 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
|
1823 #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
|
1824 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
|
1825 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
|
1826 #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
|
1827 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1828 /* 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
|
1829 #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
|
1830 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
|
1831 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
|
1832 #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
|
1833 |
f6334be47118
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 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
|
1835 } |
f6334be47118
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 |
111 | 1837 /* Determine the correct mode for a Dwarf frame register that represents |
1838 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
|
1839 |
111 | 1840 machine_mode |
1841 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
|
1842 { |
111 | 1843 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
|
1844 |
111 | 1845 if (targetm.hard_regno_call_part_clobbered (regno, save_mode)) |
1846 save_mode = choose_hard_reg_mode (regno, 1, true); | |
1847 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
|
1848 } |
f6334be47118
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 |
f6334be47118
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 /* 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
|
1851 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
|
1852 |
111 | 1853 machine_mode |
1854 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
|
1855 { |
f6334be47118
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 return reg_raw_mode[regno]; |
f6334be47118
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 |
111 | 1859 /* Return true if a leaf function should stay leaf even with profiling |
1860 enabled. */ | |
1861 | |
1862 bool | |
1863 default_keep_leaf_when_profiled () | |
1864 { | |
1865 return false; | |
1866 } | |
1867 | |
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
|
1868 /* 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
|
1869 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
|
1870 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
|
1871 |
f6334be47118
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 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
|
1873 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
|
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 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
|
1876 return false; |
111 | 1877 if ((cl_options[option].flags & CL_PCH_IGNORE) != 0) |
1878 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
|
1879 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
|
1880 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
|
1881 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
|
1882 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
|
1883 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1884 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1885 /* 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
|
1886 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
|
1887 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
|
1888 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1889 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
|
1890 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
|
1891 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1892 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
|
1893 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
|
1894 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
|
1895 |
f6334be47118
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 *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
|
1897 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
|
1898 *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
|
1899 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
|
1900 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
|
1901 *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
|
1902 |
f6334be47118
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 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
|
1904 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
|
1905 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
|
1906 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
|
1907 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
|
1908 { |
f6334be47118
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 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
|
1910 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
|
1911 } |
f6334be47118
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 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
|
1914 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
|
1915 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1916 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
|
1917 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
|
1918 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1919 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1920 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
|
1921 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1922 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1923 /* 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
|
1924 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
|
1925 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1926 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
|
1927 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
|
1928 { |
111 | 1929 return xasprintf (_("created and used with differing settings of '%s'"), |
1930 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
|
1931 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1932 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1933 /* 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
|
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 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
|
1936 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
|
1937 { |
f6334be47118
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 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
|
1939 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
|
1940 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
|
1941 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1942 /* -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
|
1943 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
|
1944 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
|
1945 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
|
1946 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
|
1947 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
|
1948 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1949 /* 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
|
1950 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
|
1951 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1952 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
|
1953 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
|
1954 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1955 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
|
1956 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
|
1957 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
|
1958 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
|
1959 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
|
1960 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
|
1961 } |
f6334be47118
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 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
|
1964 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
|
1965 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1966 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
|
1967 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
|
1968 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
|
1969 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
|
1970 } |
f6334be47118
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 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
|
1973 } |
f6334be47118
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 |
111 | 1975 /* Default version of cstore_mode. */ |
1976 | |
1977 scalar_int_mode | |
1978 default_cstore_mode (enum insn_code icode) | |
1979 { | |
1980 return as_a <scalar_int_mode> (insn_data[(int) icode].operand[0].mode); | |
1981 } | |
1982 | |
1983 /* Default version of member_type_forces_blk. */ | |
1984 | |
1985 bool | |
1986 default_member_type_forces_blk (const_tree, machine_mode) | |
1987 { | |
1988 return false; | |
1989 } | |
1990 | |
1991 rtx | |
1992 default_load_bounds_for_arg (rtx addr ATTRIBUTE_UNUSED, | |
1993 rtx ptr ATTRIBUTE_UNUSED, | |
1994 rtx bnd ATTRIBUTE_UNUSED) | |
1995 { | |
1996 gcc_unreachable (); | |
1997 } | |
1998 | |
1999 void | |
2000 default_store_bounds_for_arg (rtx val ATTRIBUTE_UNUSED, | |
2001 rtx addr ATTRIBUTE_UNUSED, | |
2002 rtx bounds ATTRIBUTE_UNUSED, | |
2003 rtx to ATTRIBUTE_UNUSED) | |
2004 { | |
2005 gcc_unreachable (); | |
2006 } | |
2007 | |
2008 rtx | |
2009 default_load_returned_bounds (rtx slot ATTRIBUTE_UNUSED) | |
2010 { | |
2011 gcc_unreachable (); | |
2012 } | |
2013 | |
2014 void | |
2015 default_store_returned_bounds (rtx slot ATTRIBUTE_UNUSED, | |
2016 rtx bounds ATTRIBUTE_UNUSED) | |
2017 { | |
2018 gcc_unreachable (); | |
2019 } | |
2020 | |
2021 /* Default version of canonicalize_comparison. */ | |
2022 | |
2023 void | |
2024 default_canonicalize_comparison (int *, rtx *, rtx *, bool) | |
2025 { | |
2026 } | |
2027 | |
2028 /* Default implementation of TARGET_ATOMIC_ASSIGN_EXPAND_FENV. */ | |
2029 | |
2030 void | |
2031 default_atomic_assign_expand_fenv (tree *, tree *, tree *) | |
2032 { | |
2033 } | |
2034 | |
2035 #ifndef PAD_VARARGS_DOWN | |
2036 #define PAD_VARARGS_DOWN BYTES_BIG_ENDIAN | |
2037 #endif | |
2038 | |
2039 /* Build an indirect-ref expression over the given TREE, which represents a | |
2040 piece of a va_arg() expansion. */ | |
2041 tree | |
2042 build_va_arg_indirect_ref (tree addr) | |
2043 { | |
2044 addr = build_simple_mem_ref_loc (EXPR_LOCATION (addr), addr); | |
2045 return addr; | |
2046 } | |
2047 | |
2048 /* The "standard" implementation of va_arg: read the value from the | |
2049 current (padded) address and increment by the (padded) size. */ | |
2050 | |
2051 tree | |
2052 std_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, | |
2053 gimple_seq *post_p) | |
2054 { | |
2055 tree addr, t, type_size, rounded_size, valist_tmp; | |
2056 unsigned HOST_WIDE_INT align, boundary; | |
2057 bool indirect; | |
2058 | |
2059 /* All of the alignment and movement below is for args-grow-up machines. | |
2060 As of 2004, there are only 3 ARGS_GROW_DOWNWARD targets, and they all | |
2061 implement their own specialized gimplify_va_arg_expr routines. */ | |
2062 if (ARGS_GROW_DOWNWARD) | |
2063 gcc_unreachable (); | |
2064 | |
2065 indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false); | |
2066 if (indirect) | |
2067 type = build_pointer_type (type); | |
2068 | |
2069 align = PARM_BOUNDARY / BITS_PER_UNIT; | |
2070 boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type); | |
2071 | |
2072 /* When we align parameter on stack for caller, if the parameter | |
2073 alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be | |
2074 aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee | |
2075 here with caller. */ | |
2076 if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT) | |
2077 boundary = MAX_SUPPORTED_STACK_ALIGNMENT; | |
2078 | |
2079 boundary /= BITS_PER_UNIT; | |
2080 | |
2081 /* Hoist the valist value into a temporary for the moment. */ | |
2082 valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL); | |
2083 | |
2084 /* va_list pointer is aligned to PARM_BOUNDARY. If argument actually | |
2085 requires greater alignment, we must perform dynamic alignment. */ | |
2086 if (boundary > align | |
2087 && !integer_zerop (TYPE_SIZE (type))) | |
2088 { | |
2089 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp, | |
2090 fold_build_pointer_plus_hwi (valist_tmp, boundary - 1)); | |
2091 gimplify_and_add (t, pre_p); | |
2092 | |
2093 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp, | |
2094 fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist), | |
2095 valist_tmp, | |
2096 build_int_cst (TREE_TYPE (valist), -boundary))); | |
2097 gimplify_and_add (t, pre_p); | |
2098 } | |
2099 else | |
2100 boundary = align; | |
2101 | |
2102 /* If the actual alignment is less than the alignment of the type, | |
2103 adjust the type accordingly so that we don't assume strict alignment | |
2104 when dereferencing the pointer. */ | |
2105 boundary *= BITS_PER_UNIT; | |
2106 if (boundary < TYPE_ALIGN (type)) | |
2107 { | |
2108 type = build_variant_type_copy (type); | |
2109 SET_TYPE_ALIGN (type, boundary); | |
2110 } | |
2111 | |
2112 /* Compute the rounded size of the type. */ | |
2113 type_size = size_in_bytes (type); | |
2114 rounded_size = round_up (type_size, align); | |
2115 | |
2116 /* Reduce rounded_size so it's sharable with the postqueue. */ | |
2117 gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue); | |
2118 | |
2119 /* Get AP. */ | |
2120 addr = valist_tmp; | |
2121 if (PAD_VARARGS_DOWN && !integer_zerop (rounded_size)) | |
2122 { | |
2123 /* Small args are padded downward. */ | |
2124 t = fold_build2_loc (input_location, GT_EXPR, sizetype, | |
2125 rounded_size, size_int (align)); | |
2126 t = fold_build3 (COND_EXPR, sizetype, t, size_zero_node, | |
2127 size_binop (MINUS_EXPR, rounded_size, type_size)); | |
2128 addr = fold_build_pointer_plus (addr, t); | |
2129 } | |
2130 | |
2131 /* Compute new value for AP. */ | |
2132 t = fold_build_pointer_plus (valist_tmp, rounded_size); | |
2133 t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t); | |
2134 gimplify_and_add (t, pre_p); | |
2135 | |
2136 addr = fold_convert (build_pointer_type (type), addr); | |
2137 | |
2138 if (indirect) | |
2139 addr = build_va_arg_indirect_ref (addr); | |
2140 | |
2141 return build_va_arg_indirect_ref (addr); | |
2142 } | |
2143 | |
2144 tree | |
2145 default_chkp_bound_type (void) | |
2146 { | |
2147 tree res = make_node (POINTER_BOUNDS_TYPE); | |
2148 TYPE_PRECISION (res) = TYPE_PRECISION (size_type_node) * 2; | |
2149 TYPE_NAME (res) = get_identifier ("__bounds_type"); | |
2150 SET_TYPE_MODE (res, targetm.chkp_bound_mode ()); | |
2151 layout_type (res); | |
2152 return res; | |
2153 } | |
2154 | |
2155 machine_mode | |
2156 default_chkp_bound_mode (void) | |
2157 { | |
2158 return VOIDmode; | |
2159 } | |
2160 | |
2161 tree | |
2162 default_builtin_chkp_function (unsigned int fcode ATTRIBUTE_UNUSED) | |
2163 { | |
2164 return NULL_TREE; | |
2165 } | |
2166 | |
2167 rtx | |
2168 default_chkp_function_value_bounds (const_tree ret_type ATTRIBUTE_UNUSED, | |
2169 const_tree fn_decl_or_type ATTRIBUTE_UNUSED, | |
2170 bool outgoing ATTRIBUTE_UNUSED) | |
2171 { | |
2172 gcc_unreachable (); | |
2173 } | |
2174 | |
2175 tree | |
2176 default_chkp_make_bounds_constant (HOST_WIDE_INT lb ATTRIBUTE_UNUSED, | |
2177 HOST_WIDE_INT ub ATTRIBUTE_UNUSED) | |
2178 { | |
2179 return NULL_TREE; | |
2180 } | |
2181 | |
2182 int | |
2183 default_chkp_initialize_bounds (tree var ATTRIBUTE_UNUSED, | |
2184 tree lb ATTRIBUTE_UNUSED, | |
2185 tree ub ATTRIBUTE_UNUSED, | |
2186 tree *stmts ATTRIBUTE_UNUSED) | |
2187 { | |
2188 return 0; | |
2189 } | |
2190 | |
2191 void | |
2192 default_setup_incoming_vararg_bounds (cumulative_args_t ca ATTRIBUTE_UNUSED, | |
2193 machine_mode mode ATTRIBUTE_UNUSED, | |
2194 tree type ATTRIBUTE_UNUSED, | |
2195 int *pretend_arg_size ATTRIBUTE_UNUSED, | |
2196 int second_time ATTRIBUTE_UNUSED) | |
2197 { | |
2198 } | |
2199 | |
2200 /* An implementation of TARGET_CAN_USE_DOLOOP_P for targets that do | |
2201 not support nested low-overhead loops. */ | |
2202 | |
2203 bool | |
2204 can_use_doloop_if_innermost (const widest_int &, const widest_int &, | |
2205 unsigned int loop_depth, bool) | |
2206 { | |
2207 return loop_depth == 1; | |
2208 } | |
2209 | |
2210 /* Default implementation of TARGET_OPTAB_SUPPORTED_P. */ | |
2211 | |
2212 bool | |
2213 default_optab_supported_p (int, machine_mode, machine_mode, optimization_type) | |
2214 { | |
2215 return true; | |
2216 } | |
2217 | |
2218 /* Default implementation of TARGET_MAX_NOCE_IFCVT_SEQ_COST. */ | |
2219 | |
2220 unsigned int | |
2221 default_max_noce_ifcvt_seq_cost (edge e) | |
2222 { | |
2223 bool predictable_p = predictable_edge_p (e); | |
2224 | |
2225 enum compiler_param param | |
2226 = (predictable_p | |
2227 ? PARAM_MAX_RTL_IF_CONVERSION_PREDICTABLE_COST | |
2228 : PARAM_MAX_RTL_IF_CONVERSION_UNPREDICTABLE_COST); | |
2229 | |
2230 /* If we have a parameter set, use that, otherwise take a guess using | |
2231 BRANCH_COST. */ | |
2232 if (global_options_set.x_param_values[param]) | |
2233 return PARAM_VALUE (param); | |
2234 else | |
2235 return BRANCH_COST (true, predictable_p) * COSTS_N_INSNS (3); | |
2236 } | |
2237 | |
2238 /* Default implementation of TARGET_MIN_ARITHMETIC_PRECISION. */ | |
2239 | |
2240 unsigned int | |
2241 default_min_arithmetic_precision (void) | |
2242 { | |
2243 return WORD_REGISTER_OPERATIONS ? BITS_PER_WORD : BITS_PER_UNIT; | |
2244 } | |
2245 | |
2246 /* Default implementation of TARGET_C_EXCESS_PRECISION. */ | |
2247 | |
2248 enum flt_eval_method | |
2249 default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED) | |
2250 { | |
2251 return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; | |
2252 } | |
2253 | |
2254 bool | |
2255 default_stack_clash_protection_final_dynamic_probe (rtx residual ATTRIBUTE_UNUSED) | |
2256 { | |
2257 return 0; | |
2258 } | |
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
|
2259 |
0 | 2260 #include "gt-targhooks.h" |