]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/target.def
In gcc/objc/: 2010-11-03 Nicola Pero <nicola.pero@meta-innovation.com>
[thirdparty/gcc.git] / gcc / target.def
CommitLineData
38f8b050
JR
1/* Target hook definitions.
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
3 Free Software Foundation, Inc.
4
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
23/* The following macros should be provided by the including file:
24
25 DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT): Define a function-valued hook.
26 DEFHOOKPOD(DOC, TYPE, NAME, INIT): Define a piece-of-data 'hook'. */
27
28/* Defaults for optional macros:
29 DEFHOOKPODX(NAME, TYPE, INIT): Like DEFHOOKPOD, but share documentation
30 with the previous 'hook'. */
31#ifndef DEFHOOKPODX
32#define DEFHOOKPODX(NAME, TYPE, INIT) DEFHOOKPOD (NAME, 0, TYPE, INIT)
33#endif
34
35/* HOOKSTRUCT(FRAGMENT): Declarator fragments to encapsulate all the
36 members into a struct gcc_target, which in turn contains several
37 sub-structs. */
38#ifndef HOOKSTRUCT
39#define HOOKSTRUCT(FRAGMENT)
40#endif
41/* HOOK_VECTOR: Start a struct declaration, which then gets its own initializer.
42 HOOK_VECTOR_END: Close a struct declaration, providing a member declarator
43 name for nested use. */
44#ifndef HOOK_VECTOR_1
45#define HOOK_VECTOR_1(NAME, FRAGMENT) HOOKSTRUCT(FRAGMENT)
46#endif
47#define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME {)
48#define HOOK_VECTOR_END(DECL_NAME) HOOK_VECTOR_1(,} DECL_NAME ;)
49
50HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)
51
52/* FIXME: For pre-existing hooks, we can't place the documentation in the
53 documentation field here till we get permission from the FSF to include
54 it in GPLed software - the target hook documentation is so far only
55 available under the GFDL. */
56
57/* A hook should generally be documented by a string in the DOC parameter,
58 which should contain texinfo markup. If the documentation is only available
59 under the GPL, but not under the GFDL, put it in a comment above the hook
60 definition. If the function declaration is available both under GPL and
61 GFDL, but the documentation is only available under the GFDL, put the
62 documentaton in tm.texi.in, heading with @hook <hookname> and closing
63 the paragraph with @end deftypefn / deftypevr as appropriate, and marking
64 the next autogenerated hook with @hook <hookname>.
65 In both these cases, leave the DOC string empty, i.e. "".
f6170701
JR
66 Sometimes, for some historic reason the function declaration
67 has to be documented differently
38f8b050
JR
68 than what it is. In that case, use DEFHOOK_UNDOC to supress auto-generation
69 of documentation. DEFHOOK_UNDOC takes a DOC string which it ignores, so
70 you can put GPLed documentation string there if you have hopes that you
71 can clear the declaration & documentation for GFDL distribution later,
72 in which case you can then simply change the DEFHOOK_UNDOC to DEFHOOK
73 to turn on the autogeneration of the documentation.
74
75 A documentation string of "*" means not to emit any documentation at all,
76 and is mainly used internally for DEFHOOK_UNDOC. It should generally not
77 be used otherwise, but it has its use for exceptional cases where automatic
78 documentation is not wanted, and the real documentation is elsewere, like
79 for TARGET_ASM_{,UN}ALIGNED_INT_OP, which are hooks only for implementation
80 purposes; they refer to structs, the components of which are documented as
81 separate hooks TARGET_ASM_{,UN}ALIGNED_[HSDT]I_OP.
82 A DOC string of 0 is for internal use of DEFHOOKPODX and special table
83 entries only. */
84
85/* Functions that output assembler for the target. */
86#define HOOK_PREFIX "TARGET_ASM_"
87HOOK_VECTOR (TARGET_ASM_OUT, asm_out)
88
89/* Opening and closing parentheses for asm expression grouping. */
90DEFHOOKPOD
91(open_paren,
92 "",
93 const char *, "(")
94DEFHOOKPODX (close_paren, const char *, ")")
95
96/* Assembler instructions for creating various kinds of integer object. */
97DEFHOOKPOD
98(byte_op,
99 "",
100 const char *, "\t.byte\t")
101DEFHOOKPOD (aligned_op, "*", struct asm_int_op, TARGET_ASM_ALIGNED_INT_OP)
102DEFHOOKPOD (unaligned_op, "*", struct asm_int_op, TARGET_ASM_UNALIGNED_INT_OP)
103
ad0c4c36
DD
104/* The maximum number of bytes to skip when applying
105 LABEL_ALIGN_AFTER_BARRIER. */
106DEFHOOK
107(label_align_after_barrier_max_skip,
108 "",
109 int, (rtx label),
110 default_label_align_after_barrier_max_skip)
111
112/* The maximum number of bytes to skip when applying
113 LOOP_ALIGN. */
114DEFHOOK
115(loop_align_max_skip,
116 "",
117 int, (rtx label),
118 default_loop_align_max_skip)
119
120/* The maximum number of bytes to skip when applying
121 LABEL_ALIGN. */
122DEFHOOK
123(label_align_max_skip,
124 "",
125 int, (rtx label),
126 default_label_align_max_skip)
127
128/* The maximum number of bytes to skip when applying
129 JUMP_ALIGN. */
130DEFHOOK
131(jump_align_max_skip,
132 "",
133 int, (rtx label),
134 default_jump_align_max_skip)
135
38f8b050
JR
136/* Try to output the assembler code for an integer object whose
137 value is given by X. SIZE is the size of the object in bytes and
138 ALIGNED_P indicates whether it is aligned. Return true if
139 successful. Only handles cases for which BYTE_OP, ALIGNED_OP
140 and UNALIGNED_OP are NULL. */
141DEFHOOK
142(integer,
143 "",
144 /* Only handles cases for which BYTE_OP, ALIGNED_OP and UNALIGNED_OP are
145 NULL. */
146 bool, (rtx x, unsigned int size, int aligned_p),
147 default_assemble_integer)
148
149/* Output code that will globalize a label. */
150DEFHOOK
151(globalize_label,
152 "",
153 void, (FILE *stream, const char *name),
154 default_globalize_label)
155
156/* Output code that will globalize a declaration. */
157DEFHOOK
158(globalize_decl_name,
159 "",
160 void, (FILE *stream, tree decl), default_globalize_decl_name)
161
162/* Output code that will emit a label for unwind info, if this
163 target requires such labels. Second argument is the decl the
164 unwind info is associated with, third is a boolean: true if
165 this is for exception handling, fourth is a boolean: true if
166 this is only a placeholder for an omitted FDE. */
167DEFHOOK
168(emit_unwind_label,
169 "",
170 void, (FILE *stream, tree decl, int for_eh, int empty),
171 default_emit_unwind_label)
172
173/* Output code that will emit a label to divide up the exception table. */
174DEFHOOK
175(emit_except_table_label,
176 "",
177 void, (FILE *stream),
178 default_emit_except_table_label)
179
a68b5e52
RH
180/* Emit a directive for setting the personality for the function. */
181DEFHOOK
182(emit_except_personality,
183 "If the target implements @code{TARGET_ASM_UNWIND_EMIT}, this hook may be\
184 used to emit a directive to install a personality hook into the unwind\
185 info. This hook should not be used if dwarf2 unwind info is used.",
186 void, (rtx personality),
187 NULL)
188
38f8b050
JR
189/* Emit any directives required to unwind this instruction. */
190DEFHOOK
191(unwind_emit,
192 "",
193 void, (FILE *stream, rtx insn),
2784ed9c 194 NULL)
38f8b050 195
3bc6b3e6
RH
196DEFHOOKPOD
197(unwind_emit_before_insn,
198 "True if the @code{TARGET_ASM_UNWIND_EMIT} hook should be called before\
199 the assembly for @var{insn} has been emitted, false if the hook should\
200 be called afterward.",
201 bool, true)
202
38f8b050
JR
203/* Output an internal label. */
204DEFHOOK
205(internal_label,
206 "",
207 void, (FILE *stream, const char *prefix, unsigned long labelno),
208 default_internal_label)
209
210/* Output label for the constant. */
ad78130c 211DEFHOOK
38f8b050
JR
212(declare_constant_name,
213 "",
ad78130c 214 void, (FILE *file, const char *name, const_tree expr, HOST_WIDE_INT size),
38f8b050
JR
215 default_asm_declare_constant_name)
216
217/* Emit a ttype table reference to a typeinfo object. */
218DEFHOOK
219(ttype,
220 "",
221 bool, (rtx sym),
222 hook_bool_rtx_false)
223
224/* Emit an assembler directive to set visibility for the symbol
225 associated with the tree decl. */
226DEFHOOK
227(assemble_visibility,
228 "",
229 void, (tree decl, int visibility),
230 default_assemble_visibility)
231
232/* Output the assembler code for entry to a function. */
233DEFHOOK
234(function_prologue,
235 "",
236 void, (FILE *file, HOST_WIDE_INT size),
237 default_function_pro_epilogue)
238
239/* Output the assembler code for end of prologue. */
240DEFHOOK
241(function_end_prologue,
242 "",
243 void, (FILE *file),
244 no_asm_to_stream)
245
246/* Output the assembler code for start of epilogue. */
247DEFHOOK
248(function_begin_epilogue,
249 "",
250 void, (FILE *file),
251 no_asm_to_stream)
252
253/* Output the assembler code for function exit. */
254DEFHOOK
255(function_epilogue,
256 "",
257 void, (FILE *file, HOST_WIDE_INT size),
258 default_function_pro_epilogue)
259
260/* Initialize target-specific sections. */
261DEFHOOK
262(init_sections,
263 "",
264 void, (void),
265 hook_void_void)
266
267/* Tell assembler to change to section NAME with attributes FLAGS.
268 If DECL is non-NULL, it is the VAR_DECL or FUNCTION_DECL with
269 which this section is associated. */
270DEFHOOK
271(named_section,
272 "",
273 void, (const char *name, unsigned int flags, tree decl),
274 default_no_named_section)
275
276/* Return a mask describing how relocations should be treated when
277 selecting sections. Bit 1 should be set if global relocations
278 should be placed in a read-write section; bit 0 should be set if
279 local relocations should be placed in a read-write section. */
280DEFHOOK
281(reloc_rw_mask,
282 "",
283 int, (void),
284 default_reloc_rw_mask)
285
286 /* Return a section for EXP. It may be a DECL or a constant. RELOC
287 is nonzero if runtime relocations must be applied; bit 1 will be
288 set if the runtime relocations require non-local name resolution.
289 ALIGN is the required alignment of the data. */
290DEFHOOK
291(select_section,
292 "",
293 section *, (tree exp, int reloc, unsigned HOST_WIDE_INT align),
294 default_select_section)
295
296/* Return a section for X. MODE is X's mode and ALIGN is its
297 alignment in bits. */
298DEFHOOK
299(select_rtx_section,
300 "",
301 section *, (enum machine_mode mode, rtx x, unsigned HOST_WIDE_INT align),
302 default_select_rtx_section)
303
304/* Select a unique section name for DECL. RELOC is the same as
305 for SELECT_SECTION. */
306DEFHOOK
307(unique_section,
308 "",
309 void, (tree decl, int reloc),
310 default_unique_section)
311
312/* Return the readonly data section associated with function DECL. */
313DEFHOOK
314(function_rodata_section,
315 "",
316 section *, (tree decl),
317 default_function_rodata_section)
318
319/* Output a constructor for a symbol with a given priority. */
320DEFHOOK
321(constructor,
322 "",
323 void, (rtx symbol, int priority), NULL)
324
325/* Output a destructor for a symbol with a given priority. */
326DEFHOOK
327(destructor,
328 "",
329 void, (rtx symbol, int priority), NULL)
330
331/* Output the assembler code for a thunk function. THUNK_DECL is the
332 declaration for the thunk function itself, FUNCTION is the decl for
333 the target function. DELTA is an immediate constant offset to be
334 added to THIS. If VCALL_OFFSET is nonzero, the word at
335 *(*this + vcall_offset) should be added to THIS. */
336DEFHOOK
337(output_mi_thunk,
338 "",
339 void, (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta,
340 HOST_WIDE_INT vcall_offset, tree function),
341 NULL)
342
343/* Determine whether output_mi_thunk would succeed. */
344/* ??? Ideally, this hook would not exist, and success or failure
345 would be returned from output_mi_thunk directly. But there's
346 too much undo-able setup involved in invoking output_mi_thunk.
347 Could be fixed by making output_mi_thunk emit rtl instead of
348 text to the output file. */
349DEFHOOK
350(can_output_mi_thunk,
351 "",
352 bool, (const_tree thunk_fndecl, HOST_WIDE_INT delta,
353 HOST_WIDE_INT vcall_offset, const_tree function),
354 hook_bool_const_tree_hwi_hwi_const_tree_false)
355
356/* Output any boilerplate text needed at the beginning of a
357 translation unit. */
358DEFHOOK
359(file_start,
360 "",
361 void, (void),
362 default_file_start)
363
364/* Output any boilerplate text needed at the end of a translation unit. */
365DEFHOOK
366(file_end,
367 "",
368 void, (void),
369 hook_void_void)
370
371/* Output any boilerplate text needed at the beginning of an
372 LTO output stream. */
373DEFHOOK
374(lto_start,
375 "",
376 void, (void),
377 hook_void_void)
378
379/* Output any boilerplate text needed at the end of an
380 LTO output stream. */
381DEFHOOK
382(lto_end,
383 "",
384 void, (void),
385 hook_void_void)
386
387/* Output any boilerplace text needed at the end of a
388 translation unit before debug and unwind info is emitted. */
389DEFHOOK
390(code_end,
391 "",
392 void, (void),
393 hook_void_void)
394
395/* Output an assembler pseudo-op to declare a library function name
396 external. */
397DEFHOOK
398(external_libcall,
399 "",
400 void, (rtx symref),
401 default_external_libcall)
402
403/* Output an assembler directive to mark decl live. This instructs
404 linker to not dead code strip this symbol. */
405DEFHOOK
406(mark_decl_preserved,
407 "",
408 void, (const char *symbol),
409 hook_void_constcharptr)
410
411/* Output a record of the command line switches that have been passed. */
412DEFHOOK
413(record_gcc_switches,
414 "",
415 int, (print_switch_type type, const char *text),
416 NULL)
417
418/* The name of the section that the example ELF implementation of
419 record_gcc_switches will use to store the information. Target
420 specific versions of record_gcc_switches may or may not use
421 this information. */
422DEFHOOKPOD
423(record_gcc_switches_section,
424 "",
425 const char *, ".GCC.command.line")
426
427/* Output the definition of a section anchor. */
428DEFHOOK
429(output_anchor,
430 "",
431 void, (rtx x),
432 default_asm_output_anchor)
433
434/* Output a DTP-relative reference to a TLS symbol. */
435DEFHOOK
436(output_dwarf_dtprel,
437 "",
438 void, (FILE *file, int size, rtx x),
439 NULL)
440
441/* Some target machines need to postscan each insn after it is output. */
442DEFHOOK
443(final_postscan_insn,
444 "",
445 void, (FILE *file, rtx insn, rtx *opvec, int noperands),
446 NULL)
447
448/* Emit the trampoline template. This hook may be NULL. */
449DEFHOOK
450(trampoline_template,
451 "",
452 void, (FILE *f),
453 NULL)
454
b5f5d41d
AS
455DEFHOOK
456(output_source_filename,
457 "Output COFF information or DWARF debugging information which indicates\
458 that filename @var{name} is the current source file to the stdio\
459 stream @var{file}.\n\
460 \n\
461 This target hook need not be defined if the standard form of output\
462 for the file format in use is appropriate.",
463 void ,(FILE *file, const char *name),
464 default_asm_output_source_filename)
465
6cbd8875
AS
466DEFHOOK
467(output_addr_const_extra,
468 "",
469 bool, (FILE *file, rtx x),
470 default_asm_output_addr_const_extra)
471
38f8b050
JR
472/* ??? The TARGET_PRINT_OPERAND* hooks are part of the asm_out struct,
473 even though that is not reflected in the macro name to override their
474 initializers. */
475#undef HOOK_PREFIX
476#define HOOK_PREFIX "TARGET_"
477
478/* Emit a machine-specific insn operand. */
4d00d5dd
JR
479/* ??? tm.texi only documents the old macro PRINT_OPERAND,
480 not this hook, and uses a different name for the argument FILE. */
38f8b050
JR
481DEFHOOK_UNDOC
482(print_operand,
483 "",
484 void, (FILE *file, rtx x, int code),
485 default_print_operand)
486
487/* Emit a machine-specific memory address. */
4d00d5dd
JR
488/* ??? tm.texi only documents the old macro PRINT_OPERAND_ADDRESS,
489 not this hook, and uses different argument names. */
38f8b050
JR
490DEFHOOK_UNDOC
491(print_operand_address,
492 "",
493 void, (FILE *file, rtx addr),
494 default_print_operand_address)
495
496/* Determine whether CODE is a valid punctuation character for the
497 `print_operand' hook. */
4d00d5dd
JR
498/* ??? tm.texi only documents the old macro PRINT_OPERAND_PUNCT_VALID_P,
499 not this hook. */
38f8b050
JR
500DEFHOOK_UNDOC
501(print_operand_punct_valid_p,
502 "",
503 bool ,(unsigned char code),
504 default_print_operand_punct_valid_p)
505
506HOOK_VECTOR_END (asm_out)
507
508/* Functions relating to instruction scheduling. All of these
509 default to null pointers, which haifa-sched.c looks for and handles. */
510#undef HOOK_PREFIX
511#define HOOK_PREFIX "TARGET_SCHED_"
512HOOK_VECTOR (TARGET_SCHED, sched)
513
514/* Given the current cost, COST, of an insn, INSN, calculate and
515 return a new cost based on its relationship to DEP_INSN through
516 the dependence LINK. The default is to make no adjustment. */
517DEFHOOK
518(adjust_cost,
519 "",
520 int, (rtx insn, rtx link, rtx dep_insn, int cost), NULL)
521
522/* Adjust the priority of an insn as you see fit. Returns the new priority. */
523DEFHOOK
524(adjust_priority,
525 "",
526 int, (rtx insn, int priority), NULL)
527
528/* Function which returns the maximum number of insns that can be
529 scheduled in the same machine cycle. This must be constant
530 over an entire compilation. The default is 1. */
531DEFHOOK
532(issue_rate,
533 "",
534 int, (void), NULL)
535
536/* Calculate how much this insn affects how many more insns we
537 can emit this cycle. Default is they all cost the same. */
538DEFHOOK
539(variable_issue,
540 "",
541 int, (FILE *file, int verbose, rtx insn, int more), NULL)
542
543/* Initialize machine-dependent scheduling code. */
544DEFHOOK
545(init,
546 "",
547 void, (FILE *file, int verbose, int max_ready), NULL)
548
549/* Finalize machine-dependent scheduling code. */
550DEFHOOK
551(finish,
552 "",
553 void, (FILE *file, int verbose), NULL)
554
555 /* Initialize machine-dependent function wide scheduling code. */
556DEFHOOK
557(init_global,
558 "",
559 void, (FILE *file, int verbose, int old_max_uid), NULL)
560
561/* Finalize machine-dependent function wide scheduling code. */
562DEFHOOK
563(finish_global,
564 "",
565 void, (FILE *file, int verbose), NULL)
566
567/* Reorder insns in a machine-dependent fashion, in two different
568 places. Default does nothing. */
569DEFHOOK
570(reorder,
571 "",
572 int, (FILE *file, int verbose, rtx *ready, int *n_readyp, int clock), NULL)
573
574DEFHOOK
575(reorder2,
576 "",
577 int, (FILE *file, int verbose, rtx *ready, int *n_readyp, int clock), NULL)
578
579/* The following member value is a pointer to a function called
580 after evaluation forward dependencies of insns in chain given
581 by two parameter values (head and tail correspondingly). */
582DEFHOOK
583(dependencies_evaluation_hook,
584 "",
585 void, (rtx head, rtx tail), NULL)
586
587/* The values of the following four members are pointers to functions
588 used to simplify the automaton descriptions. dfa_pre_cycle_insn and
589 dfa_post_cycle_insn give functions returning insns which are used to
590 change the pipeline hazard recognizer state when the new simulated
591 processor cycle correspondingly starts and finishes. The function
592 defined by init_dfa_pre_cycle_insn and init_dfa_post_cycle_insn are
593 used to initialize the corresponding insns. The default values of
594 the members result in not changing the automaton state when the
595 new simulated processor cycle correspondingly starts and finishes. */
596
597DEFHOOK
598(init_dfa_pre_cycle_insn,
599 "",
600 void, (void), NULL)
601
602DEFHOOK
603(dfa_pre_cycle_insn,
604 "",
605 rtx, (void), NULL)
606
607DEFHOOK
608(init_dfa_post_cycle_insn,
609 "",
610 void, (void), NULL)
611
612DEFHOOK
613(dfa_post_cycle_insn,
614 "",
615 rtx, (void), NULL)
616
617/* The values of the following two members are pointers to
618 functions used to simplify the automaton descriptions.
619 dfa_pre_advance_cycle and dfa_post_advance_cycle are getting called
620 immediately before and after cycle is advanced. */
621
622DEFHOOK
623(dfa_pre_advance_cycle,
624 "",
625 void, (void), NULL)
626
627DEFHOOK
628(dfa_post_advance_cycle,
629 "",
630 void, (void), NULL)
631
632/* The following member value is a pointer to a function returning value
633 which defines how many insns in queue `ready' will we try for
634 multi-pass scheduling. If the member value is nonzero and the
635 function returns positive value, the DFA based scheduler will make
636 multi-pass scheduling for the first cycle. In other words, we will
637 try to choose ready insn which permits to start maximum number of
638 insns on the same cycle. */
639DEFHOOK
640(first_cycle_multipass_dfa_lookahead,
641 "",
642 int, (void), NULL)
643
644/* The following member value is pointer to a function controlling
645 what insns from the ready insn queue will be considered for the
646 multipass insn scheduling. If the hook returns zero for insn
647 passed as the parameter, the insn will be not chosen to be issued. */
648DEFHOOK
649(first_cycle_multipass_dfa_lookahead_guard,
650 "",
651 int, (rtx insn), NULL)
652
894fd6f2
MK
653/* This hook prepares the target for a new round of multipass
654 scheduling.
655 DATA is a pointer to target-specific data used for multipass scheduling.
656 READY_TRY and N_READY represent the current state of search in the
657 optimization space. The target can filter out instructions that
658 should not be tried during current round by setting corresponding
659 elements in READY_TRY to non-zero.
660 FIRST_CYCLE_INSN_P is true if this is the first round of multipass
661 scheduling on current cycle. */
662DEFHOOK
663(first_cycle_multipass_begin,
664 "",
665 void, (void *data, char *ready_try, int n_ready, bool first_cycle_insn_p),
666 NULL)
667
668/* This hook is called when multipass scheduling evaluates instruction INSN.
669 DATA is a pointer to target-specific data that can be used to record effects
670 of INSN on CPU that are not described in DFA.
671 READY_TRY and N_READY represent the current state of search in the
672 optimization space. The target can filter out instructions that
673 should not be tried after issueing INSN by setting corresponding
674 elements in READY_TRY to non-zero.
675 INSN is the instruction being evaluated.
676 PREV_DATA is a pointer to target-specific data corresponding
677 to a state before issueing INSN. */
678DEFHOOK
679(first_cycle_multipass_issue,
680 "",
681 void, (void *data, char *ready_try, int n_ready, rtx insn,
682 const void *prev_data), NULL)
683
684/* This hook is called when multipass scheduling backtracks from evaluation of
685 instruction corresponding to DATA.
686 DATA is a pointer to target-specific data that stores the effects
687 of instruction from which the algorithm backtracks on CPU that are not
688 described in DFA.
689 READY_TRY and N_READY represent the current state of search in the
690 optimization space. The target can filter out instructions that
691 should not be tried after issueing INSN by setting corresponding
692 elements in READY_TRY to non-zero. */
693DEFHOOK
694(first_cycle_multipass_backtrack,
695 "",
696 void, (const void *data, char *ready_try, int n_ready), NULL)
697
698/* This hook notifies the target about the result of the concluded current
699 round of multipass scheduling.
700 DATA is a pointer.
701 If DATA is non-NULL it points to target-specific data used for multipass
702 scheduling which corresponds to instruction at the start of the chain of
703 the winning solution. DATA is NULL when multipass scheduling cannot find
704 a good enough solution on current cycle and decides to retry later,
705 usually after advancing the cycle count. */
706DEFHOOK
707(first_cycle_multipass_end,
708 "",
709 void, (const void *data), NULL)
710
711/* This hook is called to initialize target-specific data for multipass
712 scheduling after it has been allocated.
713 DATA is a pointer to target-specific data that stores the effects
714 of instruction from which the algorithm backtracks on CPU that are not
715 described in DFA. */
716DEFHOOK
717(first_cycle_multipass_init,
718 "",
719 void, (void *data), NULL)
720
721/* This hook is called to finalize target-specific data for multipass
722 scheduling before it is deallocated.
723 DATA is a pointer to target-specific data that stores the effects
724 of instruction from which the algorithm backtracks on CPU that are not
725 described in DFA. */
726DEFHOOK
727(first_cycle_multipass_fini,
728 "",
729 void, (void *data), NULL)
730
38f8b050
JR
731/* The following member value is pointer to a function called by
732 the insn scheduler before issuing insn passed as the third
733 parameter on given cycle. If the hook returns nonzero, the
734 insn is not issued on given processors cycle. Instead of that,
735 the processor cycle is advanced. If the value passed through
736 the last parameter is zero, the insn ready queue is not sorted
737 on the new cycle start as usually. The first parameter passes
738 file for debugging output. The second one passes the scheduler
739 verbose level of the debugging output. The forth and the fifth
740 parameter values are correspondingly processor cycle on which
741 the previous insn has been issued and the current processor cycle. */
c06bbdf7 742DEFHOOK
38f8b050
JR
743(dfa_new_cycle,
744 "",
c06bbdf7
JR
745 int, (FILE *dump, int verbose, rtx insn, int last_clock,
746 int clock, int *sort_p),
38f8b050
JR
747 NULL)
748
749/* The following member value is a pointer to a function called by the
750 insn scheduler. It should return true if there exists a dependence
751 which is considered costly by the target, between the insn
752 DEP_PRO (&_DEP), and the insn DEP_CON (&_DEP). The first parameter is
753 the dep that represents the dependence between the two insns. The
754 second argument is the cost of the dependence as estimated by
755 the scheduler. The last argument is the distance in cycles
756 between the already scheduled insn (first parameter) and the
757 second insn (second parameter). */
758DEFHOOK
759(is_costly_dependence,
760 "",
761 bool, (struct _dep *_dep, int cost, int distance), NULL)
762
763DEFHOOK_UNDOC
764(adjust_cost_2,
765 "Given the current cost, @var{cost}, of an insn, @var{insn}, calculate and\
766 return a new cost based on its relationship to @var{dep_insn} through the\
767 dependence of weakness @var{dw}. The default is to make no adjustment.",
768 int, (rtx insn, int dep_type1, rtx dep_insn, int cost, int dw), NULL)
769
770/* The following member value is a pointer to a function called
771 by the insn scheduler. This hook is called to notify the backend
772 that new instructions were emitted. */
773DEFHOOK
774(h_i_d_extended,
775 "",
776 void, (void), NULL)
777
778/* Next 5 functions are for multi-point scheduling. */
779
780/* Allocate memory for scheduler context. */
781DEFHOOK
782(alloc_sched_context,
783 "",
784 void *, (void), NULL)
785
786/* Fills the context from the local machine scheduler context. */
787DEFHOOK
788(init_sched_context,
789 "",
790 void, (void *tc, bool clean_p), NULL)
791
792/* Sets local machine scheduler context to a saved value. */
793DEFHOOK
794(set_sched_context,
795 "",
796 void, (void *tc), NULL)
797
798/* Clears a scheduler context so it becomes like after init. */
799DEFHOOK
800(clear_sched_context,
801 "",
802 void, (void *tc), NULL)
803
804/* Frees the scheduler context. */
805DEFHOOK
806(free_sched_context,
807 "",
808 void, (void *tc), NULL)
809
810/* The following member value is a pointer to a function called
811 by the insn scheduler.
812 The first parameter is an instruction, the second parameter is the type
813 of the requested speculation, and the third parameter is a pointer to the
814 speculative pattern of the corresponding type (set if return value == 1).
815 It should return
816 -1, if there is no pattern, that will satisfy the requested speculation type,
817 0, if current pattern satisfies the requested speculation type,
818 1, if pattern of the instruction should be changed to the newly
819 generated one. */
820DEFHOOK
821(speculate_insn,
822 "",
823 int, (rtx insn, int request, rtx *new_pat), NULL)
824
825/* The following member value is a pointer to a function called
826 by the insn scheduler. It should return true if the check instruction
827 passed as the parameter needs a recovery block. */
828DEFHOOK
829(needs_block_p,
830 "",
831 bool, (int dep_status), NULL)
832
833/* The following member value is a pointer to a function called
834 by the insn scheduler. It should return a pattern for the check
835 instruction.
836 The first parameter is a speculative instruction, the second parameter
837 is the label of the corresponding recovery block (or null, if it is a
838 simple check). If the mutation of the check is requested (e.g. from
839 ld.c to chk.a), the third parameter is true - in this case the first
840 parameter is the previous check. */
841DEFHOOK
842(gen_spec_check,
843 "",
844 rtx, (rtx insn, rtx label, int mutate_p), NULL)
845
846/* The following member value is a pointer to a function controlling
847 what insns from the ready insn queue will be considered for the
848 multipass insn scheduling. If the hook returns zero for the insn
849 passed as the parameter, the insn will not be chosen to be
850 issued. This hook is used to discard speculative instructions,
851 that stand at the first position of the ready list. */
852DEFHOOK
853(first_cycle_multipass_dfa_lookahead_guard_spec,
854 "",
855 bool, (const_rtx insn), NULL)
856
857/* The following member value is a pointer to a function that provides
858 information about the speculation capabilities of the target.
859 The parameter is a pointer to spec_info variable. */
860DEFHOOK
861(set_sched_flags,
862 "",
863 void, (struct spec_info_def *spec_info), NULL)
864
865DEFHOOK_UNDOC
866(get_insn_spec_ds,
867 "Return speculation types of instruction @var{insn}.",
868 int, (rtx insn), NULL)
869
870DEFHOOK_UNDOC
871(get_insn_checked_ds,
872 "Return speculation types that are checked for instruction @var{insn}",
873 int, (rtx insn), NULL)
874
875DEFHOOK_UNDOC
876(skip_rtx_p,
877 "Return bool if rtx scanning should just skip current layer and\
878 advance to the inner rtxes.",
879 bool, (const_rtx x), NULL)
880
881/* The following member value is a pointer to a function that provides
882 information about the target resource-based lower bound which is
883 used by the swing modulo scheduler. The parameter is a pointer
884 to ddg variable. */
885DEFHOOK
886(sms_res_mii,
887 "",
888 int, (struct ddg *g), NULL)
889
7942e47e
RY
890/* The following member value is a function that initializes dispatch
891 schedling and adds instructions to dispatch window according to its
892 parameters. */
893DEFHOOK
894(dispatch_do,
895"",
896void, (rtx insn, int x),
897hook_void_rtx_int)
898
899/* The following member value is a a function that returns true is
900 dispatch schedling is supported in hardware and condition passed
901 as the second parameter is true. */
902DEFHOOK
903(dispatch,
904"",
905bool, (rtx insn, int x),
906hook_bool_rtx_int_false)
907
38f8b050
JR
908HOOK_VECTOR_END (sched)
909
910/* Functions relating to vectorization. */
911#undef HOOK_PREFIX
912#define HOOK_PREFIX "TARGET_VECTORIZE_"
913HOOK_VECTOR (TARGET_VECTORIZE, vectorize)
914
915/* The following member value is a pointer to a function called
916 by the vectorizer, and return the decl of the target builtin
917 function. */
918DEFHOOK
919(builtin_mask_for_load,
920 "",
921 tree, (void), NULL)
922
923/* Returns a code for builtin that realizes vectorized version of
924 function, or NULL_TREE if not available. */
925DEFHOOK
926(builtin_vectorized_function,
927 "",
928 tree, (tree fndecl, tree vec_type_out, tree vec_type_in),
929 default_builtin_vectorized_function)
930
931/* Returns a function declaration for a builtin that realizes the
932 vector conversion, or NULL_TREE if not available. */
933DEFHOOK
934(builtin_conversion,
935 "",
936 tree, (unsigned code, tree dest_type, tree src_type),
937 default_builtin_vectorized_conversion)
938
939/* Target builtin that implements vector widening multiplication.
940 builtin_mul_widen_eve computes the element-by-element products
941 for the even elements, and builtin_mul_widen_odd computes the
942 element-by-element products for the odd elements. */
943DEFHOOK
944(builtin_mul_widen_even,
945 "",
946 tree, (tree x), NULL)
947
948DEFHOOK
949(builtin_mul_widen_odd,
950 "",
951 tree, (tree x), NULL)
952
720f5239
IR
953/* Cost of different vector/scalar statements in vectorization cost
954 model. In case of misaligned vector loads and stores the cost depends
955 on the data type and misalignment value. */
38f8b050
JR
956DEFHOOK
957(builtin_vectorization_cost,
958 "",
720f5239 959 int, (enum vect_cost_for_stmt type_of_cost, tree vectype, int misalign),
38f8b050
JR
960 default_builtin_vectorization_cost)
961
962/* Return true if vector alignment is reachable (by peeling N
963 iterations) for the given type. */
964DEFHOOK
965(vector_alignment_reachable,
966 "",
967 bool, (const_tree type, bool is_packed),
968 default_builtin_vector_alignment_reachable)
969
970/* Target builtin that implements vector permute. */
971DEFHOOK
972(builtin_vec_perm,
973 "",
974 tree, (tree type, tree *mask_element_type), NULL)
975
976/* Return true if a vector created for builtin_vec_perm is valid. */
977DEFHOOK
978(builtin_vec_perm_ok,
979 "",
980 bool, (tree vec_type, tree mask),
981 hook_bool_tree_tree_true)
982
983/* Return true if the target supports misaligned store/load of a
984 specific factor denoted in the third parameter. The last parameter
985 is true if the access is defined in a packed struct. */
986DEFHOOK
987(support_vector_misalignment,
988 "",
989 bool,
990 (enum machine_mode mode, const_tree type, int misalignment, bool is_packed),
991 default_builtin_support_vector_misalignment)
992
cc4b5170
RG
993/* Returns the preferred mode for SIMD operations for the specified
994 scalar mode. */
26983c22 995DEFHOOK
cc4b5170 996(preferred_simd_mode,
26983c22 997 "",
cc4b5170 998 enum machine_mode,
26983c22 999 (enum machine_mode mode),
cc4b5170 1000 default_preferred_simd_mode)
26983c22 1001
767f865f
RG
1002/* Returns a mask of vector sizes to iterate over when auto-vectorizing
1003 after processing the preferred one derived from preferred_simd_mode. */
1004DEFHOOK
1005(autovectorize_vector_sizes,
1006 "",
1007 unsigned int,
1008 (void),
1009 default_autovectorize_vector_sizes)
1010
38f8b050
JR
1011HOOK_VECTOR_END (vectorize)
1012
1013#undef HOOK_PREFIX
1014#define HOOK_PREFIX "TARGET_"
1015
1016/* The initial value of target_flags. */
1017DEFHOOKPOD
1018(default_target_flags,
1019 "",
1020 int, 0)
1021
1022/* Allow target specific overriding of option settings after options have
1023 been changed by an attribute or pragma or when it is reset at the
1024 end of the code affected by an attribute or pragma. */
1025DEFHOOK
1026(override_options_after_change,
1027 "",
1028 void, (void),
1029 hook_void_void)
1030
1031/* Handle target switch CODE (an OPT_* value). ARG is the argument
1032 passed to the switch; it is NULL if no argument was. VALUE is the
1033 value of ARG if CODE specifies a UInteger option, otherwise it is
1034 1 if the positive form of the switch was used and 0 if the negative
1035 form was. Return true if the switch was valid. */
1036DEFHOOK
1037(handle_option,
1038 "",
1039 bool, (size_t code, const char *arg, int value),
1040 hook_bool_size_t_constcharptr_int_true)
1041
38f8b050
JR
1042/* Display extra, target specific information in response to a
1043 --target-help switch. */
1044DEFHOOK
1045(help,
1046 "",
1047 void, (void), NULL)
1048
1049DEFHOOK_UNDOC
1050(eh_return_filter_mode,
1051 "Return machine mode for filter value.",
1052 enum machine_mode, (void),
1053 default_eh_return_filter_mode)
1054
1055/* Return machine mode for libgcc expanded cmp instructions. */
1056DEFHOOK
1057(libgcc_cmp_return_mode,
1058 "",
1059 enum machine_mode, (void),
1060 default_libgcc_cmp_return_mode)
1061
1062/* Return machine mode for libgcc expanded shift instructions. */
1063DEFHOOK
1064(libgcc_shift_count_mode,
1065 "",
1066 enum machine_mode, (void),
1067 default_libgcc_shift_count_mode)
1068
1069/* Return machine mode to be used for _Unwind_Word type. */
1070DEFHOOK
1071(unwind_word_mode,
1072 "",
1073 enum machine_mode, (void),
1074 default_unwind_word_mode)
1075
1076/* Given two decls, merge their attributes and return the result. */
1077DEFHOOK
1078(merge_decl_attributes,
1079 "",
1080 tree, (tree olddecl, tree newdecl),
1081 merge_decl_attributes)
1082
1083/* Given two types, merge their attributes and return the result. */
1084DEFHOOK
1085(merge_type_attributes,
1086 "",
1087 tree, (tree type1, tree type2),
1088 merge_type_attributes)
1089
1090/* Table of machine attributes and functions to handle them.
1091 Ignored if NULL. */
1092DEFHOOKPOD
1093(attribute_table,
1094 "",
1095 const struct attribute_spec *, NULL)
1096
1097/* Return true iff attribute NAME expects a plain identifier as its first
1098 argument. */
1099DEFHOOK
1100(attribute_takes_identifier_p,
1101 "",
1102 bool, (const_tree name),
1103 hook_bool_const_tree_false)
1104
1105/* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
1106 one if they are compatible and two if they are nearly compatible
1107 (which causes a warning to be generated). */
1108DEFHOOK
1109(comp_type_attributes,
1110 "",
1111 int, (const_tree type1, const_tree type2),
1112 hook_int_const_tree_const_tree_1)
1113
1114/* Assign default attributes to the newly defined TYPE. */
1115DEFHOOK
1116(set_default_type_attributes,
1117 "",
1118 void, (tree type),
1119 hook_void_tree)
1120
1121/* Insert attributes on the newly created DECL. */
1122DEFHOOK
1123(insert_attributes,
1124 "",
1125 void, (tree node, tree *attr_ptr),
1126 hook_void_tree_treeptr)
1127
1128/* Return true if FNDECL (which has at least one machine attribute)
1129 can be inlined despite its machine attributes, false otherwise. */
1130DEFHOOK
1131(function_attribute_inlinable_p,
1132 "",
1133 bool, (const_tree fndecl),
1134 hook_bool_const_tree_false)
1135
1136/* Return true if bitfields in RECORD_TYPE should follow the
1137 Microsoft Visual C++ bitfield layout rules. */
1138DEFHOOK
1139(ms_bitfield_layout_p,
1140 "",
1141 bool, (const_tree record_type),
1142 hook_bool_const_tree_false)
1143
1144/* True if the target supports decimal floating point. */
1145DEFHOOK
1146(decimal_float_supported_p,
1147 "",
1148 bool, (void),
1149 default_decimal_float_supported_p)
1150
1151/* True if the target supports fixed-point. */
1152DEFHOOK
1153(fixed_point_supported_p,
1154 "",
1155 bool, (void),
1156 default_fixed_point_supported_p)
1157
1158/* Return true if anonymous bitfields affect structure alignment. */
1159DEFHOOK
1160(align_anon_bitfield,
1161 "",
1162 bool, (void),
1163 hook_bool_void_false)
1164
1165/* Return true if volatile bitfields should use the narrowest type possible.
1166 Return false if they should use the container type. */
1167DEFHOOK
1168(narrow_volatile_bitfield,
1169 "",
1170 bool, (void),
1171 hook_bool_void_false)
1172
1173/* Set up target-specific built-in functions. */
1174DEFHOOK
1175(init_builtins,
1176 "",
1177 void, (void),
1178 hook_void_void)
1179
1180/* Initialize (if INITIALIZE_P is true) and return the target-specific
1181 built-in function decl for CODE.
1182 Return NULL if that is not possible. Return error_mark_node if CODE
1183 is outside of the range of valid target builtin function codes. */
1184DEFHOOK
1185(builtin_decl,
1186 "",
1187 tree, (unsigned code, bool initialize_p), NULL)
1188
1189/* Expand a target-specific builtin. */
1190DEFHOOK
1191(expand_builtin,
1192 "",
1193 rtx,
1194 (tree exp, rtx target, rtx subtarget, enum machine_mode mode, int ignore),
1195 default_expand_builtin)
1196
1197/* Select a replacement for a target-specific builtin. This is done
1198 *before* regular type checking, and so allows the target to
1199 implement a crude form of function overloading. The result is a
1200 complete expression that implements the operation. PARAMS really
1201 has type VEC(tree,gc)*, but we don't want to include tree.h here. */
d66f5459 1202DEFHOOK
38f8b050
JR
1203(resolve_overloaded_builtin,
1204 "",
d66f5459 1205 tree, (unsigned int /*location_t*/ loc, tree fndecl, void *arglist), NULL)
38f8b050
JR
1206
1207/* Fold a target-specific builtin. */
08914aaa 1208DEFHOOK
38f8b050
JR
1209(fold_builtin,
1210 "",
08914aaa 1211 tree, (tree fndecl, int n_args, tree *argp, bool ignore),
38f8b050
JR
1212 hook_tree_tree_int_treep_bool_null)
1213
1214/* Returns a code for a target-specific builtin that implements
1215 reciprocal of the function, or NULL_TREE if not available. */
89356d17 1216DEFHOOK
38f8b050
JR
1217(builtin_reciprocal,
1218 "",
89356d17 1219 tree, (unsigned fn, bool md_fn, bool sqrt),
38f8b050
JR
1220 default_builtin_reciprocal)
1221
1222/* For a vendor-specific TYPE, return a pointer to a statically-allocated
1223 string containing the C++ mangling for TYPE. In all other cases, return
1224 NULL. */
1225DEFHOOK
1226(mangle_type,
1227 "",
1228 const char *, (const_tree type),
1229 hook_constcharptr_const_tree_null)
1230
1231/* Make any adjustments to libfunc names needed for this target. */
1232DEFHOOK
1233(init_libfuncs,
1234 "",
1235 void, (void),
1236 hook_void_void)
1237
1238/* Given a decl, a section name, and whether the decl initializer
1239 has relocs, choose attributes for the section. */
1240/* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION. */
1241DEFHOOK
1242(section_type_flags,
1243 "",
1244 unsigned int, (tree decl, const char *name, int reloc),
1245 default_section_type_flags)
1246
1247/* True if new jumps cannot be created, to replace existing ones or
1248 not, at the current point in the compilation. */
1249DEFHOOK
1250(cannot_modify_jumps_p,
1251 "",
1252 bool, (void),
1253 hook_bool_void_false)
1254
1255/* Return a register class for which branch target register
1256 optimizations should be applied. */
1257DEFHOOK
1258(branch_target_register_class,
1259 "",
a87cf97e 1260 reg_class_t, (void),
38f8b050
JR
1261 default_branch_target_register_class)
1262
1263/* Return true if branch target register optimizations should include
1264 callee-saved registers that are not already live during the current
1265 function. AFTER_PE_GEN is true if prologues and epilogues have
1266 already been generated. */
1267DEFHOOK
1268(branch_target_register_callee_saved,
1269 "",
1270 bool, (bool after_prologue_epilogue_gen),
1271 hook_bool_bool_false)
1272
1273/* Return true if the target supports conditional execution. */
1274DEFHOOK
1275(have_conditional_execution,
1276 "",
1277 bool, (void),
1278 default_have_conditional_execution)
1279
1280/* Return a new value for loop unroll size. */
1281DEFHOOK
1282(loop_unroll_adjust,
1283 "",
1284 unsigned, (unsigned nunroll, struct loop *loop),
1285 NULL)
1286
1287/* True if the constant X cannot be placed in the constant pool. */
1288DEFHOOK
1289(cannot_force_const_mem,
1290 "",
1291 bool, (rtx x),
1292 hook_bool_rtx_false)
1293
1294DEFHOOK_UNDOC
1295(cannot_copy_insn_p,
1296 "True if the insn @var{x} cannot be duplicated.",
1297 bool, (rtx), NULL)
1298
1299/* True if X is considered to be commutative. */
1300DEFHOOK
1301(commutative_p,
1302 "",
1303 bool, (const_rtx x, int outer_code),
1304 hook_bool_const_rtx_commutative_p)
1305
1306/* True if ADDR is an address-expression whose effect depends
1307 on the mode of the memory reference it is used in. */
1308DEFHOOK
1309(mode_dependent_address_p,
1310 "",
1311 bool, (const_rtx addr),
1312 default_mode_dependent_address_p)
1313
1314/* Given an invalid address X for a given machine mode, try machine-specific
1315 ways to make it legitimate. Return X or an invalid address on failure. */
1316DEFHOOK
1317(legitimize_address,
1318 "",
1319 rtx, (rtx x, rtx oldx, enum machine_mode mode),
1320 default_legitimize_address)
1321
1322/* Given an address RTX, undo the effects of LEGITIMIZE_ADDRESS. */
1323DEFHOOK
1324(delegitimize_address,
1325 "",
1326 rtx, (rtx x),
1327 delegitimize_mem_from_attrs)
1328
1329/* Given an address RTX, say whether it is valid. */
1330DEFHOOK
1331(legitimate_address_p,
1332 "",
1333 bool, (enum machine_mode mode, rtx x, bool strict),
1334 default_legitimate_address_p)
1335
1336/* True if the given constant can be put into an object_block. */
1337DEFHOOK
1338(use_blocks_for_constant_p,
1339 "",
1340 bool, (enum machine_mode mode, const_rtx x),
1341 hook_bool_mode_const_rtx_false)
1342
1343/* The minimum and maximum byte offsets for anchored addresses. */
1344DEFHOOKPOD
1345(min_anchor_offset,
1346 "",
1347 HOST_WIDE_INT, 0)
1348
1349DEFHOOKPOD
1350(max_anchor_offset,
1351 "",
1352 HOST_WIDE_INT, 0)
1353
1354/* True if section anchors can be used to access the given symbol. */
1355DEFHOOK
1356(use_anchors_for_symbol_p,
1357 "",
1358 bool, (const_rtx x),
1359 default_use_anchors_for_symbol_p)
1360
1361/* True if it is OK to do sibling call optimization for the specified
1362 call expression EXP. DECL will be the called function, or NULL if
1363 this is an indirect call. */
1364DEFHOOK
1365(function_ok_for_sibcall,
1366 "",
1367 bool, (tree decl, tree exp),
1368 hook_bool_tree_tree_false)
1369
1370/* Establish appropriate back-end context for processing the function
1371 FNDECL. The argument might be NULL to indicate processing at top
1372 level, outside of any function scope. */
1373DEFHOOK
1374(set_current_function,
1375 "",
1376 void, (tree decl), hook_void_tree)
1377
1378/* True if EXP should be placed in a "small data" section. */
1379DEFHOOK
1380(in_small_data_p,
1381 "",
1382 bool, (const_tree exp),
1383 hook_bool_const_tree_false)
1384
1385/* True if EXP names an object for which name resolution must resolve
1386 to the current executable or shared library. */
1387DEFHOOK
1388(binds_local_p,
1389 "",
1390 bool, (const_tree exp),
1391 default_binds_local_p)
1392
3c5273a9
KT
1393/* Check if profiling code is before or after prologue. */
1394DEFHOOK
1395(profile_before_prologue,
1396 "It returns true if target wants profile code emitted before prologue.\n\n\
1397The default version of this hook use the target macro\n\
1398@code{PROFILE_BEFORE_PROLOGUE}.",
1399 bool, (void),
1400 default_profile_before_prologue)
1401
38f8b050
JR
1402/* Modify and return the identifier of a DECL's external name,
1403 originally identified by ID, as required by the target,
1404 (eg, append @nn to windows32 stdcall function names).
1405 The default is to return ID without modification. */
1406DEFHOOK
1407(mangle_decl_assembler_name,
1408 "",
1409 tree, (tree decl, tree id),
1410 default_mangle_decl_assembler_name)
1411
1412/* Do something target-specific to record properties of the DECL into
1413 the associated SYMBOL_REF. */
1414DEFHOOK
1415(encode_section_info,
1416 "",
1417 void, (tree decl, rtx rtl, int new_decl_p),
1418 default_encode_section_info)
1419
1420/* Undo the effects of encode_section_info on the symbol string. */
1421DEFHOOK
1422(strip_name_encoding,
1423 "",
1424 const char *, (const char *name),
1425 default_strip_name_encoding)
1426
1427/* If shift optabs for MODE are known to always truncate the shift count,
1428 return the mask that they apply. Return 0 otherwise. */
1429DEFHOOK
1430(shift_truncation_mask,
1431 "",
1432 unsigned HOST_WIDE_INT, (enum machine_mode mode),
1433 default_shift_truncation_mask)
1434
1435/* Return the number of divisions in the given MODE that should be present,
1436 so that it is profitable to turn the division into a multiplication by
1437 the reciprocal. */
1438DEFHOOK
1439(min_divisions_for_recip_mul,
1440 "",
1441 unsigned int, (enum machine_mode mode),
1442 default_min_divisions_for_recip_mul)
1443
1444/* If the representation of integral MODE is such that values are
1445 always sign-extended to a wider mode MODE_REP then return
1446 SIGN_EXTEND. Return UNKNOWN otherwise. */
1447/* Note that the return type ought to be RTX_CODE, but that's not
1448 necessarily defined at this point. */
1449DEFHOOK
1450(mode_rep_extended,
1451 "",
1452 int, (enum machine_mode mode, enum machine_mode rep_mode),
1453 default_mode_rep_extended)
1454
1455/* True if MODE is valid for a pointer in __attribute__((mode("MODE"))). */
1456DEFHOOK
1457(valid_pointer_mode,
1458 "",
1459 bool, (enum machine_mode mode),
1460 default_valid_pointer_mode)
1461
1462/* Support for named address spaces. */
1463#undef HOOK_PREFIX
1464#define HOOK_PREFIX "TARGET_ADDR_SPACE_"
1465HOOK_VECTOR (TARGET_ADDR_SPACE_HOOKS, addr_space)
1466
1467/* MODE to use for a pointer into another address space. */
1468DEFHOOK
1469(pointer_mode,
1470 "",
1471 enum machine_mode, (addr_space_t address_space),
1472 default_addr_space_pointer_mode)
1473
1474/* MODE to use for an address in another address space. */
1475DEFHOOK
1476(address_mode,
1477 "",
1478 enum machine_mode, (addr_space_t address_space),
1479 default_addr_space_address_mode)
1480
1481/* True if MODE is valid for a pointer in __attribute__((mode("MODE")))
1482 in another address space. */
1483DEFHOOK
1484(valid_pointer_mode,
1485 "",
1486 bool, (enum machine_mode mode, addr_space_t as),
1487 default_addr_space_valid_pointer_mode)
1488
1489/* True if an address is a valid memory address to a given named address
1490 space for a given mode. */
1491DEFHOOK
1492(legitimate_address_p,
1493 "",
1494 bool, (enum machine_mode mode, rtx exp, bool strict, addr_space_t as),
1495 default_addr_space_legitimate_address_p)
1496
1497/* Return an updated address to convert an invalid pointer to a named
1498 address space to a valid one. If NULL_RTX is returned use machine
1499 independent methods to make the address valid. */
1500DEFHOOK
1501(legitimize_address,
1502 "",
1503 rtx, (rtx x, rtx oldx, enum machine_mode mode, addr_space_t as),
1504 default_addr_space_legitimize_address)
1505
1506/* True if one named address space is a subset of another named address. */
1507DEFHOOK
1508(subset_p,
1509 "",
1510 bool, (addr_space_t superset, addr_space_t subset),
1511 default_addr_space_subset_p)
1512
1513/* Function to convert an rtl expression from one address space to another. */
1514DEFHOOK
1515(convert,
1516 "",
1517 rtx, (rtx op, tree from_type, tree to_type),
1518 default_addr_space_convert)
1519
1520HOOK_VECTOR_END (addr_space)
1521
1522#undef HOOK_PREFIX
1523#define HOOK_PREFIX "TARGET_"
1524
1525/* True if MODE is valid for the target. By "valid", we mean able to
1526 be manipulated in non-trivial ways. In particular, this means all
1527 the arithmetic is supported. */
1528DEFHOOK
1529(scalar_mode_supported_p,
1530 "",
1531 bool, (enum machine_mode mode),
1532 default_scalar_mode_supported_p)
1533
1534/* Similarly for vector modes. "Supported" here is less strict. At
1535 least some operations are supported; need to check optabs or builtins
1536 for further details. */
1537DEFHOOK
1538(vector_mode_supported_p,
1539 "",
1540 bool, (enum machine_mode mode),
1541 hook_bool_mode_false)
1542
1543/* Compute cost of moving data from a register of class FROM to one of
1544 TO, using MODE. */
1545DEFHOOK
1546(register_move_cost,
1547 "",
a87cf97e 1548 int, (enum machine_mode mode, reg_class_t from, reg_class_t to),
38f8b050
JR
1549 default_register_move_cost)
1550
1551/* Compute cost of moving registers to/from memory. */
1552/* ??? Documenting the argument types for this hook requires a GFDL
1553 license grant. Also, the documentation uses a different name for RCLASS. */
911852ff 1554DEFHOOK
38f8b050
JR
1555(memory_move_cost,
1556 "",
a87cf97e 1557 int, (enum machine_mode mode, reg_class_t rclass, bool in),
38f8b050
JR
1558 default_memory_move_cost)
1559
1560/* True for MODE if the target expects that registers in this mode will
1561 be allocated to registers in a small register class. The compiler is
1562 allowed to use registers explicitly used in the rtl as spill registers
1563 but it should prevent extending the lifetime of these registers. */
1564DEFHOOK
1565(small_register_classes_for_mode_p,
1566 "",
1567 bool, (enum machine_mode mode),
1568 hook_bool_mode_false)
1569
1570/* Compute a (partial) cost for rtx X. Return true if the complete
1571 cost has been computed, and false if subexpressions should be
1572 scanned. In either case, *TOTAL contains the cost result. */
1573/* Note that CODE and OUTER_CODE ought to be RTX_CODE, but that's
1574 not necessarily defined at this point. */
1575DEFHOOK
1576(rtx_costs,
1577 "",
1578 bool, (rtx x, int code, int outer_code, int *total, bool speed),
1579 hook_bool_rtx_int_int_intp_bool_false)
1580
1581/* Compute the cost of X, used as an address. Never called with
1582 invalid addresses. */
1583DEFHOOK
1584(address_cost,
1585 "",
1586 int, (rtx address, bool speed),
1587 default_address_cost)
1588
1589/* Return where to allocate pseudo for a given hard register initial value. */
1590DEFHOOK
1591(allocate_initial_value,
1592 "",
1593 rtx, (rtx hard_reg), NULL)
1594
1595/* Return nonzero if evaluating UNSPEC[_VOLATILE] X might cause a trap.
1596 FLAGS has the same meaning as in rtlanal.c: may_trap_p_1. */
1597DEFHOOK
1598(unspec_may_trap_p,
1599 "",
1600 int, (const_rtx x, unsigned flags),
1601 default_unspec_may_trap_p)
1602
1603/* Given a register, this hook should return a parallel of registers
1604 to represent where to find the register pieces. Define this hook
1605 if the register and its mode are represented in Dwarf in
1606 non-contiguous locations, or if the register should be
1607 represented in more than one register in Dwarf. Otherwise, this
1608 hook should return NULL_RTX. */
1609DEFHOOK
1610(dwarf_register_span,
1611 "",
1612 rtx, (rtx reg),
1613 hook_rtx_rtx_null)
1614
1615/* If expand_builtin_init_dwarf_reg_sizes needs to fill in table
1616 entries not corresponding directly to registers below
1617 FIRST_PSEUDO_REGISTER, this hook should generate the necessary
1618 code, given the address of the table. */
1619DEFHOOK
1620(init_dwarf_reg_sizes_extra,
1621 "",
1622 void, (tree address),
1623 hook_void_tree)
1624
1625/* Fetch the fixed register(s) which hold condition codes, for
1626 targets where it makes sense to look for duplicate assignments to
1627 the condition codes. This should return true if there is such a
1628 register, false otherwise. The arguments should be set to the
1629 fixed register numbers. Up to two condition code registers are
1630 supported. If there is only one for this target, the int pointed
1631 at by the second argument should be set to -1. */
1632DEFHOOK
1633(fixed_condition_code_regs,
1634 "",
1635 bool, (unsigned int *p1, unsigned int *p2),
1636 hook_bool_uintp_uintp_false)
1637
1638/* If two condition code modes are compatible, return a condition
1639 code mode which is compatible with both, such that a comparison
1640 done in the returned mode will work for both of the original
1641 modes. If the condition code modes are not compatible, return
1642 VOIDmode. */
1643DEFHOOK
1644(cc_modes_compatible,
1645 "",
1646 enum machine_mode, (enum machine_mode m1, enum machine_mode m2),
1647 default_cc_modes_compatible)
1648
1649/* Do machine-dependent code transformations. Called just before
1650 delayed-branch scheduling. */
1651DEFHOOK
1652(machine_dependent_reorg,
1653 "",
1654 void, (void), NULL)
1655
1656/* Create the __builtin_va_list type. */
1657DEFHOOK
1658(build_builtin_va_list,
1659 "",
1660 tree, (void),
1661 std_build_builtin_va_list)
1662
1663/* Enumerate the va list variants. */
07a5b2bc 1664DEFHOOK
38f8b050
JR
1665(enum_va_list_p,
1666 "",
1667 int, (int idx, const char **pname, tree *ptree),
1668 NULL)
1669
1670/* Get the cfun/fndecl calling abi __builtin_va_list type. */
1671DEFHOOK
1672(fn_abi_va_list,
1673 "",
1674 tree, (tree fndecl),
1675 std_fn_abi_va_list)
1676
1677/* Get the __builtin_va_list type dependent on input type. */
1678DEFHOOK
1679(canonical_va_list_type,
1680 "",
1681 tree, (tree type),
1682 std_canonical_va_list_type)
1683
1684/* ??? Documenting this hook requires a GFDL license grant. */
1685DEFHOOK_UNDOC
1686(expand_builtin_va_start,
1687"Expand the @code{__builtin_va_start} builtin.",
1688 void, (tree valist, rtx nextarg), NULL)
1689
1690/* Gimplifies a VA_ARG_EXPR. */
1691DEFHOOK
1692(gimplify_va_arg_expr,
1693 "",
1694 tree, (tree valist, tree type, gimple_seq *pre_p, gimple_seq *post_p),
1695 std_gimplify_va_arg_expr)
1696
1697/* Validity-checking routines for PCH files, target-specific.
1698 get_pch_validity returns a pointer to the data to be stored,
1699 and stores the size in its argument. pch_valid_p gets the same
1700 information back and returns NULL if the PCH is valid,
1701 or an error message if not. */
1702DEFHOOK
1703(get_pch_validity,
1704 "",
1705 void *, (size_t *sz),
1706 default_get_pch_validity)
1707
1708DEFHOOK
1709(pch_valid_p,
1710 "",
1711 const char *, (const void *data, size_t sz),
1712 default_pch_valid_p)
1713
1714/* If nonnull, this function checks whether a PCH file with the
1715 given set of target flags can be used. It returns NULL if so,
1716 otherwise it returns an error message. */
1717DEFHOOK
1718(check_pch_target_flags,
1719 "",
1720 const char *, (int pch_flags), NULL)
1721
1722/* True if the compiler should give an enum type only as many
1723 bytes as it takes to represent the range of possible values of
1724 that type. */
1725DEFHOOK
1726(default_short_enums,
1727 "",
1728 bool, (void),
1729 hook_bool_void_false)
1730
1731/* This target hook returns an rtx that is used to store the address
1732 of the current frame into the built-in setjmp buffer. */
1733DEFHOOK
1734(builtin_setjmp_frame_value,
1735 "",
1736 rtx, (void),
1737 default_builtin_setjmp_frame_value)
1738
1739/* This target hook should add STRING_CST trees for any hard regs
1740 the port wishes to automatically clobber for an asm. */
1741DEFHOOK
1742(md_asm_clobbers,
1743 "",
1744 tree, (tree outputs, tree inputs, tree clobbers),
1745 hook_tree_tree_tree_tree_3rd_identity)
1746
1747/* This target hook allows the backend to specify a calling convention
1748 in the debug information. This function actually returns an
1749 enum dwarf_calling_convention, but because of forward declarations
1750 and not wanting to include dwarf2.h everywhere target.h is included
1751 the function is being declared as an int. */
1752DEFHOOK
1753(dwarf_calling_convention,
1754 "",
1755 int, (const_tree function),
1756 hook_int_const_tree_0)
1757
1758/* This target hook allows the backend to emit frame-related insns that
1759 contain UNSPECs or UNSPEC_VOLATILEs. The call frame debugging info
1760 engine will invoke it on insns of the form
1761 (set (reg) (unspec [...] UNSPEC_INDEX))
1762 and
1763 (set (reg) (unspec_volatile [...] UNSPECV_INDEX))
1764 to let the backend emit the call frame instructions. */
1765DEFHOOK
1766(dwarf_handle_frame_unspec,
1767 "",
1768 void, (const char *label, rtx pattern, int index), NULL)
1769
1770/* ??? Documenting this hook requires a GFDL license grant. */
1771DEFHOOK_UNDOC
1772(stdarg_optimize_hook,
1773"Perform architecture specific checking of statements gimplified\
1774 from @code{VA_ARG_EXPR}. @var{stmt} is the statement. Returns true if\
1775 the statement doesn't need to be checked for @code{va_list} references.",
1776 bool, (struct stdarg_info *ai, const_gimple stmt), NULL)
1777
1778/* This target hook allows the operating system to override the DECL
1779 that represents the external variable that contains the stack
1780 protection guard variable. The type of this DECL is ptr_type_node. */
1781DEFHOOK
1782(stack_protect_guard,
1783 "",
1784 tree, (void),
1785 default_stack_protect_guard)
1786
1787/* This target hook allows the operating system to override the CALL_EXPR
1788 that is invoked when a check vs the guard variable fails. */
1789DEFHOOK
1790(stack_protect_fail,
1791 "",
1792 tree, (void),
1793 default_external_stack_protect_fail)
1794
7458026b
ILT
1795DEFHOOK
1796(supports_split_stack,
1797 "Whether this target supports splitting the stack. This is called\
1798 after options have been parsed, so the target may reject splitting\
1799 the stack in some configurations. The default version of this hook\
1800 returns false. If @var{report} is true, this function may issue a warning\
1801 or error; if @var{report} is false, it must simply return a value",
1802 bool, (bool),
1803 hook_bool_bool_false)
1804
38f8b050
JR
1805/* Returns NULL if target supports the insn within a doloop block,
1806 otherwise it returns an error message. */
1807DEFHOOK
1808(invalid_within_doloop,
1809 "",
1810 const char *, (const_rtx insn),
1811 default_invalid_within_doloop)
1812
1813DEFHOOK
1814(valid_dllimport_attribute_p,
1815"@var{decl} is a variable or function with @code{__attribute__((dllimport))}\
1816 specified. Use this hook if the target needs to add extra validation\
1817 checks to @code{handle_dll_attribute}.",
1818 bool, (const_tree decl),
1819 hook_bool_const_tree_true)
1820
1821/* If non-zero, align constant anchors in CSE to a multiple of this
1822 value. */
1823DEFHOOKPOD
1824(const_anchor,
1825 "",
1826 unsigned HOST_WIDE_INT, 0)
1827
1828/* Functions relating to calls - argument passing, returns, etc. */
1829/* Members of struct call have no special macro prefix. */
1830HOOK_VECTOR (TARGET_CALLS, calls)
1831
1832DEFHOOK
1833(promote_function_mode,
1834 "",
1835 enum machine_mode, (const_tree type, enum machine_mode mode, int *punsignedp,
1836 const_tree funtype, int for_return),
1837 default_promote_function_mode)
1838
1839DEFHOOK
1840(promote_prototypes,
1841 "",
1842 bool, (const_tree fntype),
1843 hook_bool_const_tree_false)
1844
1845DEFHOOK
1846(struct_value_rtx,
1847 "",
1848 rtx, (tree fndecl, int incoming),
1849 hook_rtx_tree_int_null)
1850DEFHOOK
1851(return_in_memory,
1852 "",
1853 bool, (const_tree type, const_tree fntype),
1854 default_return_in_memory)
1855
1856DEFHOOK
1857(return_in_msb,
1858 "",
1859 bool, (const_tree type),
1860 hook_bool_const_tree_false)
1861
1862/* Return true if a parameter must be passed by reference. TYPE may
1863 be null if this is a libcall. CA may be null if this query is
1864 from __builtin_va_arg. */
ec9f85e5 1865DEFHOOK
38f8b050
JR
1866(pass_by_reference,
1867 "",
1868 bool,
1869 (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
1870 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
1871
1872DEFHOOK
1873(expand_builtin_saveregs,
1874 "",
1875 rtx, (void),
1876 default_expand_builtin_saveregs)
1877
1878/* Returns pretend_argument_size. */
1879DEFHOOK
1880(setup_incoming_varargs,
1881 "",
1882 void, (CUMULATIVE_ARGS *args_so_far, enum machine_mode mode, tree type,
1883 int *pretend_args_size, int second_time),
1884 default_setup_incoming_varargs)
1885
1886DEFHOOK
1887(strict_argument_naming,
1888 "",
1889 bool, (CUMULATIVE_ARGS *ca),
1890 hook_bool_CUMULATIVE_ARGS_false)
1891
1892/* Returns true if we should use
1893 targetm.calls.setup_incoming_varargs() and/or
1894 targetm.calls.strict_argument_naming(). */
1895DEFHOOK
1896(pretend_outgoing_varargs_named,
1897 "",
1898 bool, (CUMULATIVE_ARGS *ca),
1899 default_pretend_outgoing_varargs_named)
1900
1901/* Given a complex type T, return true if a parameter of type T
1902 should be passed as two scalars. */
1903DEFHOOK
1904(split_complex_arg,
1905 "",
1906 bool, (const_tree type), NULL)
1907
1908/* Return true if type T, mode MODE, may not be passed in registers,
1909 but must be passed on the stack. */
1910/* ??? This predicate should be applied strictly after pass-by-reference.
1911 Need audit to verify that this is the case. */
1912DEFHOOK
1913(must_pass_in_stack,
1914 "",
1915 bool, (enum machine_mode mode, const_tree type),
1916 must_pass_in_stack_var_size_or_pad)
1917
1918/* Return true if type TYPE, mode MODE, which is passed by reference,
1919 should have the object copy generated by the callee rather than
1920 the caller. It is never called for TYPE requiring constructors. */
1921DEFHOOK
1922(callee_copies,
1923 "",
1924 bool,
1925 (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool named),
1926 hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
1927
1928/* Return zero for arguments passed entirely on the stack or entirely
1929 in registers. If passed in both, return the number of bytes passed
1930 in registers; the balance is therefore passed on the stack. */
1931DEFHOOK
1932(arg_partial_bytes,
1933 "",
1934 int, (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, bool named),
1935 hook_int_CUMULATIVE_ARGS_mode_tree_bool_0)
1936
1937/* Update the state in CA to advance past an argument in the
1938 argument list. The values MODE, TYPE, and NAMED describe that
1939 argument. */
1940/* ??? tm.texi still only describes the old macro. */
1941DEFHOOK_UNDOC
1942(function_arg_advance,
1943 "",
1944 void,
1945 (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, bool named),
1946 default_function_arg_advance)
1947
1948/* Return zero if the argument described by the state of CA should
1949 be placed on a stack, or a hard register in which to store the
1950 argument. The values MODE, TYPE, and NAMED describe that
1951 argument. */
1952/* ??? tm.texi still only describes the old macro. */
1953DEFHOOK_UNDOC
1954(function_arg,
1955 "",
29e88142 1956 rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
38f8b050
JR
1957 bool named),
1958 default_function_arg)
1959
1960/* Likewise, but for machines with register windows. Return the
1961 location where the argument will appear to the callee. */
1962/* ??? tm.texi still only describes the old macro. */
1963DEFHOOK_UNDOC
1964(function_incoming_arg,
1965 "",
29e88142 1966 rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type,
38f8b050
JR
1967 bool named),
1968 default_function_incoming_arg)
1969
1970/* Return the diagnostic message string if function without a prototype
1971 is not allowed for this 'val' argument; NULL otherwise. */
1972DEFHOOK
1973(invalid_arg_for_unprototyped_fn,
1974 "",
1975 const char *, (const_tree typelist, const_tree funcdecl, const_tree val),
1976 hook_invalid_arg_for_unprototyped_fn)
1977
1978/* Return an rtx for the return value location of the function
1979 specified by FN_DECL_OR_TYPE with a return type of RET_TYPE. */
1980DEFHOOK
1981(function_value,
1982 "",
1983 rtx, (const_tree ret_type, const_tree fn_decl_or_type, bool outgoing),
1984 default_function_value)
1985
1986/* Return the rtx for the result of a libcall of mode MODE,
1987 calling the function FN_NAME. */
1988DEFHOOK
1989(libcall_value,
1990 "",
1991 rtx, (enum machine_mode mode, const_rtx fun),
1992 default_libcall_value)
1993
1994/* Return true if REGNO is a possible register number for
1995 a function value as seen by the caller. */
1996DEFHOOK
1997(function_value_regno_p,
1998 "",
1999 bool, (const unsigned int regno),
2000 default_function_value_regno_p)
2001
2002/* ??? Documenting this hook requires a GFDL license grant. */
2003DEFHOOK_UNDOC
2004(internal_arg_pointer,
2005"Return an rtx for the argument pointer incoming to the\
2006 current function.",
2007 rtx, (void),
2008 default_internal_arg_pointer)
2009
2010/* Update the current function stack boundary if needed. */
2011DEFHOOK
2012(update_stack_boundary,
2013 "",
2014 void, (void), NULL)
2015
2016/* Handle stack alignment and return an rtx for Dynamic Realign
2017 Argument Pointer if necessary. */
2018DEFHOOK
2019(get_drap_rtx,
2020 "",
2021 rtx, (void), NULL)
2022
2023/* Return true if all function parameters should be spilled to the
2024 stack. */
2025DEFHOOK
2026(allocate_stack_slots_for_args,
2027 "",
2028 bool, (void),
2029 hook_bool_void_true)
2030
2031/* Return an rtx for the static chain for FNDECL. If INCOMING_P is true,
2032 then it should be for the callee; otherwise for the caller. */
2033DEFHOOK
2034(static_chain,
2035 "",
2036 rtx, (const_tree fndecl, bool incoming_p),
2037 default_static_chain)
2038
2039/* Fill in the trampoline at MEM with a call to FNDECL and a
2040 static chain value of CHAIN. */
2041DEFHOOK
2042(trampoline_init,
2043 "",
2044 void, (rtx m_tramp, tree fndecl, rtx static_chain),
2045 default_trampoline_init)
2046
2047/* Adjust the address of the trampoline in a target-specific way. */
2048DEFHOOK
2049(trampoline_adjust_address,
2050 "",
2051 rtx, (rtx addr), NULL)
2052
2053/* Return the number of bytes of its own arguments that a function
2054 pops on returning, or 0 if the function pops no arguments and the
2055 caller must therefore pop them all after the function returns. */
2056/* ??? tm.texi has no types for the parameters. */
893d13d5 2057DEFHOOK
38f8b050
JR
2058(return_pops_args,
2059 "",
2060 int, (tree fundecl, tree funtype, int size),
2061 default_return_pops_args)
2062
ffa88471
SE
2063/* Return a mode wide enough to copy any function value that might be
2064 returned. */
2065DEFHOOK
2066(get_raw_result_mode,
2067 "This target hook returns the mode to be used when accessing raw return\
2068 registers in @code{__builtin_return}. Define this macro if the value\
2069 in @var{reg_raw_mode} is not correct.",
2070 enum machine_mode, (int regno),
2071 default_get_reg_raw_mode)
2072
2073/* Return a mode wide enough to copy any argument value that might be
2074 passed. */
2075DEFHOOK
2076(get_raw_arg_mode,
2077 "This target hook returns the mode to be used when accessing raw argument\
2078 registers in @code{__builtin_apply_args}. Define this macro if the value\
2079 in @var{reg_raw_mode} is not correct.",
2080 enum machine_mode, (int regno),
2081 default_get_reg_raw_mode)
2082
38f8b050
JR
2083HOOK_VECTOR_END (calls)
2084
2085/* Return the diagnostic message string if conversion from FROMTYPE
2086 to TOTYPE is not allowed, NULL otherwise. */
2087DEFHOOK
2088(invalid_conversion,
2089 "",
2090 const char *, (const_tree fromtype, const_tree totype),
2091 hook_constcharptr_const_tree_const_tree_null)
2092
2093/* Return the diagnostic message string if the unary operation OP is
2094 not permitted on TYPE, NULL otherwise. */
2095DEFHOOK
2096(invalid_unary_op,
2097 "",
2098 const char *, (int op, const_tree type),
2099 hook_constcharptr_int_const_tree_null)
2100
2101/* Return the diagnostic message string if the binary operation OP
2102 is not permitted on TYPE1 and TYPE2, NULL otherwise. */
2103DEFHOOK
2104(invalid_binary_op,
2105 "",
2106 const char *, (int op, const_tree type1, const_tree type2),
2107 hook_constcharptr_int_const_tree_const_tree_null)
2108
2109/* Return the diagnostic message string if TYPE is not valid as a
2110 function parameter type, NULL otherwise. */
2111DEFHOOK
2112(invalid_parameter_type,
2113 "",
2114 const char *, (const_tree type),
2115 hook_constcharptr_const_tree_null)
2116
2117/* Return the diagnostic message string if TYPE is not valid as a
2118 function return type, NULL otherwise. */
2119DEFHOOK
2120(invalid_return_type,
2121 "",
2122 const char *, (const_tree type),
2123 hook_constcharptr_const_tree_null)
2124
2125/* If values of TYPE are promoted to some other type when used in
2126 expressions (analogous to the integer promotions), return that type,
2127 or NULL_TREE otherwise. */
2128DEFHOOK
2129(promoted_type,
2130 "",
2131 tree, (const_tree type),
2132 hook_tree_const_tree_null)
2133
2134/* Convert EXPR to TYPE, if target-specific types with special conversion
2135 rules are involved. Return the converted expression, or NULL to apply
2136 the standard conversion rules. */
2137DEFHOOK
2138(convert_to_type,
2139 "",
2140 tree, (tree type, tree expr),
2141 hook_tree_tree_tree_null)
2142
2143/* Return the array of IRA cover classes for the current target. */
2144DEFHOOK
2145(ira_cover_classes,
2146 "",
a87cf97e 2147 const reg_class_t *, (void),
38f8b050
JR
2148 default_ira_cover_classes)
2149
2150/* Return the class for a secondary reload, and fill in extra information. */
2151DEFHOOK
2152(secondary_reload,
2153 "",
a87cf97e
JR
2154 reg_class_t,
2155 (bool in_p, rtx x, reg_class_t reload_class, enum machine_mode reload_mode,
38f8b050
JR
2156 secondary_reload_info *sri),
2157 default_secondary_reload)
2158
fba42e24
AS
2159/* Given an rtx X being reloaded into a reg required to be in class CLASS,
2160 return the class of reg to actually use. */
2161DEFHOOK
2162(preferred_reload_class,
2163 "",
2164 reg_class_t,
2165 (rtx x, reg_class_t rclass),
2166 default_preferred_reload_class)
2167
abd26bfb
AS
2168/* Like TARGET_PREFERRED_RELOAD_CLASS, but for output reloads instead of
2169 input reloads. */
2170DEFHOOK
2171(preferred_output_reload_class,
2172 "",
2173 reg_class_t,
2174 (rtx x, reg_class_t rclass),
2175 default_preferred_output_reload_class)
2176
07b8f0a8
AS
2177DEFHOOK
2178(class_likely_spilled_p,
2179 "",
2180 bool, (reg_class_t rclass),
2181 default_class_likely_spilled_p)
2182
38f8b050
JR
2183/* This target hook allows the backend to perform additional
2184 processing while initializing for variable expansion. */
2185DEFHOOK
2186(expand_to_rtl_hook,
2187 "",
2188 void, (void),
2189 hook_void_void)
2190
2191/* This target hook allows the backend to perform additional
2192 instantiations on rtx that are not actually in insns yet,
2193 but will be later. */
2194DEFHOOK
2195(instantiate_decls,
2196 "",
2197 void, (void),
2198 hook_void_void)
2199
2200/* Return true if is OK to use a hard register REGNO as scratch register
2201 in peephole2. */
2202DEFHOOK
2203(hard_regno_scratch_ok,
2204 "",
2205 bool, (unsigned int regno),
2206 default_hard_regno_scratch_ok)
2207
2208/* Return the smallest number of different values for which it is best to
2209 use a jump-table instead of a tree of conditional branches. */
2210DEFHOOK
2211(case_values_threshold,
2212 "",
2213 unsigned int, (void),
2214 default_case_values_threshold)
2215
2216/* Retutn true if a function must have and use a frame pointer. */
2217DEFHOOK
2218(frame_pointer_required,
2219 "",
2220 bool, (void),
2221 hook_bool_void_false)
2222
2223/* Returns true if the compiler is allowed to try to replace register number
2224 from-reg with register number to-reg. */
2225DEFHOOK
2226(can_eliminate,
2227 "",
2228 bool, (const int from_reg, const int to_reg),
2229 hook_bool_const_int_const_int_true)
2230
2231/* Functions specific to the C family of frontends. */
2232#undef HOOK_PREFIX
2233#define HOOK_PREFIX "TARGET_C_"
2234HOOK_VECTOR (TARGET_C, c)
2235
2236/* ??? Documenting this hook requires a GFDL license grant. */
2237DEFHOOK_UNDOC
2238(mode_for_suffix,
2239"Return machine mode for non-standard constant literal suffix @var{c},\
2240 or VOIDmode if non-standard suffixes are unsupported.",
2241 enum machine_mode, (char c),
2242 default_mode_for_suffix)
2243
2244HOOK_VECTOR_END (c)
2245
2246/* Functions specific to the C++ frontend. */
2247#undef HOOK_PREFIX
2248#define HOOK_PREFIX "TARGET_CXX_"
2249HOOK_VECTOR (TARGET_CXX, cxx)
2250
2251/* Return the integer type used for guard variables. */
2252DEFHOOK
2253(guard_type,
2254 "",
2255 tree, (void),
2256 default_cxx_guard_type)
2257
2258/* Return true if only the low bit of the guard should be tested. */
2259DEFHOOK
2260(guard_mask_bit,
2261 "",
2262 bool, (void),
2263 hook_bool_void_false)
2264
2265/* Returns the size of the array cookie for an array of type. */
2266DEFHOOK
2267(get_cookie_size,
2268 "",
2269 tree, (tree type),
2270 default_cxx_get_cookie_size)
2271
2272/* Returns true if the element size should be stored in the array cookie. */
2273DEFHOOK
2274(cookie_has_size,
2275 "",
2276 bool, (void),
2277 hook_bool_void_false)
2278
2279/* Allows backends to perform additional processing when
2280 deciding if a class should be exported or imported. */
2281DEFHOOK
2282(import_export_class,
2283 "",
2284 int, (tree type, int import_export), NULL)
2285
2286/* Returns true if constructors and destructors return "this". */
2287DEFHOOK
2288(cdtor_returns_this,
2289 "",
2290 bool, (void),
2291 hook_bool_void_false)
2292
2293/* Returns true if the key method for a class can be an inline
2294 function, so long as it is not declared inline in the class
2295 itself. Returning true is the behavior required by the Itanium C++ ABI. */
2296DEFHOOK
2297(key_method_may_be_inline,
2298 "",
2299 bool, (void),
2300 hook_bool_void_true)
2301
2302DEFHOOK
2303(determine_class_data_visibility,
2304"@var{decl} is a virtual table, virtual table table, typeinfo object,\
2305 or other similar implicit class data object that will be emitted with\
2306 external linkage in this translation unit. No ELF visibility has been\
2307 explicitly specified. If the target needs to specify a visibility\
2308 other than that of the containing class, use this hook to set\
2309 @code{DECL_VISIBILITY} and @code{DECL_VISIBILITY_SPECIFIED}.",
2310 void, (tree decl),
2311 hook_void_tree)
2312
2313/* Returns true (the default) if virtual tables and other
2314 similar implicit class data objects are always COMDAT if they
2315 have external linkage. If this hook returns false, then
2316 class data for classes whose virtual table will be emitted in
2317 only one translation unit will not be COMDAT. */
2318DEFHOOK
2319(class_data_always_comdat,
2320 "",
2321 bool, (void),
2322 hook_bool_void_true)
2323
2324/* Returns true (the default) if the RTTI for the basic types,
2325 which is always defined in the C++ runtime, should be COMDAT;
2326 false if it should not be COMDAT. */
2327DEFHOOK
2328(library_rtti_comdat,
2329 "",
2330 bool, (void),
2331 hook_bool_void_true)
2332
2333/* Returns true if __aeabi_atexit should be used to register static
2334 destructors. */
2335DEFHOOK
2336(use_aeabi_atexit,
2337 "",
2338 bool, (void),
2339 hook_bool_void_false)
2340
2341/* Returns true if target may use atexit in the same manner as
2342 __cxa_atexit to register static destructors. */
2343DEFHOOK
2344(use_atexit_for_cxa_atexit,
2345 "",
2346 bool, (void),
2347 hook_bool_void_false)
2348
2349DEFHOOK
2350(adjust_class_at_definition,
2351"@var{type} is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just\
2352 been defined. Use this hook to make adjustments to the class (eg, tweak\
2353 visibility or perform any other required target modifications).",
2354 void, (tree type),
2355 hook_void_tree)
2356
2357HOOK_VECTOR_END (cxx)
2358
2359/* Functions and data for emulated TLS support. */
2360#undef HOOK_PREFIX
2361#define HOOK_PREFIX "TARGET_EMUTLS_"
2362HOOK_VECTOR (TARGET_EMUTLS, emutls)
2363
2364/* Name of the address and common functions. */
2365DEFHOOKPOD
2366(get_address,
2367 "",
2368 const char *, "__builtin___emutls_get_address")
2369
2370DEFHOOKPOD
2371(register_common,
2372 "",
2373 const char *, "__builtin___emutls_register_common")
2374
2375/* Prefixes for proxy variable and template. */
2376DEFHOOKPOD
2377(var_section,
2378 "",
2379 const char *, NULL)
2380
2381DEFHOOKPOD
2382(tmpl_section,
2383 "",
2384 const char *, NULL)
2385
2386/* Prefixes for proxy variable and template. */
2387DEFHOOKPOD
2388(var_prefix,
2389 "",
2390 const char *, NULL)
2391
2392DEFHOOKPOD
2393(tmpl_prefix,
2394 "",
2395 const char *, NULL)
2396
2397/* Function to generate field definitions of the proxy variable. */
2398DEFHOOK
2399(var_fields,
2400 "",
2401 tree, (tree type, tree *name),
2402 default_emutls_var_fields)
2403
2404/* Function to initialize a proxy variable. */
2405DEFHOOK
2406(var_init,
2407 "",
2408 tree, (tree var, tree decl, tree tmpl_addr),
2409 default_emutls_var_init)
2410
2411/* Whether we are allowed to alter the usual alignment of the
2412 proxy variable. */
2413DEFHOOKPOD
2414(var_align_fixed,
2415 "",
2416 bool, false)
2417
2418/* Whether we can emit debug information for TLS vars. */
2419DEFHOOKPOD
2420(debug_form_tls_address,
2421 "",
2422 bool, false)
2423
2424HOOK_VECTOR_END (emutls)
2425
2426#undef HOOK_PREFIX
2427#define HOOK_PREFIX "TARGET_OPTION_"
2428HOOK_VECTOR (TARGET_OPTION_HOOKS, target_option_hooks)
2429
2430/* Function to validate the attribute((option(...))) strings or NULL. If
2431 the option is validated, it is assumed that DECL_FUNCTION_SPECIFIC will
2432 be filled in in the function decl node. */
2433DEFHOOK
2434(valid_attribute_p,
2435 "",
2436 bool, (tree fndecl, tree name, tree args, int flags),
2437 default_target_option_valid_attribute_p)
2438
2439/* Function to save any extra target state in the target options structure. */
2440DEFHOOK
2441(save,
2442 "",
2443 void, (struct cl_target_option *ptr), NULL)
2444
2445/* Function to restore any extra target state from the target options
2446 structure. */
2447DEFHOOK
2448(restore,
2449 "",
2450 void, (struct cl_target_option *ptr), NULL)
2451
2452/* Function to print any extra target state from the target options
2453 structure. */
2454DEFHOOK
2455(print,
2456 "",
2457 void, (FILE *file, int indent, struct cl_target_option *ptr), NULL)
2458
2459/* Function to parse arguments to be validated for #pragma option, and to
2460 change the state if the options are valid. If the first argument is
2461 NULL, the second argument specifies the default options to use. Return
2462 true if the options are valid, and set the current state. */
56cb42ea
JR
2463/* ??? The documentation in tm.texi is incomplete. */
2464DEFHOOK
38f8b050
JR
2465(pragma_parse,
2466 "",
2467 bool, (tree args, tree pop_target),
2468 default_target_option_pragma_parse)
2469
2470/* Do option overrides for the target. */
2471DEFHOOK
2472(override,
2473 "",
2474 void, (void),
c5387660 2475 hook_void_void)
38f8b050 2476
fac0f722 2477/* Set default optimizations for the target. */
3020190e
JM
2478DEFHOOKPOD
2479(optimization_table,
fac0f722 2480 "",
3020190e 2481 const struct default_options *, empty_optimization_table)
fac0f722 2482
128dc8e2
JM
2483DEFHOOK
2484(default_params,
2485"Set target-dependent default values for @option{--param} settings, using\
2486 calls to @code{set_default_param_value}.",
2487 void, (void),
2488 hook_void_void)
2489
7e4aae92
JM
2490DEFHOOK
2491(init_struct,
2492"Set target-dependent initial values of fields in @var{opts}.",
2493 void, (struct gcc_options *opts),
2494 hook_void_gcc_optionsp)
2495
38f8b050
JR
2496/* Function to determine if one function can inline another function. */
2497#undef HOOK_PREFIX
2498#define HOOK_PREFIX "TARGET_"
2499DEFHOOK
2500(can_inline_p,
2501 "",
2502 bool, (tree caller, tree callee),
2503 default_target_can_inline_p)
2504
2505HOOK_VECTOR_END (target_option)
2506
2507/* For targets that need to mark extra registers as live on entry to
2508 the function, they should define this target hook and set their
2509 bits in the bitmap passed in. */
2510DEFHOOK
2511(extra_live_on_entry,
2512 "",
2513 void, (bitmap regs),
2514 hook_void_bitmap)
2515
f0a0390e
RH
2516/* Determine the type of unwind info to emit for debugging. */
2517DEFHOOK
2518(debug_unwind_info,
2519 "",
2520 enum unwind_info_type, (void),
2521 default_debug_unwind_info)
2522
2523/* Determine the type of unwind info to emit for exceptions. */
2524DEFHOOK
2525(except_unwind_info,
2526 "",
2527 enum unwind_info_type, (void),
2528 default_except_unwind_info)
2529
38f8b050
JR
2530/* Leave the boolean fields at the end. */
2531
2532/* True if unwinding tables should be generated by default. */
2533DEFHOOKPOD
2534(unwind_tables_default,
2535 "",
2536 bool, false)
2537
2538/* True if arbitrary sections are supported. */
2539DEFHOOKPOD
2540(have_named_sections,
2541 "",
2542 bool, false)
2543
2544/* True if we can create zeroed data by switching to a BSS section
2545 and then using ASM_OUTPUT_SKIP to allocate the space. */
2546DEFHOOKPOD
2547(have_switchable_bss_sections,
2548 "",
2549 bool, false)
2550
2551/* True if "native" constructors and destructors are supported,
2552 false if we're using collect2 for the job. */
2553DEFHOOKPOD
2554(have_ctors_dtors,
2555 "",
2556 bool, false)
2557
2558/* True if thread-local storage is supported. */
2559DEFHOOKPOD
2560(have_tls,
2561 "",
2562 bool, false)
2563
2564/* True if a small readonly data section is supported. */
2565DEFHOOKPOD
2566(have_srodata_section,
2567 "",
2568 bool, false)
2569
2570/* True if EH frame info sections should be zero-terminated. */
2571DEFHOOKPOD
2572(terminate_dw2_eh_frame_info,
2573 "",
2574 bool, true)
2575
2576/* True if #NO_APP should be emitted at the beginning of assembly output. */
2577DEFHOOKPOD
2578(asm_file_start_app_off,
2579 "",
2580 bool, false)
2581
2582/* True if output_file_directive should be called for main_input_filename
2583 at the beginning of assembly output. */
2584DEFHOOKPOD
2585(asm_file_start_file_directive,
2586 "",
2587 bool, false)
2588
2589DEFHOOKPOD
2590(handle_pragma_extern_prefix,
2591"True if @code{#pragma extern_prefix} is to be supported.",
2592 bool, 0)
2593
2594/* True if the target is allowed to reorder memory accesses unless
2595 synchronization is explicitly requested. */
2596DEFHOOKPOD
2597(relaxed_ordering,
2598 "",
2599 bool, false)
2600
2601/* Returns true if we should generate exception tables for use with the
2602 ARM EABI. The effects the encoding of function exception specifications. */
2603DEFHOOKPOD
2604(arm_eabi_unwinder,
2605 "",
2606 bool, false)
2607
9730bc27
TT
2608DEFHOOKPOD
2609(want_debug_pub_sections,
2610 "True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections\
2611 should be emitted. These sections are not used on most platforms, and\
2612 in particular GDB does not use them.",
2613 bool, false)
2614
38f8b050
JR
2615/* Leave the boolean fields at the end. */
2616
2617/* Empty macro arguments are undefined in C90, so use an empty macro. */
2618#define C90_EMPTY_HACK
2619/* Close the 'struct gcc_target' definition. */
2620HOOK_VECTOR_END (C90_EMPTY_HACK)
2621
2622HOOK_VECTOR (TARGETCM_INITIALIZER, gcc_targetcm)
2623
2624/* Handle target switch CODE (an OPT_* value). ARG is the argument
2625 passed to the switch; it is NULL if no argument was. VALUE is the
2626 value of ARG if CODE specifies a UInteger option, otherwise it is
2627 1 if the positive form of the switch was used and 0 if the negative
2628 form was. Return true if the switch was valid. */
2629DEFHOOK
2630(handle_c_option,
2631 "",
2632 bool, (size_t code, const char *arg, int value),
2633 default_handle_c_option)
2634
26705988
IS
2635DEFHOOK
2636(objc_construct_string,
2637 "Construct a constant string representation for @var{string}",
2638 tree, (tree string),
2639 NULL)
2640
38f8b050 2641HOOK_VECTOR_END (C90_EMPTY_HACK)