]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/target.h
arc-protos.h (arc_select_cc_mode, gen_compare_reg): Wrap in RTX_CODE macro guard.
[thirdparty/gcc.git] / gcc / target.h
CommitLineData
672a6f42 1/* Data structure definitions for a generic GCC target.
9b580a0b 2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
c7ec5472 3 Free Software Foundation, Inc.
672a6f42 4
9dcd6f09
NC
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any
8 later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING3. If not see
17 <http://www.gnu.org/licenses/>.
18
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
22
672a6f42
NB
23
24/* This file contains a data structure that describes a GCC target.
17b53c33 25 At present it is incomplete, but in future it should grow to
672a6f42
NB
26 contain most or all target machine and target O/S specific
27 information.
28
29 This structure has its initializer declared in target-def.h in the
30 form of large macro TARGET_INITIALIZER that expands to many smaller
31 macros.
32
33 The smaller macros each initialize one component of the structure,
34 and each has a default. Each target should have a file that
35 includes target.h and target-def.h, and overrides any inappropriate
36 defaults by undefining the relevant macro and defining a suitable
37 replacement. That file should then contain the definition of
f6897b10 38 "targetm" like so:
672a6f42 39
f6897b10 40 struct gcc_target targetm = TARGET_INITIALIZER;
672a6f42
NB
41
42 Doing things this way allows us to bring together everything that
17b53c33
NB
43 defines a GCC target. By supplying a default that is appropriate
44 to most targets, we can easily add new items without needing to
45 edit dozens of target configuration files. It should also allow us
46 to gradually reduce the amount of conditional compilation that is
47 scattered throughout GCC. */
672a6f42 48
59587b18
JQ
49#ifndef GCC_TARGET_H
50#define GCC_TARGET_H
51
7bb1ad93 52#include "tm.h"
59587b18 53#include "insn-modes.h"
7bb1ad93 54
e0d9d0dd
NC
55/* Types used by the record_gcc_switches() target function. */
56typedef enum
57{
58 SWITCH_TYPE_PASSED, /* A switch passed on the command line. */
59 SWITCH_TYPE_ENABLED, /* An option that is currently enabled. */
60 SWITCH_TYPE_DESCRIPTIVE, /* Descriptive text, not a switch or option. */
61 SWITCH_TYPE_LINE_START, /* Please emit any necessary text at the start of a line. */
62 SWITCH_TYPE_LINE_END /* Please emit a line terminator. */
63}
64print_switch_type;
65
66typedef int (* print_switch_fn_type) (print_switch_type, const char *);
67
68/* An example implementation for ELF targets. Defined in varasm.c */
69extern int elf_record_gcc_switches (print_switch_type type, const char *);
70
9d30f3c1 71struct stdarg_info;
496d7bb0 72struct spec_info_def;
9d30f3c1 73
8a99f6f9
R
74/* The struct used by the secondary_reload target hook. */
75typedef struct secondary_reload_info
76{
77 /* icode is actually an enum insn_code, but we don't want to force every
78 file that includes target.h to include optabs.h . */
79 int icode;
80 int extra_cost; /* Cost for using (a) scratch register(s) to be taken
81 into account by copy_cost. */
82 /* The next two members are for the use of the backward
83 compatibility hook. */
84 struct secondary_reload_info *prev_sri;
85 int t_icode; /* Actually an enum insn_code - see above. */
86} secondary_reload_info;
87
b198261f
MK
88/* This is defined in sched-int.h . */
89struct _dep;
8a99f6f9 90
672a6f42
NB
91struct gcc_target
92{
08c148a8
NB
93 /* Functions that output assembler for the target. */
94 struct asm_out
95 {
17b53c33
NB
96 /* Opening and closing parentheses for asm expression grouping. */
97 const char *open_paren, *close_paren;
98
301d03af
RS
99 /* Assembler instructions for creating various kinds of integer object. */
100 const char *byte_op;
101 struct asm_int_op
102 {
103 const char *hi;
104 const char *si;
105 const char *di;
106 const char *ti;
107 } aligned_op, unaligned_op;
108
109 /* Try to output the assembler code for an integer object whose
110 value is given by X. SIZE is the size of the object in bytes and
111 ALIGNED_P indicates whether it is aligned. Return true if
112 successful. Only handles cases for which BYTE_OP, ALIGNED_OP
113 and UNALIGNED_OP are NULL. */
46c5ad27 114 bool (* integer) (rtx x, unsigned int size, int aligned_p);
301d03af 115
5eb99654 116 /* Output code that will globalize a label. */
46c5ad27 117 void (* globalize_label) (FILE *, const char *);
5eb99654 118
da08281c 119 /* Output code that will globalize a declaration. */
812b587e
SE
120 void (* globalize_decl_name) (FILE *, tree);
121
4746cf84
MA
122 /* Output code that will emit a label for unwind info, if this
123 target requires such labels. Second argument is the decl the
eeab4d81
MS
124 unwind info is associated with, third is a boolean: true if
125 this is for exception handling, fourth is a boolean: true if
9cf737f8 126 this is only a placeholder for an omitted FDE. */
eeab4d81 127 void (* unwind_label) (FILE *, tree, int, int);
4746cf84 128
083cad55
EC
129 /* Output code that will emit a label to divide up the exception
130 table. */
131 void (* except_table_label) (FILE *);
132
951120ea
PB
133 /* Emit any directives required to unwind this instruction. */
134 void (* unwind_emit) (FILE *, rtx);
135
4977bab6 136 /* Output an internal label. */
46c5ad27 137 void (* internal_label) (FILE *, const char *, unsigned long);
4977bab6 138
617a1b71
PB
139 /* Emit a ttype table reference to a typeinfo object. */
140 bool (* ttype) (rtx);
141
93638d7a
AM
142 /* Emit an assembler directive to set visibility for the symbol
143 associated with the tree decl. */
46c5ad27 144 void (* visibility) (tree, int);
93638d7a 145
08c148a8 146 /* Output the assembler code for entry to a function. */
46c5ad27 147 void (* function_prologue) (FILE *, HOST_WIDE_INT);
08c148a8 148
b4c25db2 149 /* Output the assembler code for end of prologue. */
46c5ad27 150 void (* function_end_prologue) (FILE *);
b4c25db2
NB
151
152 /* Output the assembler code for start of epilogue. */
46c5ad27 153 void (* function_begin_epilogue) (FILE *);
b4c25db2 154
08c148a8 155 /* Output the assembler code for function exit. */
46c5ad27 156 void (* function_epilogue) (FILE *, HOST_WIDE_INT);
7c262518 157
d6b5193b
RS
158 /* Initialize target-specific sections. */
159 void (* init_sections) (void);
160
c18a5b6c
MM
161 /* Tell assembler to change to section NAME with attributes FLAGS.
162 If DECL is non-NULL, it is the VAR_DECL or FUNCTION_DECL with
163 which this section is associated. */
164 void (* named_section) (const char *name, unsigned int flags, tree decl);
2cc07db4 165
9b580a0b
RH
166 /* Return a mask describing how relocations should be treated when
167 selecting sections. Bit 1 should be set if global relocations
168 should be placed in a read-write section; bit 0 should be set if
169 local relocations should be placed in a read-write section. */
170 int (*reloc_rw_mask) (void);
171
d6b5193b
RS
172 /* Return a section for EXP. It may be a DECL or a constant. RELOC
173 is nonzero if runtime relocations must be applied; bit 1 will be
174 set if the runtime relocations require non-local name resolution.
175 ALIGN is the required alignment of the data. */
176 section *(* select_section) (tree, int, unsigned HOST_WIDE_INT);
ae46c4e0 177
d6b5193b
RS
178 /* Return a section for X. MODE is X's mode and ALIGN is its
179 alignment in bits. */
180 section *(* select_rtx_section) (enum machine_mode, rtx,
181 unsigned HOST_WIDE_INT);
b64a1b53 182
ae46c4e0
RH
183 /* Select a unique section name for DECL. RELOC is the same as
184 for SELECT_SECTION. */
46c5ad27 185 void (* unique_section) (tree, int);
ae46c4e0 186
d6b5193b
RS
187 /* Return the readonly data section associated with function DECL. */
188 section *(* function_rodata_section) (tree);
ab5c8549 189
2cc07db4 190 /* Output a constructor for a symbol with a given priority. */
46c5ad27 191 void (* constructor) (rtx, int);
2cc07db4
RH
192
193 /* Output a destructor for a symbol with a given priority. */
46c5ad27 194 void (* destructor) (rtx, int);
483ab821 195
3961e8fe
RH
196 /* Output the assembler code for a thunk function. THUNK_DECL is the
197 declaration for the thunk function itself, FUNCTION is the decl for
198 the target function. DELTA is an immediate constant offset to be
476c5eb6 199 added to THIS. If VCALL_OFFSET is nonzero, the word at
3961e8fe 200 *(*this + vcall_offset) should be added to THIS. */
46c5ad27
AJ
201 void (* output_mi_thunk) (FILE *file, tree thunk_decl,
202 HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
203 tree function_decl);
3961e8fe
RH
204
205 /* Determine whether output_mi_thunk would succeed. */
206 /* ??? Ideally, this hook would not exist, and success or failure
207 would be returned from output_mi_thunk directly. But there's
208 too much undo-able setup involved in invoking output_mi_thunk.
209 Could be fixed by making output_mi_thunk emit rtl instead of
210 text to the output file. */
46c5ad27
AJ
211 bool (* can_output_mi_thunk) (tree thunk_decl, HOST_WIDE_INT delta,
212 HOST_WIDE_INT vcall_offset,
213 tree function_decl);
a5fe455b 214
1bc7c5b6
ZW
215 /* Output any boilerplate text needed at the beginning of a
216 translation unit. */
46c5ad27 217 void (*file_start) (void);
1bc7c5b6
ZW
218
219 /* Output any boilerplate text needed at the end of a
220 translation unit. */
46c5ad27 221 void (*file_end) (void);
6773a41c
RO
222
223 /* Output an assembler pseudo-op to declare a library function name
224 external. */
225 void (*external_libcall) (rtx);
8e3e233b 226
e0d9d0dd 227 /* Output an assembler directive to mark decl live. This instructs
8e3e233b
DP
228 linker to not dead code strip this symbol. */
229 void (*mark_decl_preserved) (const char *);
230
e0d9d0dd
NC
231 /* Output a record of the command line switches that have been passed. */
232 print_switch_fn_type record_gcc_switches;
233 /* The name of the section that the example ELF implementation of
234 record_gcc_switches will use to store the information. Target
235 specific versions of record_gcc_switches may or may not use
236 this information. */
237 const char * record_gcc_switches_section;
238
aacd3885
RS
239 /* Output the definition of a section anchor. */
240 void (*output_anchor) (rtx);
241
fdbe66f2
EB
242 /* Output a DTP-relative reference to a TLS symbol. */
243 void (*output_dwarf_dtprel) (FILE *file, int size, rtx x);
244
08c148a8
NB
245 } asm_out;
246
c237e94a
ZW
247 /* Functions relating to instruction scheduling. */
248 struct sched
249 {
250 /* Given the current cost, COST, of an insn, INSN, calculate and
251 return a new cost based on its relationship to DEP_INSN through
252 the dependence LINK. The default is to make no adjustment. */
b198261f 253 int (* adjust_cost) (rtx insn, rtx link, rtx dep_insn, int cost);
c237e94a
ZW
254
255 /* Adjust the priority of an insn as you see fit. Returns the new
256 priority. */
46c5ad27 257 int (* adjust_priority) (rtx, int);
c237e94a
ZW
258
259 /* Function which returns the maximum number of insns that can be
260 scheduled in the same machine cycle. This must be constant
261 over an entire compilation. The default is 1. */
46c5ad27 262 int (* issue_rate) (void);
c237e94a
ZW
263
264 /* Calculate how much this insn affects how many more insns we
265 can emit this cycle. Default is they all cost the same. */
46c5ad27 266 int (* variable_issue) (FILE *, int, rtx, int);
41077ce4 267
c237e94a 268 /* Initialize machine-dependent scheduling code. */
46c5ad27 269 void (* md_init) (FILE *, int, int);
c237e94a
ZW
270
271 /* Finalize machine-dependent scheduling code. */
46c5ad27 272 void (* md_finish) (FILE *, int);
c237e94a 273
58565a33
SKG
274 /* Initialize machine-dependent function while scheduling code. */
275 void (* md_init_global) (FILE *, int, int);
276
277 /* Finalize machine-dependent function wide scheduling code. */
278 void (* md_finish_global) (FILE *, int);
279
c237e94a
ZW
280 /* Reorder insns in a machine-dependent fashion, in two different
281 places. Default does nothing. */
46c5ad27
AJ
282 int (* reorder) (FILE *, int, rtx *, int *, int);
283 int (* reorder2) (FILE *, int, rtx *, int *, int);
c237e94a 284
30028c85
VM
285 /* The following member value is a pointer to a function called
286 after evaluation forward dependencies of insns in chain given
287 by two parameter values (head and tail correspondingly). */
46c5ad27 288 void (* dependencies_evaluation_hook) (rtx, rtx);
30028c85 289
fae15c93
VM
290 /* The values of the following four members are pointers to
291 functions used to simplify the automaton descriptions.
292 dfa_pre_cycle_insn and dfa_post_cycle_insn give functions
293 returning insns which are used to change the pipeline hazard
294 recognizer state when the new simulated processor cycle
295 correspondingly starts and finishes. The function defined by
296 init_dfa_pre_cycle_insn and init_dfa_post_cycle_insn are used
297 to initialize the corresponding insns. The default values of
d91edf86 298 the members result in not changing the automaton state when
fae15c93
VM
299 the new simulated processor cycle correspondingly starts and
300 finishes. */
46c5ad27
AJ
301 void (* init_dfa_pre_cycle_insn) (void);
302 rtx (* dfa_pre_cycle_insn) (void);
303 void (* init_dfa_post_cycle_insn) (void);
304 rtx (* dfa_post_cycle_insn) (void);
fa0aee89 305
1c3d0d93
MK
306 /* The values of the following two members are pointers to
307 functions used to simplify the automaton descriptions.
308 dfa_pre_advance_cycle and dfa_post_advance_cycle are getting called
309 immediatelly before and after cycle is advanced. */
310 void (* dfa_pre_advance_cycle) (void);
311 void (* dfa_post_advance_cycle) (void);
312
fae15c93
VM
313 /* The following member value is a pointer to a function returning value
314 which defines how many insns in queue `ready' will we try for
5ad6fca5 315 multi-pass scheduling. If the member value is nonzero and the
fae15c93
VM
316 function returns positive value, the DFA based scheduler will make
317 multi-pass scheduling for the first cycle. In other words, we will
318 try to choose ready insn which permits to start maximum number of
319 insns on the same cycle. */
46c5ad27 320 int (* first_cycle_multipass_dfa_lookahead) (void);
fa0aee89 321
30028c85
VM
322 /* The following member value is pointer to a function controlling
323 what insns from the ready insn queue will be considered for the
324 multipass insn scheduling. If the hook returns zero for insn
325 passed as the parameter, the insn will be not chosen to be
326 issued. */
46c5ad27 327 int (* first_cycle_multipass_dfa_lookahead_guard) (rtx);
fa0aee89 328
30028c85
VM
329 /* The following member value is pointer to a function called by
330 the insn scheduler before issuing insn passed as the third
331 parameter on given cycle. If the hook returns nonzero, the
332 insn is not issued on given processors cycle. Instead of that,
333 the processor cycle is advanced. If the value passed through
334 the last parameter is zero, the insn ready queue is not sorted
335 on the new cycle start as usually. The first parameter passes
336 file for debugging output. The second one passes the scheduler
337 verbose level of the debugging output. The forth and the fifth
338 parameter values are correspondingly processor cycle on which
339 the previous insn has been issued and the current processor
340 cycle. */
46c5ad27 341 int (* dfa_new_cycle) (FILE *, int, rtx, int, int, int *);
fa0aee89 342
b198261f
MK
343 /* The following member value is a pointer to a function called by the
344 insn scheduler. It should return true if there exists a dependence
345 which is considered costly by the target, between the insn
346 DEP_PRO (&_DEP), and the insn DEP_CON (&_DEP). The first parameter is
347 the dep that represents the dependence between the two insns. The
348 second argument is the cost of the dependence as estimated by
f676971a 349 the scheduler. The last argument is the distance in cycles
569fa502 350 between the already scheduled insn (first parameter) and the
80fcc7bc 351 the second insn (second parameter). */
b198261f 352 bool (* is_costly_dependence) (struct _dep *_dep, int, int);
496d7bb0
MK
353
354 /* The following member value is a pointer to a function called
355 by the insn scheduler. This hook is called to notify the backend
356 that new instructions were emitted. */
357 void (* h_i_d_extended) (void);
358
359 /* The following member value is a pointer to a function called
360 by the insn scheduler.
361 The first parameter is an instruction, the second parameter is the type
362 of the requested speculation, and the third parameter is a pointer to the
363 speculative pattern of the corresponding type (set if return value == 1).
364 It should return
365 -1, if there is no pattern, that will satisfy the requested speculation
366 type,
367 0, if current pattern satisfies the requested speculation type,
368 1, if pattern of the instruction should be changed to the newly
369 generated one. */
c7ec5472 370 int (* speculate_insn) (rtx, int, rtx *);
496d7bb0
MK
371
372 /* The following member value is a pointer to a function called
373 by the insn scheduler. It should return true if the check instruction
374 corresponding to the instruction passed as the parameter needs a
375 recovery block. */
376 bool (* needs_block_p) (rtx);
377
378 /* The following member value is a pointer to a function called
379 by the insn scheduler. It should return a pattern for the check
380 instruction.
381 The first parameter is a speculative instruction, the second parameter
382 is the label of the corresponding recovery block (or null, if it is a
383 simple check). If the mutation of the check is requested (e.g. from
384 ld.c to chk.a), the third parameter is true - in this case the first
385 parameter is the previous check. */
386 rtx (* gen_check) (rtx, rtx, bool);
387
388 /* The following member value is a pointer to a function controlling
389 what insns from the ready insn queue will be considered for the
390 multipass insn scheduling. If the hook returns zero for the insn
391 passed as the parameter, the insn will not be chosen to be
392 issued. This hook is used to discard speculative instructions,
393 that stand at the first position of the ready list. */
394 bool (* first_cycle_multipass_dfa_lookahead_guard_spec) (rtx);
395
396 /* The following member value is a pointer to a function that provides
397 information about the speculation capabilities of the target.
398 The parameter is a pointer to spec_info variable. */
399 void (* set_sched_flags) (struct spec_info_def *);
c237e94a
ZW
400 } sched;
401
7ccf35ed
DN
402 /* Functions relating to vectorization. */
403 struct vectorize
404 {
d16b59fa 405 /* The following member value is a pointer to a function called
7ccf35ed
DN
406 by the vectorizer, and return the decl of the target builtin
407 function. */
408 tree (* builtin_mask_for_load) (void);
89d67cca 409
2505a3f2
RG
410 /* Returns a code for builtin that realizes vectorized version of
411 function, or NULL_TREE if not available. */
b95becfc 412 tree (* builtin_vectorized_function) (unsigned, tree, tree);
2505a3f2 413
f57d17f1
TM
414 /* Returns a code for builtin that realizes vectorized version of
415 conversion, or NULL_TREE if not available. */
416 tree (* builtin_conversion) (unsigned, tree);
417
89d67cca
DN
418 /* Target builtin that implements vector widening multiplication.
419 builtin_mul_widen_eve computes the element-by-element products
420 for the even elements, and builtin_mul_widen_odd computes the
421 element-by-element products for the odd elements. */
422 tree (* builtin_mul_widen_even) (tree);
423 tree (* builtin_mul_widen_odd) (tree);
e95b59d2
DN
424
425 /* Returns the cost to be added to the overheads involved with
426 executing the vectorized version of a loop. */
427 int (*builtin_vectorization_cost) (bool);
5b900a4c
DN
428
429 /* Return true if vector alignment is reachable (by peeling N
cea618ac 430 iterations) for the given type. */
5b900a4c 431 bool (* vector_alignment_reachable) (tree, bool);
7ccf35ed
DN
432 } vectorize;
433
75685792
RS
434 /* The initial value of target_flags. */
435 int default_target_flags;
436
437 /* Handle target switch CODE (an OPT_* value). ARG is the argument
438 passed to the switch; it is NULL if no argument was. VALUE is the
439 value of ARG if CODE specifies a UInteger option, otherwise it is
440 1 if the positive form of the switch was used and 0 if the negative
441 form was. Return true if the switch was valid. */
442 bool (* handle_option) (size_t code, const char *arg, int value);
443
67e6ba46
NC
444 /* Display extra, target specific information in response to a
445 --target-help switch. */
446 void (* target_help) (void);
447
8c27b7d4 448 /* Return machine mode for filter value. */
93f90be6
FJ
449 enum machine_mode (* eh_return_filter_mode) (void);
450
c7ff6e7a
AK
451 /* Return machine mode for libgcc expanded cmp instructions. */
452 enum machine_mode (* libgcc_cmp_return_mode) (void);
453
454 /* Return machine mode for libgcc expanded shift instructions. */
455 enum machine_mode (* libgcc_shift_count_mode) (void);
456
672a6f42 457 /* Given two decls, merge their attributes and return the result. */
46c5ad27 458 tree (* merge_decl_attributes) (tree, tree);
672a6f42
NB
459
460 /* Given two types, merge their attributes and return the result. */
46c5ad27 461 tree (* merge_type_attributes) (tree, tree);
672a6f42 462
349ae713
NB
463 /* Table of machine attributes and functions to handle them.
464 Ignored if NULL. */
91d231cb 465 const struct attribute_spec *attribute_table;
8d8e52be
JM
466
467 /* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
468 one if they are compatible and two if they are nearly compatible
469 (which causes a warning to be generated). */
46c5ad27 470 int (* comp_type_attributes) (tree type1, tree type2);
8d8e52be
JM
471
472 /* Assign default attributes to the newly defined TYPE. */
46c5ad27 473 void (* set_default_type_attributes) (tree type);
12a68f1f
JM
474
475 /* Insert attributes on the newly created DECL. */
46c5ad27 476 void (* insert_attributes) (tree decl, tree *attributes);
f6155fda 477
91d231cb
JM
478 /* Return true if FNDECL (which has at least one machine attribute)
479 can be inlined despite its machine attributes, false otherwise. */
46c5ad27 480 bool (* function_attribute_inlinable_p) (tree fndecl);
91d231cb 481
f913c102
AO
482 /* Return true if bitfields in RECORD_TYPE should follow the
483 Microsoft Visual C++ bitfield layout rules. */
46c5ad27 484 bool (* ms_bitfield_layout_p) (tree record_type);
f913c102 485
9a8ce21f
JG
486 /* True if the target supports decimal floating point. */
487 bool (* decimal_float_supported_p) (void);
488
ab22c1fa
CF
489 /* True if the target supports fixed-point. */
490 bool (* fixed_point_supported_p) (void);
491
13c1cd82
PB
492 /* Return true if anonymous bitfields affect structure alignment. */
493 bool (* align_anon_bitfield) (void);
494
c2a64439
PB
495 /* Return true if volatile bitfields should use the narrowest type possible.
496 Return false if they should use the container type. */
497 bool (* narrow_volatile_bitfield) (void);
498
f6155fda 499 /* Set up target-specific built-in functions. */
46c5ad27 500 void (* init_builtins) (void);
f6155fda
SS
501
502 /* Expand a target-specific builtin. */
46c5ad27
AJ
503 rtx (* expand_builtin) (tree exp, rtx target, rtx subtarget,
504 enum machine_mode mode, int ignore);
7c262518 505
58646b77
PB
506 /* Select a replacement for a target-specific builtin. This is done
507 *before* regular type checking, and so allows the target to implement
508 a crude form of function overloading. The result is a complete
509 expression that implements the operation. */
510 tree (*resolve_overloaded_builtin) (tree decl, tree params);
511
c2dda19b 512 /* Fold a target-specific builtin. */
a05a80fc 513 tree (* fold_builtin) (tree fndecl, tree arglist, bool ignore);
083cad55 514
6b889d89
UB
515 /* Returns a code for a target-specific builtin that implements
516 reciprocal of the function, or NULL_TREE if not available. */
ac10986f 517 tree (* builtin_reciprocal) (unsigned, bool, bool);
6b889d89 518
608063c3
JB
519 /* For a vendor-specific TYPE, return a pointer to a statically-allocated
520 string containing the C++ mangling for TYPE. In all other cases, return
521 NULL. */
522 const char * (* mangle_type) (tree type);
f18eca82 523
c15c90bb
ZW
524 /* Make any adjustments to libfunc names needed for this target. */
525 void (* init_libfuncs) (void);
526
7c262518
RH
527 /* Given a decl, a section name, and whether the decl initializer
528 has relocs, choose attributes for the section. */
529 /* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION. */
46c5ad27 530 unsigned int (* section_type_flags) (tree, const char *, int);
7c262518 531
e4ec2cac
AO
532 /* True if new jumps cannot be created, to replace existing ones or
533 not, at the current point in the compilation. */
46c5ad27 534 bool (* cannot_modify_jumps_p) (void);
ae46c4e0 535
a3424f5c
RH
536 /* Return a register class for which branch target register
537 optimizations should be applied. */
46c5ad27 538 int (* branch_target_register_class) (void);
a3424f5c
RH
539
540 /* Return true if branch target register optimizations should include
541 callee-saved registers that are not already live during the current
542 function. AFTER_PE_GEN is true if prologues and epilogues have
543 already been generated. */
46c5ad27 544 bool (* branch_target_register_callee_saved) (bool after_pe_gen);
fe3ad572 545
3a04ff64 546 /* True if the constant X cannot be placed in the constant pool. */
46c5ad27 547 bool (* cannot_force_const_mem) (rtx);
3a04ff64 548
0b077eac 549 /* True if the insn X cannot be duplicated. */
46c5ad27 550 bool (* cannot_copy_insn_p) (rtx);
0b077eac 551
8ddf681a
R
552 /* True if X is considered to be commutative. */
553 bool (* commutative_p) (rtx, int);
554
7daebb7a 555 /* Given an address RTX, undo the effects of LEGITIMIZE_ADDRESS. */
46c5ad27 556 rtx (* delegitimize_address) (rtx);
7daebb7a 557
aacd3885
RS
558 /* True if the given constant can be put into an object_block. */
559 bool (* use_blocks_for_constant_p) (enum machine_mode, rtx);
560
561 /* The minimum and maximum byte offsets for anchored addresses. */
562 HOST_WIDE_INT min_anchor_offset;
563 HOST_WIDE_INT max_anchor_offset;
564
565 /* True if section anchors can be used to access the given symbol. */
566 bool (* use_anchors_for_symbol_p) (rtx);
567
4977bab6
ZW
568 /* True if it is OK to do sibling call optimization for the specified
569 call expression EXP. DECL will be the called function, or NULL if
570 this is an indirect call. */
46c5ad27
AJ
571 bool (*function_ok_for_sibcall) (tree decl, tree exp);
572
ae46c4e0 573 /* True if EXP should be placed in a "small data" section. */
46c5ad27 574 bool (* in_small_data_p) (tree);
fb49053f 575
47754fd5
RH
576 /* True if EXP names an object for which name resolution must resolve
577 to the current module. */
46c5ad27 578 bool (* binds_local_p) (tree);
47754fd5 579
5234b8f5
DS
580 /* Modify and return the identifier of a DECL's external name,
581 originally identified by ID, as required by the target,
582 (eg, append @nn to windows32 stdcall function names).
583 The default is to return ID without modification. */
584 tree (* mangle_decl_assembler_name) (tree decl, tree id);
585
fb49053f
RH
586 /* Do something target-specific to record properties of the DECL into
587 the associated SYMBOL_REF. */
46c5ad27 588 void (* encode_section_info) (tree, rtx, int);
772c5265
RH
589
590 /* Undo the effects of encode_section_info on the symbol string. */
46c5ad27 591 const char * (* strip_name_encoding) (const char *);
47754fd5 592
273a2526
RS
593 /* If shift optabs for MODE are known to always truncate the shift count,
594 return the mask that they apply. Return 0 otherwise. */
595 unsigned HOST_WIDE_INT (* shift_truncation_mask) (enum machine_mode mode);
596
bc23502b
PB
597 /* Return the number of divisions in the given MODE that should be present,
598 so that it is profitable to turn the division into a multiplication by
599 the reciprocal. */
600 unsigned int (* min_divisions_for_recip_mul) (enum machine_mode mode);
601
b12cbf2c
AN
602 /* If the representation of integral MODE is such that values are
603 always sign-extended to a wider mode MODE_REP then return
604 SIGN_EXTEND. Return UNKNOWN otherwise. */
605 /* Note that the return type ought to be RTX_CODE, but that's not
606 necessarily defined at this point. */
607 int (* mode_rep_extended) (enum machine_mode mode,
608 enum machine_mode mode_rep);
609
3c50106f 610 /* True if MODE is valid for a pointer in __attribute__((mode("MODE"))). */
46c5ad27 611 bool (* valid_pointer_mode) (enum machine_mode mode);
3c50106f 612
6dd53648
RH
613 /* True if MODE is valid for the target. By "valid", we mean able to
614 be manipulated in non-trivial ways. In particular, this means all
615 the arithmetic is supported. */
616 bool (* scalar_mode_supported_p) (enum machine_mode mode);
617
618 /* Similarly for vector modes. "Supported" here is less strict. At
619 least some operations are supported; need to check optabs or builtins
620 for further details. */
f676971a
EC
621 bool (* vector_mode_supported_p) (enum machine_mode mode);
622
c8e4f0e9 623 /* True if a vector is opaque. */
46c5ad27 624 bool (* vector_opaque_p) (tree);
62e1dfcf 625
3c50106f
RH
626 /* Compute a (partial) cost for rtx X. Return true if the complete
627 cost has been computed, and false if subexpressions should be
628 scanned. In either case, *TOTAL contains the cost result. */
629 /* Note that CODE and OUTER_CODE ought to be RTX_CODE, but that's
630 not necessarily defined at this point. */
46c5ad27 631 bool (* rtx_costs) (rtx x, int code, int outer_code, int *total);
3c50106f 632
dcefdf67
RH
633 /* Compute the cost of X, used as an address. Never called with
634 invalid addresses. */
46c5ad27 635 int (* address_cost) (rtx x);
dcefdf67 636
b48f503c
KK
637 /* Return where to allocate pseudo for a given hard register initial
638 value. */
639 rtx (* allocate_initial_value) (rtx x);
640
96714395
AH
641 /* Given a register, this hook should return a parallel of registers
642 to represent where to find the register pieces. Define this hook
643 if the register and its mode are represented in Dwarf in
644 non-contiguous locations, or if the register should be
645 represented in more than one register in Dwarf. Otherwise, this
646 hook should return NULL_RTX. */
46c5ad27 647 rtx (* dwarf_register_span) (rtx);
96714395 648
37ea0b7e
JM
649 /* If expand_builtin_init_dwarf_reg_sizes needs to fill in table
650 entries not corresponding directly to registers below
651 FIRST_PSEUDO_REGISTER, this hook should generate the necessary
652 code, given the address of the table. */
653 void (* init_dwarf_reg_sizes_extra) (tree);
654
e129d93a
ILT
655 /* Fetch the fixed register(s) which hold condition codes, for
656 targets where it makes sense to look for duplicate assignments to
657 the condition codes. This should return true if there is such a
658 register, false otherwise. The arguments should be set to the
659 fixed register numbers. Up to two condition code registers are
660 supported. If there is only one for this target, the int pointed
661 at by the second argument should be set to -1. */
662 bool (* fixed_condition_code_regs) (unsigned int *, unsigned int *);
663
664 /* If two condition code modes are compatible, return a condition
665 code mode which is compatible with both, such that a comparison
666 done in the returned mode will work for both of the original
667 modes. If the condition code modes are not compatible, return
668 VOIDmode. */
669 enum machine_mode (* cc_modes_compatible) (enum machine_mode,
670 enum machine_mode);
671
18dbd950
RS
672 /* Do machine-dependent code transformations. Called just before
673 delayed-branch scheduling. */
46c5ad27 674 void (* machine_dependent_reorg) (void);
18dbd950 675
c35d187f
RH
676 /* Create the __builtin_va_list type. */
677 tree (* build_builtin_va_list) (void);
678
cdc3ddb8
RH
679 /* Gimplifies a VA_ARG_EXPR. */
680 tree (* gimplify_va_arg_expr) (tree valist, tree type, tree *pre_p,
681 tree *post_p);
682
7bb1ad93
GK
683 /* Validity-checking routines for PCH files, target-specific.
684 get_pch_validity returns a pointer to the data to be stored,
685 and stores the size in its argument. pch_valid_p gets the same
686 information back and returns NULL if the PCH is valid,
687 or an error message if not.
688 */
689 void * (* get_pch_validity) (size_t *);
690 const char * (* pch_valid_p) (const void *, size_t);
691
8d932be3
RS
692 /* If nonnull, this function checks whether a PCH file with the
693 given set of target flags can be used. It returns NULL if so,
694 otherwise it returns an error message. */
695 const char *(*check_pch_target_flags) (int);
696
a841ab8b 697 /* True if the compiler should give an enum type only as many
221ee7c9
KH
698 bytes as it takes to represent the range of possible values of
699 that type. */
700 bool (* default_short_enums) (void);
701
d6da68b9 702 /* This target hook returns an rtx that is used to store the address
a841ab8b 703 of the current frame into the built-in setjmp buffer. */
d6da68b9
KH
704 rtx (* builtin_setjmp_frame_value) (void);
705
67dfe110 706 /* This target hook should add STRING_CST trees for any hard regs
61158923
HPN
707 the port wishes to automatically clobber for an asm. */
708 tree (* md_asm_clobbers) (tree, tree, tree);
67dfe110 709
a1c496cb
EC
710 /* This target hook allows the backend to specify a calling convention
711 in the debug information. This function actually returns an
712 enum dwarf_calling_convention, but because of forward declarations
713 and not wanting to include dwarf2.h everywhere target.h is included
714 the function is being declared as an int. */
715 int (* dwarf_calling_convention) (tree);
716
e54c7471
EB
717 /* This target hook allows the backend to emit frame-related insns that
718 contain UNSPECs or UNSPEC_VOLATILEs. The call frame debugging info
719 engine will invoke it on insns of the form
720 (set (reg) (unspec [...] UNSPEC_INDEX))
721 and
722 (set (reg) (unspec_volatile [...] UNSPECV_INDEX))
723 to let the backend emit the call frame instructions. */
724 void (* dwarf_handle_frame_unspec) (const char *, rtx, int);
725
9d30f3c1
JJ
726 /* Perform architecture specific checking of statements gimplified
727 from VA_ARG_EXPR. LHS is left hand side of MODIFY_EXPR, RHS
728 is right hand side. Returns true if the statements doesn't need
729 to be checked for va_list references. */
7d69de61
RH
730 bool (* stdarg_optimize_hook) (struct stdarg_info *ai, tree lhs, tree rhs);
731
732 /* This target hook allows the operating system to override the DECL
733 that represents the external variable that contains the stack
734 protection guard variable. The type of this DECL is ptr_type_node. */
735 tree (* stack_protect_guard) (void);
736
737 /* This target hook allows the operating system to override the CALL_EXPR
738 that is invoked when a check vs the guard variable fails. */
739 tree (* stack_protect_fail) (void);
9d30f3c1 740
e7e64a25
AS
741 /* Returns NULL if target supports the insn within a doloop block,
742 otherwise it returns an error message. */
743 const char * (*invalid_within_doloop) (rtx);
43d9ad1d
DS
744
745 /* DECL is a variable or function with __attribute__((dllimport))
746 specified. Use this hook if the target needs to add extra validation
747 checks to handle_dll_attribute (). */
748 bool (* valid_dllimport_attribute_p) (tree decl);
083cad55 749
42ba5130
RH
750 /* Functions relating to calls - argument passing, returns, etc. */
751 struct calls {
586de218
KG
752 bool (*promote_function_args) (const_tree fntype);
753 bool (*promote_function_return) (const_tree fntype);
754 bool (*promote_prototypes) (const_tree fntype);
42ba5130 755 rtx (*struct_value_rtx) (tree fndecl, int incoming);
586de218
KG
756 bool (*return_in_memory) (const_tree type, const_tree fndecl);
757 bool (*return_in_msb) (const_tree type);
8cd5a4e0
RH
758
759 /* Return true if a parameter must be passed by reference. TYPE may
760 be null if this is a libcall. CA may be null if this query is
761 from __builtin_va_arg. */
762 bool (*pass_by_reference) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
586de218 763 const_tree type, bool named_arg);
8cd5a4e0 764
42ba5130
RH
765 rtx (*expand_builtin_saveregs) (void);
766 /* Returns pretend_argument_size. */
767 void (*setup_incoming_varargs) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
768 tree type, int *pretend_arg_size,
769 int second_time);
770 bool (*strict_argument_naming) (CUMULATIVE_ARGS *ca);
771 /* Returns true if we should use
772 targetm.calls.setup_incoming_varargs() and/or
773 targetm.calls.strict_argument_naming(). */
774 bool (*pretend_outgoing_varargs_named) (CUMULATIVE_ARGS *ca);
775
776 /* Given a complex type T, return true if a parameter of type T
777 should be passed as two scalars. */
778 bool (* split_complex_arg) (tree type);
fe984136
RH
779
780 /* Return true if type T, mode MODE, may not be passed in registers,
781 but must be passed on the stack. */
782 /* ??? This predicate should be applied strictly after pass-by-reference.
783 Need audit to verify that this is the case. */
586de218 784 bool (* must_pass_in_stack) (enum machine_mode mode, const_tree t);
6cdd5672
RH
785
786 /* Return true if type TYPE, mode MODE, which is passed by reference,
787 should have the object copy generated by the callee rather than
788 the caller. It is never called for TYPE requiring constructors. */
789 bool (* callee_copies) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
586de218 790 const_tree type, bool named);
78a52f11
RH
791
792 /* Return zero for arguments passed entirely on the stack or entirely
793 in registers. If passed in both, return the number of bytes passed
794 in registers; the balance is therefore passed on the stack. */
795 int (* arg_partial_bytes) (CUMULATIVE_ARGS *ca, enum machine_mode mode,
796 tree type, bool named);
4d3e6fae
FJ
797
798 /* Return the diagnostic message string if function without a prototype
799 is not allowed for this 'val' argument; NULL otherwise. */
083cad55 800 const char *(*invalid_arg_for_unprototyped_fn) (tree typelist,
4d3e6fae 801 tree funcdecl, tree val);
1d636cc6
RG
802
803 /* Return an rtx for the return value location of the function
804 specified by FN_DECL_OR_TYPE with a return type of RET_TYPE. */
586de218 805 rtx (*function_value) (const_tree ret_type, const_tree fn_decl_or_type,
1d636cc6 806 bool outgoing);
150cdc9e
RH
807
808 /* Return an rtx for the argument pointer incoming to the
809 current function. */
810 rtx (*internal_arg_pointer) (void);
42ba5130
RH
811 } calls;
812
4de67c26
JM
813 /* Return the diagnostic message string if conversion from FROMTYPE
814 to TOTYPE is not allowed, NULL otherwise. */
815 const char *(*invalid_conversion) (tree fromtype, tree totype);
816
817 /* Return the diagnostic message string if the unary operation OP is
818 not permitted on TYPE, NULL otherwise. */
819 const char *(*invalid_unary_op) (int op, tree type);
820
821 /* Return the diagnostic message string if the binary operation OP
822 is not permitted on TYPE1 and TYPE2, NULL otherwise. */
823 const char *(*invalid_binary_op) (int op, tree type1, tree type2);
824
8a99f6f9
R
825 /* Return the class for a secondary reload, and fill in extra information. */
826 enum reg_class (*secondary_reload) (bool, rtx, enum reg_class,
827 enum machine_mode,
828 struct secondary_reload_info *);
829
c77cd3d1
UB
830 /* Functions specific to the C family of frontends. */
831 struct c {
832 /* Return machine mode for non-standard suffix
833 or VOIDmode if non-standard suffixes are unsupported. */
834 enum machine_mode (*mode_for_suffix) (char);
835 } c;
836
4185ae53
PB
837 /* Functions specific to the C++ frontend. */
838 struct cxx {
839 /* Return the integer type used for guard variables. */
840 tree (*guard_type) (void);
841 /* Return true if only the low bit of the guard should be tested. */
842 bool (*guard_mask_bit) (void);
46e995e0
PB
843 /* Returns the size of the array cookie for an array of type. */
844 tree (*get_cookie_size) (tree);
845 /* Returns true if the element size should be stored in the
846 array cookie. */
847 bool (*cookie_has_size) (void);
d59c7b4b
NC
848 /* Allows backends to perform additional processing when
849 deciding if a class should be exported or imported. */
850 int (*import_export_class) (tree, int);
44d10c10
PB
851 /* Returns true if constructors and destructors return "this". */
852 bool (*cdtor_returns_this) (void);
af287697
MM
853 /* Returns true if the key method for a class can be an inline
854 function, so long as it is not declared inline in the class
855 itself. Returning true is the behavior required by the Itanium
856 C++ ABI. */
857 bool (*key_method_may_be_inline) (void);
1e731102
MM
858 /* DECL is a virtual table, virtual table table, typeinfo object,
859 or other similar implicit class data object that will be
860 emitted with external linkage in this translation unit. No ELF
861 visibility has been explicitly specified. If the target needs
862 to specify a visibility other than that of the containing class,
863 use this hook to set DECL_VISIBILITY and
083cad55 864 DECL_VISIBILITY_SPECIFIED. */
1e731102
MM
865 void (*determine_class_data_visibility) (tree decl);
866 /* Returns true (the default) if virtual tables and other
867 similar implicit class data objects are always COMDAT if they
868 have external linkage. If this hook returns false, then
869 class data for classes whose virtual table will be emitted in
870 only one translation unit will not be COMDAT. */
871 bool (*class_data_always_comdat) (void);
157600d0
GK
872 /* Returns true (the default) if the RTTI for the basic types,
873 which is always defined in the C++ runtime, should be COMDAT;
874 false if it should not be COMDAT. */
875 bool (*library_rtti_comdat) (void);
9f62c3e3
PB
876 /* Returns true if __aeabi_atexit should be used to register static
877 destructors. */
878 bool (*use_aeabi_atexit) (void);
97388150
DS
879 /* Returns true if target may use atexit in the same manner as
880 __cxa_atexit to register static destructors. */
881 bool (*use_atexit_for_cxa_atexit) (void);
43d9ad1d
DS
882 /* TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that
883 has just been defined. Use this hook to make adjustments to the
884 class (eg, tweak visibility or perform any other required
083cad55 885 target modifications). */
43d9ad1d 886 void (*adjust_class_at_definition) (tree type);
4185ae53 887 } cxx;
e0d9d0dd 888
912f2dac
DB
889 /* For targets that need to mark extra registers as live on entry to
890 the function, they should define this target hook and set their
891 bits in the bitmap passed in. */
892 void (*live_on_entry) (bitmap);
4185ae53 893
617a1b71
PB
894 /* True if unwinding tables should be generated by default. */
895 bool unwind_tables_default;
896
47754fd5
RH
897 /* Leave the boolean fields at the end. */
898
899 /* True if arbitrary sections are supported. */
900 bool have_named_sections;
901
434aeebb
RS
902 /* True if we can create zeroed data by switching to a BSS section
903 and then using ASM_OUTPUT_SKIP to allocate the space. */
904 bool have_switchable_bss_sections;
905
47754fd5
RH
906 /* True if "native" constructors and destructors are supported,
907 false if we're using collect2 for the job. */
908 bool have_ctors_dtors;
3d78f2e9
RH
909
910 /* True if thread-local storage is supported. */
911 bool have_tls;
275b6d80
DE
912
913 /* True if a small readonly data section is supported. */
914 bool have_srodata_section;
7606e68f
SS
915
916 /* True if EH frame info sections should be zero-terminated. */
917 bool terminate_dw2_eh_frame_info;
1bc7c5b6
ZW
918
919 /* True if #NO_APP should be emitted at the beginning of
920 assembly output. */
921 bool file_start_app_off;
922
923 /* True if output_file_directive should be called for main_input_filename
924 at the beginning of assembly output. */
925 bool file_start_file_directive;
61f71b34 926
84b8b0e0
ZW
927 /* True if #pragma redefine_extname is to be supported. */
928 bool handle_pragma_redefine_extname;
929
930 /* True if #pragma extern_prefix is to be supported. */
931 bool handle_pragma_extern_prefix;
932
445cf5eb
JM
933 /* True if the target is allowed to reorder memory accesses unless
934 synchronization is explicitly requested. */
935 bool relaxed_ordering;
936
617a1b71
PB
937 /* Returns true if we should generate exception tables for use with the
938 ARM EABI. The effects the encoding of function exception specifications.
939 */
940 bool arm_eabi_unwinder;
941
42ba5130 942 /* Leave the boolean fields at the end. */
672a6f42
NB
943};
944
f6897b10 945extern struct gcc_target targetm;
59587b18 946
1f1d5130
MS
947struct gcc_targetcm {
948 /* Handle target switch CODE (an OPT_* value). ARG is the argument
949 passed to the switch; it is NULL if no argument was. VALUE is the
950 value of ARG if CODE specifies a UInteger option, otherwise it is
951 1 if the positive form of the switch was used and 0 if the negative
952 form was. Return true if the switch was valid. */
953 bool (*handle_c_option) (size_t code, const char *arg, int value);
954};
955
956/* Each target can provide their own. */
957extern struct gcc_targetcm targetcm;
958
59587b18 959#endif /* GCC_TARGET_H */