aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/d/gdc.texi39
-rw-r--r--gcc/doc/bugreport.texi2
-rw-r--r--gcc/doc/cpp.texi129
-rw-r--r--gcc/doc/cppdiropts.texi11
-rw-r--r--gcc/doc/cppenv.texi13
-rw-r--r--gcc/doc/cppinternals.texi16
-rw-r--r--gcc/doc/cppopts.texi11
-rw-r--r--gcc/doc/cppwarnopts.texi11
-rw-r--r--gcc/doc/extend.texi5
-rw-r--r--gcc/doc/gcc.texi6
-rw-r--r--gcc/doc/gccint.texi6
-rw-r--r--gcc/doc/gcov-dump.texi62
-rw-r--r--gcc/doc/gcov-tool.texi48
-rw-r--r--gcc/doc/gcov.texi47
-rw-r--r--gcc/doc/include/fdl.texi2
-rw-r--r--gcc/doc/include/funding.texi18
-rw-r--r--gcc/doc/include/gcc-common.texi39
-rw-r--r--gcc/doc/install.texi82
-rw-r--r--gcc/doc/invoke.texi65
-rw-r--r--gcc/doc/lto-dump.texi60
-rw-r--r--gcc/doc/tm.texi993
-rw-r--r--gcc/fortran/gfc-internals.texi3
-rw-r--r--gcc/fortran/intrinsic.texi16
-rw-r--r--gcc/fortran/invoke.texi53
-rw-r--r--gcc/genhooks.cc2
-rw-r--r--gcc/go/gccgo.texi60
-rw-r--r--gcc/target.def16
-rw-r--r--gcc/testsuite/c-c++-common/pragma-diag-15.c2
-rw-r--r--libgomp/libgomp.texi2
-rw-r--r--libiberty/libiberty.texi3
-rw-r--r--libitm/libitm.texi2
-rw-r--r--libquadmath/libquadmath.texi22
32 files changed, 1086 insertions, 760 deletions
diff --git a/gcc/d/gdc.texi b/gcc/d/gdc.texi
index d3bf75c..2c7d3d7 100644
--- a/gcc/d/gdc.texi
+++ b/gcc/d/gdc.texi
@@ -11,27 +11,6 @@
@include gcc-common.texi
-@c Copyright years for this manual.
-@set copyrights-d 2006-2022
-
-@copying
-@c man begin COPYRIGHT
-Copyright @copyright{} @value{copyrights-d} Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
-A copy of the license is included in the
-@c man end
-section entitled ``GNU Free Documentation License''.
-@ignore
-@c man begin COPYRIGHT
-man page gfdl(7).
-@c man end
-@end ignore
-@end copying
-
@ifinfo
@format
@dircategory Software development
@@ -85,10 +64,8 @@ package documentation, see @uref{https://dlang.org/}.
@node Invoking gdc
@chapter Invoking gdc
-@c man title gdc A GCC-based compiler for the D language
+@subsubheading Synopsis
-@ignore
-@c man begin SYNOPSIS gdc
gdc [@option{-c}|@option{-S}] [@option{-g}] [@option{-pg}]
[@option{-O}@var{level}] [@option{-W}@var{warn}@dots{}]
[@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
@@ -97,22 +74,14 @@ gdc [@option{-c}|@option{-S}] [@option{-g}] [@option{-pg}]
Only the most useful options are listed here; see below for the
remainder.
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7), gcc(1)
-and the Info entries for @file{gdc} and @file{gcc}.
-@c man end
-@end ignore
-@c man begin DESCRIPTION gdc
+@subsubheading Description
The @command{gdc} command is the GNU compiler for the D language and
supports many of the same options as @command{gcc}. @xref{Option Summary, ,
Option Summary, gcc, Using the GNU Compiler Collection (GCC)}.
This manual only documents the options specific to @command{gdc}.
-@c man end
-
@menu
* Input and Output files:: Controlling the kind of output:
an executable, object files, assembler files,
@@ -124,7 +93,7 @@ This manual only documents the options specific to @command{gdc}.
* Developer Options:: Options useful for developers of gdc
@end menu
-@c man begin OPTIONS
+@subsubheading Options
@node Input and Output files
@section Input and Output files
@@ -843,8 +812,6 @@ and all @code{function} bodies that are being compiled.
@end table
-@c man end
-
@node Index
@unnumbered Index
diff --git a/gcc/doc/bugreport.texi b/gcc/doc/bugreport.texi
index 84246fa..5bcdf6a 100644
--- a/gcc/doc/bugreport.texi
+++ b/gcc/doc/bugreport.texi
@@ -85,4 +85,4 @@ suggestions for improvement of GCC are welcome in any case.
@section How and Where to Report Bugs
@cindex compiler bugs, reporting
-Bugs should be reported to the bug database at @value{BUGURL}.
+Bugs should be reported to the bug database at $$BUGURL$$.
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index 90b2767..edf22bf 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -8,38 +8,6 @@
@include gcc-common.texi
-@copying
-@c man begin COPYRIGHT
-Copyright @copyright{} 1987-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation. A copy of
-the license is included in the
-@c man end
-section entitled ``GNU Free Documentation License''.
-@ignore
-@c man begin COPYRIGHT
-man page gfdl(7).
-@c man end
-@end ignore
-
-@c man begin COPYRIGHT
-This manual contains no Invariant Sections. The Front-Cover Texts are
-(a) (see below), and the Back-Cover Texts are (b) (see below).
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@end copying
-
@c Create a separate index for command line options.
@defcodeindex op
@syncodeindex vr op
@@ -93,82 +61,6 @@ useful on its own.
* Option Index::
* Concept Index::
-@detailmenu
- --- The Detailed Node Listing ---
-
-Overview
-
-* Character sets::
-* Initial processing::
-* Tokenization::
-* The preprocessing language::
-
-Header Files
-
-* Include Syntax::
-* Include Operation::
-* Search Path::
-* Once-Only Headers::
-* Alternatives to Wrapper #ifndef::
-* Computed Includes::
-* Wrapper Headers::
-* System Headers::
-
-Macros
-
-* Object-like Macros::
-* Function-like Macros::
-* Macro Arguments::
-* Stringizing::
-* Concatenation::
-* Variadic Macros::
-* Predefined Macros::
-* Undefining and Redefining Macros::
-* Directives Within Macro Arguments::
-* Macro Pitfalls::
-
-Predefined Macros
-
-* Standard Predefined Macros::
-* Common Predefined Macros::
-* System-specific Predefined Macros::
-* C++ Named Operators::
-
-Macro Pitfalls
-
-* Misnesting::
-* Operator Precedence Problems::
-* Swallowing the Semicolon::
-* Duplication of Side Effects::
-* Self-Referential Macros::
-* Argument Prescan::
-* Newlines in Arguments::
-
-Conditionals
-
-* Conditional Uses::
-* Conditional Syntax::
-* Deleted Code::
-
-Conditional Syntax
-
-* Ifdef::
-* If::
-* Defined::
-* Else::
-* Elif::
-
-Implementation Details
-
-* Implementation-defined behavior::
-* Implementation limits::
-* Obsolete Features::
-
-Obsolete Features
-
-* Obsolete Features::
-
-@end detailmenu
@end menu
@insertcopying
@@ -176,7 +68,7 @@ Obsolete Features
@node Overview
@chapter Overview
-@c man begin DESCRIPTION
+
The C preprocessor, often known as @dfn{cpp}, is a @dfn{macro processor}
that is used automatically by the C compiler to transform your program
before compilation. It is called a macro processor because it allows
@@ -225,7 +117,6 @@ Mode}.
For clarity, unless noted otherwise, references to @samp{CPP} in this
manual refer to GNU CPP@.
-@c man end
@menu
* Character sets::
@@ -4506,8 +4397,8 @@ pertaining to compilation phases after preprocessing are ignored.
Only options specific to preprocessing behavior are documented here.
Refer to the GCC manual for full documentation of other driver options.
-@ignore
-@c man begin SYNOPSIS
+@subsubheading Synopsis
+
cpp [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
[@option{-I}@var{dir}@dots{}] [@option{-iquote}@var{dir}@dots{}]
[@option{-M}|@option{-MM}] [@option{-MG}] [@option{-MF} @var{filename}]
@@ -4519,14 +4410,9 @@ Only the most useful options are given above; see below for a more
complete list of preprocessor-specific options.
In addition, @command{cpp} accepts most @command{gcc} driver options, which
are not listed here. Refer to the GCC documentation for details.
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7),
-gcc(1), and the Info entries for @file{cpp} and @file{gcc}.
-@c man end
-@end ignore
-
-@c man begin OPTIONS
+
+@subsubheading Options
+
The @command{cpp} command expects two file names as arguments, @var{infile} and
@var{outfile}. The preprocessor reads @var{infile} together with any
other files it specifies with @samp{#include}. All the output generated
@@ -4557,12 +4443,10 @@ options may @emph{not} be grouped: @option{-dM} is very different from
@include cppdiropts.texi
@include cppwarnopts.texi
@end table
-@c man end
@node Environment Variables
@chapter Environment Variables
@cindex environment variables
-@c man begin ENVIRONMENT
This section describes the environment variables that affect how CPP
operates. You can use them to specify directories or prefixes to use
@@ -4575,7 +4459,6 @@ environment variables, which in turn take precedence over the
configuration of GCC@.
@include cppenv.texi
-@c man end
@page
@include fdl.texi
diff --git a/gcc/doc/cppdiropts.texi b/gcc/doc/cppdiropts.texi
index 7ab5b8b..392a645 100644
--- a/gcc/doc/cppdiropts.texi
+++ b/gcc/doc/cppdiropts.texi
@@ -1,14 +1,3 @@
-@c Copyright (C) 1999-2022 Free Software Foundation, Inc.
-@c This is part of the CPP and GCC manuals.
-@c For copying conditions, see the file gcc.texi.
-
-@c ---------------------------------------------------------------------
-@c Options affecting include directory search in the preprocessor
-@c ---------------------------------------------------------------------
-
-@c If this file is included with the flag ``cppmanual'' set, it is
-@c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
-
@item -I @var{dir}
@itemx -iquote @var{dir}
@itemx -isystem @var{dir}
diff --git a/gcc/doc/cppenv.texi b/gcc/doc/cppenv.texi
index c8125bd..ca39dd0 100644
--- a/gcc/doc/cppenv.texi
+++ b/gcc/doc/cppenv.texi
@@ -1,14 +1,3 @@
-@c Copyright (C) 1999-2022 Free Software Foundation, Inc.
-@c This is part of the CPP and GCC manuals.
-@c For copying conditions, see the file gcc.texi.
-
-@c ---------------------------------------------------------------------
-@c Environment variables affecting the preprocessor
-@c ---------------------------------------------------------------------
-
-@c If this file is included with the flag ``cppmanual'' set, it is
-@c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
-
@vtable @env
@item CPATH
@itemx C_INCLUDE_PATH
@@ -38,11 +27,9 @@ beginning or end of a path. For instance, if the value of
@env{CPATH} is @code{:/special/include}, that has the same
effect as @samp{@w{-I. -I/special/include}}.
-@c man end
@ifset cppmanual
See also @ref{Search Path}.
@end ifset
-@c man begin ENVIRONMENT
@item DEPENDENCIES_OUTPUT
@cindex dependencies for make as output
diff --git a/gcc/doc/cppinternals.texi b/gcc/doc/cppinternals.texi
index 75adbbe..b6a4216 100644
--- a/gcc/doc/cppinternals.texi
+++ b/gcc/doc/cppinternals.texi
@@ -18,7 +18,7 @@
@ifinfo
This file documents the internals of the GNU C Preprocessor.
-Copyright (C) 2000-2022 Free Software Foundation, Inc.
+Copyright (C) 2000-2021 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -46,21 +46,7 @@ into another language, under the above conditions for modified versions.
@author Neil Booth
@page
@vskip 0pt plus 1filll
-@c man begin COPYRIGHT
-Copyright @copyright{} 2000-2022 Free Software Foundation, Inc.
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@c man end
@end titlepage
@contents
@page
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi
index c0a92b3..8b242a7 100644
--- a/gcc/doc/cppopts.texi
+++ b/gcc/doc/cppopts.texi
@@ -1,14 +1,3 @@
-@c Copyright (C) 1999-2022 Free Software Foundation, Inc.
-@c This is part of the CPP and GCC manuals.
-@c For copying conditions, see the file gcc.texi.
-
-@c ---------------------------------------------------------------------
-@c Options affecting the preprocessor
-@c ---------------------------------------------------------------------
-
-@c If this file is included with the flag ``cppmanual'' set, it is
-@c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
-
@item -D @var{name}
@opindex D
Predefine @var{name} as a macro, with definition @code{1}.
diff --git a/gcc/doc/cppwarnopts.texi b/gcc/doc/cppwarnopts.texi
index fa04824..fb001ae 100644
--- a/gcc/doc/cppwarnopts.texi
+++ b/gcc/doc/cppwarnopts.texi
@@ -1,14 +1,3 @@
-@c Copyright (C) 1999-2022 Free Software Foundation, Inc.
-@c This is part of the CPP and GCC manuals.
-@c For copying conditions, see the file gcc.texi.
-
-@c ---------------------------------------------------------------------
-@c Options affecting preprocessor warnings
-@c ---------------------------------------------------------------------
-
-@c If this file is included with the flag ``cppmanual'' set, it is
-@c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
-
@item -Wcomment
@itemx -Wcomments
@opindex Wcomment
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index 8da0db9..9fad55e 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -1,8 +1,3 @@
-c Copyright (C) 1988-2022 Free Software Foundation, Inc.
-
-@c This is part of the GCC manual.
-@c For copying conditions, see the file gcc.texi.
-
@node C Extensions
@chapter Extensions to the C Language Family
@cindex extensions, C language
diff --git a/gcc/doc/gcc.texi b/gcc/doc/gcc.texi
index 21bea70..e3a04bd 100644
--- a/gcc/doc/gcc.texi
+++ b/gcc/doc/gcc.texi
@@ -122,10 +122,8 @@ Printed copies are available for $45 each.
This manual documents how to use the GNU compilers,
as well as their features and incompatibilities, and how to report
bugs. It corresponds to the compilers
-@ifset VERSION_PACKAGE
-@value{VERSION_PACKAGE}
-@end ifset
-version @value{version-GCC}.
+$$VERSION_PACKAGE$$
+version $$version-GCC$$.
The internals of the GNU compilers, including how to port them to new
targets and some information about how to write front ends for new
languages, are documented in a separate manual. @xref{Top,,
diff --git a/gcc/doc/gccint.texi b/gcc/doc/gccint.texi
index f6aa065..6d3a5ce 100644
--- a/gcc/doc/gccint.texi
+++ b/gcc/doc/gccint.texi
@@ -77,10 +77,8 @@ This file documents the internals of the GNU compilers.
This manual documents the internals of the GNU compilers, including
how to port them to new targets and some information about how to
write front ends for new languages. It corresponds to the compilers
-@ifset VERSION_PACKAGE
-@value{VERSION_PACKAGE}
-@end ifset
-version @value{version-GCC}. The use of the GNU compilers is documented in a
+$$VERSION_PACKAGE$$
+version $$version-GCC$$. The use of the GNU compilers is documented in a
separate manual. @xref{Top,, Introduction, gcc, Using the GNU
Compiler Collection (GCC)}.
diff --git a/gcc/doc/gcov-dump.texi b/gcc/doc/gcov-dump.texi
index 0491ab1..34f2ef7 100644
--- a/gcc/doc/gcov-dump.texi
+++ b/gcc/doc/gcov-dump.texi
@@ -1,73 +1,29 @@
-@c Copyright (C) 2017-2022 Free Software Foundation, Inc.
+@c Copyright (C) 2017-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
-@ignore
-@c man begin COPYRIGHT
-Copyright @copyright{} 2017-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'' and ``Funding
-Free Software'', the Front-Cover texts being (a) (see below), and with
-the Back-Cover Texts being (b) (see below). A copy of the license is
-included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename gcov-dump
-@settitle offline gcda and gcno profile dump tool
-@end ignore
@node Gcov-dump
@chapter @command{gcov-dump}---an Offline Gcda and Gcno Profile Dump Tool
-@menu
-* Gcov-dump Intro:: Introduction to gcov-dump.
-* Invoking Gcov-dump:: How to use gcov-dump.
-@end menu
-
-@node Gcov-dump Intro
-@section Introduction to @command{gcov-dump}
-@c man begin DESCRIPTION
+@subsubheading Description
@command{gcov-dump} is a tool you can use in conjunction with GCC to
dump content of gcda and gcno profile files offline.
-@c man end
+@subsubheading Synopsis
-@node Invoking Gcov-dump
-@section Invoking @command{gcov-dump}
-
-@smallexample
-Usage: gcov-dump @r{[}@var{OPTION}@r{]} ... @var{gcovfiles}
-@end smallexample
-
-@command{gcov-dump} accepts the following options:
-
-@ignore
-@c man begin SYNOPSIS
-gcov-dump [@option{-v}|@option{--version}]
+gcov-dump
+ [@option{-v}|@option{--version}]
[@option{-h}|@option{--help}]
[@option{-l}|@option{--long}]
[@option{-p}|@option{--positions}]
[@option{-r}|@option{--raw}]
[@option{-s}|@option{--stable}]
- @var{gcovfiles}
-@c man end
-@end ignore
+ [@var{gcovfiles}]
+
+@subsubheading Options
-@c man begin OPTIONS
@table @gcctabopt
@item -h
@itemx --help
@@ -95,5 +51,3 @@ Print content in stable format usable for comparison.
Display the @command{gcov-dump} version number (on the standard output),
and exit without doing any further processing.
@end table
-
-@c man end
diff --git a/gcc/doc/gcov-tool.texi b/gcc/doc/gcov-tool.texi
index 7715083..7f39379 100644
--- a/gcc/doc/gcov-tool.texi
+++ b/gcc/doc/gcov-tool.texi
@@ -1,34 +1,7 @@
-@c Copyright (C) 2014-2022 Free Software Foundation, Inc.
+@c Copyright (C) 2014-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
-@ignore
-@c man begin COPYRIGHT
-Copyright @copyright{} 2014-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'' and ``Funding
-Free Software'', the Front-Cover texts being (a) (see below), and with
-the Back-Cover Texts being (b) (see below). A copy of the license is
-included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename gcov-tool
-@settitle offline gcda profile processing tool
-@end ignore
-
@node Gcov-tool
@chapter @command{gcov-tool}---an Offline Gcda Profile Processing Tool
@@ -42,7 +15,8 @@ manipulate or process gcda profile files offline.
@node Gcov-tool Intro
@section Introduction to @command{gcov-tool}
-@c man begin DESCRIPTION
+
+@subsubheading Description
@command{gcov-tool} is an offline tool to process gcc's gcda profile files.
@@ -107,8 +81,6 @@ are runtime dependent, like heap addresses. It's normal to see some difference
in these kind of counters.
@end itemize
-@c man end
-
@node Invoking Gcov-tool
@section Invoking @command{gcov-tool}
@@ -118,8 +90,8 @@ gcov-tool @r{[}@var{global-options}@r{]} SUB_COMMAND @r{[}@var{sub_command-optio
@command{gcov-tool} accepts the following options:
-@ignore
-@c man begin SYNOPSIS
+@subsubheading Synopsis
+
gcov-tool [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
gcov-tool merge [merge-options] @var{directory1} @var{directory2}
@@ -145,14 +117,8 @@ gcov-tool overlap [overlap-options] @var{directory1} @var{directory2}
[@option{-t}|@option{--hot_threshold}] @var{float}
[@option{-v}|@option{--verbose}]
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7), gcc(1), gcov(1) and the Info entry for
-@file{gcc}.
-@c man end
-@end ignore
+@subsubheading Options
-@c man begin OPTIONS
@table @gcctabopt
@item -h
@itemx --help
@@ -263,5 +229,3 @@ Set the verbose mode.
@end table
@end table
-
-@c man end
diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi
index a1f7d26..b405534 100644
--- a/gcc/doc/gcov.texi
+++ b/gcc/doc/gcov.texi
@@ -1,34 +1,7 @@
-@c Copyright (C) 1996-2022 Free Software Foundation, Inc.
+@c Copyright (C) 1996-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
-@ignore
-@c man begin COPYRIGHT
-Copyright @copyright{} 1996-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'' and ``Funding
-Free Software'', the Front-Cover texts being (a) (see below), and with
-the Back-Cover Texts being (b) (see below). A copy of the license is
-included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename gcov
-@settitle coverage testing tool
-@end ignore
-
@node Gcov
@chapter @command{gcov}---a Test Coverage Program
@@ -47,7 +20,6 @@ test code coverage in your programs.
@node Gcov Intro
@section Introduction to @command{gcov}
-@c man begin DESCRIPTION
@command{gcov} is a test coverage program. Use it in concert with GCC
to analyze your programs to help create more efficient, faster running
@@ -107,8 +79,6 @@ timing information you can use along with the information you get from
@command{gcov} works only on code compiled with GCC@. It is not
compatible with any other profiling or test coverage mechanism.
-@c man end
-
@node Invoking Gcov
@section Invoking @command{gcov}
@@ -118,8 +88,9 @@ gcov @r{[}@var{options}@r{]} @var{files}
@command{gcov} accepts the following options:
-@ignore
-@c man begin SYNOPSIS
+
+@subsubheading Synopsis
+
gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
[@option{-a}|@option{--all-blocks}]
[@option{-b}|@option{--branch-probabilities}]
@@ -141,13 +112,9 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
[@option{-u}|@option{--unconditional-branches}]
[@option{-x}|@option{--hash-filenames}]
@var{files}
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7), gcc(1) and the Info entry for @file{gcc}.
-@c man end
-@end ignore
-@c man begin OPTIONS
+@subsubheading Options
+
@table @gcctabopt
@item -a
@@ -906,8 +873,6 @@ set @samp{GCOV_EXIT_AT_ERROR} environment variable.
That can help users to find profile clashing which leads
to a misleading profile.
-@c man end
-
@node Gcov Data Files
@section Brief Description of @command{gcov} Data Files
diff --git a/gcc/doc/include/fdl.texi b/gcc/doc/include/fdl.texi
index e2bcdfd..45b40c7 100644
--- a/gcc/doc/include/fdl.texi
+++ b/gcc/doc/include/fdl.texi
@@ -19,7 +19,7 @@ of this license document, but changing it is not allowed.
@ifset gfdlhtml
@ifnothtml
@comment node-name, next, previous, up
-@node GNU Free Documentation License, Concept Index, Specific, Top
+@node GNU Free Documentation License
@end ifnothtml
@html
<h1 align="center">Installing GCC: GNU Free Documentation License</h1>
diff --git a/gcc/doc/include/funding.texi b/gcc/doc/include/funding.texi
index d1583fa..f138b1b 100644
--- a/gcc/doc/include/funding.texi
+++ b/gcc/doc/include/funding.texi
@@ -1,13 +1,4 @@
-@ignore
-@c Set file name and title for man page.
-@setfilename fsf-funding
-@settitle Funding Free Software
-@c man begin SEEALSO
-gpl(7), gfdl(7).
-@c man end
-@end ignore
@node Funding
-@c man begin DESCRIPTION
@unnumbered Funding Free Software
If you want to have more free software a few years from now, it makes
@@ -49,12 +40,3 @@ major new features or packages contribute the most.
By establishing the idea that supporting further development is ``the
proper thing to do'' when distributing free software for a fee, we can
assure a steady flow of resources into making more free software.
-@c man end
-
-@display
-@c man begin COPYRIGHT
-Copyright @copyright{} 1994 Free Software Foundation, Inc.
-Verbatim copying and redistribution of this section is permitted
-without royalty; alteration is not permitted.
-@c man end
-@end display
diff --git a/gcc/doc/include/gcc-common.texi b/gcc/doc/include/gcc-common.texi
index 4365e4f..f61029e 100644
--- a/gcc/doc/include/gcc-common.texi
+++ b/gcc/doc/include/gcc-common.texi
@@ -1,17 +1,5 @@
-@c Copyright (C) 2001-2022 Free Software Foundation, Inc.
-@c This is part of the GCC manual.
-@c For copying conditions, see the file gcc.texi.
-
-@c Version number and development mode.
-@c version-GCC is @set to the base GCC version number.
-@c DEVELOPMENT is @set for an in-development version, @clear for a
-@c release version (corresponding to ``experimental''/anything else
-@c in gcc/DEV-PHASE).
-
@include gcc-vers.texi
-@c Common macros to support generating man pages:
-
@macro gcctabopt{body}
@code{\body\}
@end macro
@@ -20,9 +8,6 @@
\body\
@end smallexample
@end macro
-@c Makeinfo handles the above macro OK, TeX needs manual line breaks;
-@c they get lost at some point in handling the macro. But if @macro is
-@c used here rather than @alias, it produces double line breaks.
@iftex
@alias gol = *
@end iftex
@@ -31,43 +16,27 @@
@end macro
@end ifnottex
-@c For FSF printing, define FSFPRINT. Also update the ISBN and last
-@c printing date for the manual being printed.
-@c @set FSFPRINT
@ifset FSFPRINT
@smallbook
@finalout
-@c Cause even numbered pages to be printed on the left hand side of
-@c the page and odd numbered pages to be printed on the right hand
-@c side of the page. Using this, you can print on both sides of a
-@c sheet of paper and have the text on the same part of the sheet.
-@c The text on right hand pages is pushed towards the right hand
-@c margin and the text on left hand pages is pushed toward the left
-@c hand margin.
-@c (To provide the reverse effect, set bindingoffset to -0.75in.)
@tex
\global\bindingoffset=0.75in
\global\normaloffset =0.75in
@end tex
@end ifset
-@c Macro to generate a "For the N.N.N version" subtitle on the title
-@c page of TeX documentation. This macro should be used in the
-@c titlepage environment after the title and any other subtitles have
-@c been placed, and before any authors are placed.
@macro versionsubtitle
@ifclear DEVELOPMENT
-@subtitle For @sc{gcc} version @value{version-GCC}
+@subtitle For @sc{gcc} version $$version-GCC$$ $$development-GCC$$
@end ifclear
@ifset DEVELOPMENT
-@subtitle For @sc{gcc} version @value{version-GCC} (pre-release)
+@subtitle For @sc{gcc} version $$version-GCC$$ $$development-GCC$$
@end ifset
@ifset VERSION_PACKAGE
@sp 1
-@subtitle @value{VERSION_PACKAGE}
+@subtitle $$VERSION_PACKAGE$$
@end ifset
-@c Even if there are no authors, the second titlepage line should be
-@c forced to the bottom of the page.
+
@vskip 0pt plus 1filll
@end macro
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index a01b805..b519934 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -92,6 +92,8 @@ Free Documentation License}''.
* gccinstall: (gccinstall). Installing the GNU Compiler Collection.
@end direntry
+@top Introduction
+
@c Part 3 Titlepage and Copyright
@titlepage
@title Installing GCC
@@ -105,7 +107,7 @@ Free Documentation License}''.
@c Part 4 Top node, Master Menu, and/or Table of Contents
@ifinfo
-@node Top, , , (dir)
+@node Top
@comment node-name, next, Previous, up
@menu
@@ -129,7 +131,7 @@ Free Documentation License}''.
@c ***Installing GCC**********************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Installing GCC, Binaries, , Top
+@node Installing GCC
@end ifnothtml
@ifset indexhtml
@ifnothtml
@@ -149,12 +151,7 @@ with their own installation instructions. This document supersedes all
package-specific installation instructions.
@emph{Before} starting the build/install procedure please check the
-@ifnothtml
@ref{Specific, host/target specific installation notes}.
-@end ifnothtml
-@ifhtml
-@uref{specific.html,,host/target specific installation notes}.
-@end ifhtml
We recommend you browse the entire generic installation instructions before
you proceed.
@@ -212,7 +209,7 @@ more binaries exist that use them.
@c ***Prerequisites**************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Prerequisites, Downloading the source, , Installing GCC
+@node Prerequisites
@end ifnothtml
@ifset prerequisiteshtml
@ifnothtml
@@ -553,7 +550,7 @@ own sources.
@c ***Downloading the source**************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Downloading the source, Configuration, Prerequisites, Installing GCC
+@node Downloading the source
@end ifnothtml
@ifset downloadhtml
@ifnothtml
@@ -605,14 +602,14 @@ respectively (or use symbolic links with the same name).
@c ***Configuration***********************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Configuration, Building, Downloading the source, Installing GCC
+@node Configuration
@end ifnothtml
@ifset configurehtml
@ifnothtml
-@chapter Installing GCC: Configuration
+@chapter Configuration
@end ifnothtml
@cindex Configuration
-@cindex Installing GCC: Configuration
+@cindex Configuration
Like most GNU software, GCC must be configured before it can be built.
This document describes the recommended configuration procedure
@@ -660,12 +657,7 @@ Note that the bootstrap compiler and the resulting GCC must be link
compatible, else the bootstrap will fail with linker errors about
incompatible object file formats. Several multilibed targets are
affected by this requirement, see
-@ifnothtml
-@ref{Specific, host/target specific installation notes}.
-@end ifnothtml
-@ifhtml
-@uref{specific.html,,host/target specific installation notes}.
-@end ifhtml
+Specific, host/target specific installation notes.
@end ignore
To configure GCC:
@@ -865,13 +857,7 @@ Specify additional command line driver SPECS.
This can be useful if you need to turn on a non-standard feature by
default without modifying the compiler's source code, for instance
@option{--with-specs=%@{!fcommon:%@{!fno-common:-fno-common@}@}}.
-@ifnothtml
-@xref{Spec Files,, Specifying subprocesses and the switches to pass to them,
-gcc, Using the GNU Compiler Collection (GCC)},
-@end ifnothtml
-@ifhtml
See ``Spec Files'' in the main manual
-@end ifhtml
@end table
@@ -1209,13 +1195,7 @@ Makefile fragments might look like for this version of GCC. The macros
expected to be defined in these fragments are not stable across GCC
releases, so make sure they define the @code{MULTILIB}-related macros
expected by the version of GCC you are building.
-@ifnothtml
-@xref{Target Fragment,, Target Makefile Fragments, gccint, GNU Compiler
-Collection (GCC) Internals}.
-@end ifnothtml
-@ifhtml
See ``Target Makefile Fragments'' in the internals manual.
-@end ifhtml
The table below gives the combination of ISAs, architectures, FPUs and
floating-point ABIs for which multilibs are built for each predefined
@@ -1830,13 +1810,7 @@ filename.
enabled may bloat the TOC, eventually leading to @code{TOC overflow} errors,
requiring the use of either the @option{-Wl,-bbigtoc} linker flag (seen to
break with the @code{GDB} debugger) or some of the TOC-related compiler flags,
-@ifnothtml
-@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
-Using the GNU Compiler Collection (GCC)}.
-@end ifnothtml
-@ifhtml
see ``RS/6000 and PowerPC Options'' in the main manual.
-@end ifhtml
@option{--with-aix-soname} is currently supported by @samp{libgcc_s} only, so
this option is still experimental and not for normal use yet.
@@ -1943,26 +1917,14 @@ Turn on @option{-fPIE} and @option{-pie} by default.
@item --enable-secureplt
This option enables @option{-msecure-plt} by default for powerpc-linux.
-@ifnothtml
-@xref{RS/6000 and PowerPC Options,, RS/6000 and PowerPC Options, gcc,
-Using the GNU Compiler Collection (GCC)},
-@end ifnothtml
-@ifhtml
See ``RS/6000 and PowerPC Options'' in the main manual
-@end ifhtml
@item --enable-default-ssp
Turn on @option{-fstack-protector-strong} by default.
@item --enable-cld
This option enables @option{-mcld} by default for 32-bit x86 targets.
-@ifnothtml
-@xref{i386 and x86-64 Options,, i386 and x86-64 Options, gcc,
-Using the GNU Compiler Collection (GCC)},
-@end ifnothtml
-@ifhtml
See ``i386 and x86-64 Options'' in the main manual
-@end ifhtml
@item --enable-large-address-aware
The @option{--enable-large-address-aware} option arranges for MinGW
@@ -2684,13 +2646,13 @@ to be available for each multilib variant, unless configured with
@c ***Building****************************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Building, Testing, Configuration, Installing GCC
+@node Building
@end ifnothtml
@ifset buildhtml
@ifnothtml
@chapter Building
@end ifnothtml
-@cindex Installing GCC: Building
+@cindex Building
Now that GCC is configured, you are ready to build the compiler and
runtime libraries.
@@ -3080,14 +3042,14 @@ the code quality may be much worse.
@c ***Testing*****************************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Testing, Final install, Building, Installing GCC
+@node Testing
@end ifnothtml
@ifset testhtml
@ifnothtml
-@chapter Installing GCC: Testing
+@chapter Testing
@end ifnothtml
@cindex Testing
-@cindex Installing GCC: Testing
+@cindex Testing
@cindex Testsuite
Before you install GCC, we encourage you to run the testsuites and to
@@ -3312,11 +3274,11 @@ messages may be automatically processed.
@c ***Final install***********************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Final install, , Testing, Installing GCC
+@node Final install
@end ifnothtml
@ifset finalinstallhtml
@ifnothtml
-@chapter Installing GCC: Final installation
+@chapter Final installation
@end ifnothtml
Now that GCC has been built (and optionally tested), you can install it with
@@ -3471,14 +3433,14 @@ If you would like to generate online HTML documentation, do @samp{cd
@c ***Binaries****************************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Binaries, Specific, Installing GCC, Top
+@node Binaries
@end ifnothtml
@ifset binarieshtml
@ifnothtml
-@chapter Installing GCC: Binaries
+@chapter Binaries
@end ifnothtml
@cindex Binaries
-@cindex Installing GCC: Binaries
+@cindex Binaries
We are often asked about pre-compiled versions of GCC@. While we cannot
provide these for all platforms, below you'll find links to binaries for
@@ -3555,7 +3517,7 @@ links to GNU Fortran binaries for several platforms.
@c ***Specific****************************************************************
@ifnothtml
@comment node-name, next, previous, up
-@node Specific, GNU Free Documentation License, Binaries, Top
+@node Specific
@end ifnothtml
@ifset specifichtml
@ifnothtml
@@ -5255,7 +5217,7 @@ automatically.
@c Part 6 The End of the Document
@ifinfo
@comment node-name, next, previous, up
-@node Concept Index, , GNU Free Documentation License, Top
+@node Concept Index
@end ifinfo
@ifinfo
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 975ee64..f367c3a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1,37 +1,11 @@
-@c Copyright (C) 1988-2022 Free Software Foundation, Inc.
+@c Copyright (C) 1988-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
-@ignore
-@c man begin INCLUDE
-@include gcc-vers.texi
-@c man end
-
-@c man begin COPYRIGHT
-Copyright @copyright{} 1988-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'' and ``Funding
-Free Software'', the Front-Cover texts being (a) (see below), and with
-the Back-Cover Texts being (b) (see below). A copy of the license is
-included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
+@setfilename gcc
-(b) The FSF's Back-Cover Text is:
+@subsubheading Synopsis
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename gcc
-@settitle GNU project C and C++ compiler
-@c man begin SYNOPSIS
gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
[@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
[@option{-W}@var{warn}@dots{}] [@option{-Wpedantic}]
@@ -42,23 +16,12 @@ gcc [@option{-c}|@option{-S}|@option{-E}] [@option{-std=}@var{standard}]
Only the most useful options are listed here; see below for the
remainder. @command{g++} accepts mostly the same options as @command{gcc}.
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7),
-cpp(1), gcov(1), as(1), ld(1), gdb(1)
-and the Info entries for @file{gcc}, @file{cpp}, @file{as},
-@file{ld}, @file{binutils} and @file{gdb}.
-@c man end
-@c man begin BUGS
For instructions on reporting bugs, see
-@w{@value{BUGURL}}.
-@c man end
-@c man begin AUTHOR
+$$BUGURL$$.
+
See the Info entry for @command{gcc}, or
@w{@uref{https://gcc.gnu.org/onlinedocs/gcc/Contributors.html}},
for contributors to GCC@.
-@c man end
-@end ignore
@node Invoking GCC
@chapter GCC Command Options
@@ -66,7 +29,8 @@ for contributors to GCC@.
@cindex command options
@cindex options, GCC command
-@c man begin DESCRIPTION
+@subsubheading Description
+
When you invoke GCC, it normally does preprocessing, compilation,
assembly and linking. The ``overall options'' allow you to stop this
process at an intermediate stage. For example, the @option{-c} option
@@ -136,8 +100,6 @@ designated by @var{byte-size} in the following text. Refer to the NIST,
IEC, and other relevant national and international standards for the full
listing and explanation of the binary and decimal byte size prefixes.
-@c man end
-
@xref{Option Index}, for an index to GCC's options.
@menu
@@ -175,7 +137,7 @@ listing and explanation of the binary and decimal byte size prefixes.
* C++ Modules:: Experimental C++20 module system.
@end menu
-@c man begin OPTIONS
+@subsubheading Options
@node Option Summary
@section Option Summary
@@ -21161,8 +21123,6 @@ This option is deprecated.
@opindex mapcs
This is a synonym for @option{-mapcs-frame} and is deprecated.
-@ignore
-@c not currently implemented
@item -mapcs-stack-check
@opindex mapcs-stack-check
Generate code to check the amount of stack space available upon entry to
@@ -21173,12 +21133,10 @@ called, depending upon the amount of stack space required. The runtime
system is required to provide these functions. The default is
@option{-mno-apcs-stack-check}, since this produces smaller code.
-@c not currently implemented
@item -mapcs-reentrant
@opindex mapcs-reentrant
Generate reentrant, position-independent code. The default is
@option{-mno-apcs-reentrant}.
-@end ignore
@item -mthumb-interwork
@opindex mthumb-interwork
@@ -34087,8 +34045,6 @@ instructions. The default value is 0.
These are listed under @xref{S/390 and zSeries Options}.
-@c man end
-
@node Spec Files
@section Specifying Subprocesses and the Switches to Pass to Them
@cindex Spec Files
@@ -34790,7 +34746,8 @@ proper position among the other output files.
@section Environment Variables Affecting GCC
@cindex environment variables
-@c man begin ENVIRONMENT
+@subsubheading Environment
+
This section describes several environment variables that affect how GCC
operates. Some of them work by specifying directories or prefixes to use
when searching for various kinds of files. Some are used to specify other
@@ -34959,8 +34916,6 @@ preprocessor.
@include cppenv.texi
-@c man end
-
@node Precompiled Headers
@section Using Precompiled Headers
@cindex precompiled headers
diff --git a/gcc/doc/lto-dump.texi b/gcc/doc/lto-dump.texi
index d7fb346..54d4cc1 100644
--- a/gcc/doc/lto-dump.texi
+++ b/gcc/doc/lto-dump.texi
@@ -1,63 +1,20 @@
-@c Copyright (C) 2018-2022 Free Software Foundation, Inc.
+@c Copyright (C) 2018-2021 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
-@ignore
-@c man begin COPYRIGHT
-Copyright @copyright{} 2017-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'' and ``Funding
-Free Software'', the Front-Cover texts being (a) (see below), and with
-the Back-Cover Texts being (b) (see below). A copy of the license is
-included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename lto-dump
-@settitle Tool for dumping LTO object files.
-@end ignore
@node lto-dump
@chapter @command{lto-dump}---Tool for dumping LTO object files.
-@menu
-* lto-dump Intro:: Introduction to lto-dump.
-* Invoking lto-dump:: How to use lto-dump.
-@end menu
-
-@node lto-dump Intro
-@section Introduction to @command{lto-dump}
-@c man begin DESCRIPTION
+@subsubheading Description
@command{lto-dump} is a tool you can use in conjunction with GCC to
dump link time optimization object files.
-@c man end
+@subsubheading Synopsis
-@node Invoking lto-dump
-@section Invoking @command{lto-dump}
-
-@smallexample
-Usage: lto-dump @r{[}@var{OPTION}@r{]} ... @var{objfiles}
-@end smallexample
-
-@command{lto-dump} accepts the following options:
-
-@ignore
-@c man begin SYNOPSIS
-lto-dump [@option{-list}]
+lto-dump
+ [@option{-list}]
[@option{-demangle}]
[@option{-defined-only}]
[@option{-print-value}]
@@ -73,10 +30,9 @@ lto-dump [@option{-list}]
[@option{-dump-level=}]
[@option{-dump-body=}]
[@option{-help}] @var{lto-dump}
-@c man end
-@end ignore
-@c man begin OPTIONS
+@subsubheading Options
+
@table @gcctabopt
@item -list
Dumps list of details of functions and variables.
@@ -127,5 +83,3 @@ Dump the specific gimple body.
Display the dump tool help.
@end table
-
-@c man end
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 8572313..b17e42b 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -400,11 +400,13 @@ the effect you need. Overriding this macro may be avoidable by overriding
@end defmac
@deftypevr {Common Target Hook} bool TARGET_ALWAYS_STRIP_DOTDOT
+@c hook-start:TARGET_ALWAYS_STRIP_DOTDOT
True if @file{..} components should always be removed from directory names
computed relative to GCC's internal directories, false (default) if such
components should be preserved and directory names containing them passed
to other tools such as the linker.
@end deftypevr
+@c hook-end
@defmac MULTILIB_DEFAULTS
Define this macro as a C expression for the initializer of an array of
@@ -670,6 +672,8 @@ any target-specific headers.
@end deftypevar
@deftypevr {Common Target Hook} int TARGET_DEFAULT_TARGET_FLAGS
+@c hook-start:TARGET_DEFAULT_TARGET_FLAGS
+@c hook-end
This variable specifies the initial value of @code{target_flags}.
Its default setting is 0.
@end deftypevr
@@ -678,6 +682,8 @@ Its default setting is 0.
@cindex features, optional, in system conventions
@deftypefn {Common Target Hook} bool TARGET_HANDLE_OPTION (struct gcc_options *@var{opts}, struct gcc_options *@var{opts_set}, const struct cl_decoded_option *@var{decoded}, location_t @var{loc})
+@c hook-start:TARGET_HANDLE_OPTION
+@c hook-end
This hook is called whenever the user specifies one of the
target-specific options described by the @file{.opt} definition files
(@pxref{Options}). It has the opportunity to do some option-specific
@@ -692,6 +698,8 @@ via attributes).
@end deftypefn
@deftypefn {C Target Hook} bool TARGET_HANDLE_C_OPTION (size_t @var{code}, const char *@var{arg}, int @var{value})
+@c hook-start:TARGET_HANDLE_C_OPTION
+@c hook-end
This target hook is called whenever the user specifies one of the
target-specific C language family options described by the @file{.opt}
definition files(@pxref{Options}). It has the opportunity to do some
@@ -706,6 +714,7 @@ should use @code{TARGET_HANDLE_C_OPTION} instead.
@end deftypefn
@deftypefn {C Target Hook} tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree @var{string})
+@c hook-start:TARGET_OBJC_CONSTRUCT_STRING_OBJECT
Targets may provide a string object type that can be used within
and between C, C++ and their respective Objective-C dialects.
A string object might, for example, embed encoding and length information.
@@ -719,21 +728,28 @@ representation provided in @var{string}.
At present, the hook is used by Objective-C only, to obtain a
common-format string object when the target provides one.
@end deftypefn
+@c hook-end
@deftypefn {C Target Hook} void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE (const char *@var{classname})
+@c hook-start:TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
Declare that Objective C class @var{classname} is referenced
by the current TU.
@end deftypefn
+@c hook-end
@deftypefn {C Target Hook} void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char *@var{classname})
+@c hook-start:TARGET_OBJC_DECLARE_CLASS_DEFINITION
Declare that Objective C class @var{classname} is defined
by the current TU.
@end deftypefn
+@c hook-end
@deftypefn {C Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree @var{stringref})
+@c hook-start:TARGET_STRING_OBJECT_REF_TYPE_P
If a target implements string objects then this hook should return
@code{true} if @var{stringref} is a valid reference to such an object.
@end deftypefn
+@c hook-end
@deftypefn {C Target Hook} void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree @var{format_arg}, tree @var{args_list})
If a target implements string objects then this hook should
@@ -741,8 +757,10 @@ provide a facility to check the function arguments in @var{args_list}
against the format specifiers in @var{format_arg} where the type of
@var{format_arg} is one recognized as a valid string reference type.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void)
+@c hook-start:TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
This target function is similar to the hook @code{TARGET_OPTION_OVERRIDE}
but is called when the optimize level is changed via an attribute or
pragma or when it is reset at the end of the code affected by the
@@ -751,6 +769,7 @@ when @code{TARGET_OPTION_OVERRIDE} is called so if you want to perform these
actions then, you should have @code{TARGET_OPTION_OVERRIDE} call
@code{TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE}.
@end deftypefn
+@c hook-end
@defmac C_COMMON_OVERRIDE_OPTIONS
This is similar to the @code{TARGET_OPTION_OVERRIDE} hook
@@ -761,6 +780,8 @@ frontends.
@end defmac
@deftypevr {Common Target Hook} {const struct default_options *} TARGET_OPTION_OPTIMIZATION_TABLE
+@c hook-start:TARGET_OPTION_OPTIMIZATION_TABLE
+@c hook-end
Some machines may desire to change what optimizations are performed for
various optimization levels. This variable, if defined, describes
options to enable at particular sets of optimization levels. These
@@ -775,8 +796,10 @@ options are changed via @code{#pragma GCC optimize} or by using the
@end deftypevr
@deftypefn {Common Target Hook} void TARGET_OPTION_INIT_STRUCT (struct gcc_options *@var{opts})
+@c hook-start:TARGET_OPTION_INIT_STRUCT
Set target-dependent initial values of fields in @var{opts}.
@end deftypefn
+@c hook-end
@deftypefn {Common Target Hook} {const char *} TARGET_COMPUTE_MULTILIB (const struct switchstr *@var{switches}, int @var{n_switches}, const char *@var{multilib_dir}, const char *@var{multilib_defaults}, const char *@var{multilib_select}, const char *@var{multilib_matches}, const char *@var{multilib_exclusions}, const char *@var{multilib_reuse})
Some targets like RISC-V might have complicated multilib reuse rules which
@@ -815,6 +838,7 @@ is 0.
@end defmac
@deftypefn {Target Hook} bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P (void)
+@c hook-start:TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P
Returns true if the target supports IEEE 754 floating-point exceptions
and rounding modes, false otherwise. This is intended to relate to the
@code{float} and @code{double} types, but not necessarily @code{long double}.
@@ -823,6 +847,7 @@ available and false otherwise, on the assumption that hardware floating
point supports exceptions and rounding modes but software floating point
does not.
@end deftypefn
+@c hook-end
@node Per-Function Data
@section Defining data structures for per-function information.
@@ -996,6 +1021,7 @@ Do not define this macro if it would never modify @var{m}.
@end defmac
@deftypefn {Target Hook} {enum flt_eval_method} TARGET_C_EXCESS_PRECISION (enum excess_precision_type @var{type})
+@c hook-start:TARGET_C_EXCESS_PRECISION
Return a value, with the same meaning as the C99 macro
@code{FLT_EVAL_METHOD} that describes which excess precision should be
applied. @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT},
@@ -1019,8 +1045,10 @@ when @var{type} is @code{EXCESS_PRECISION_TYPE_STANDARD},
Return a value, with the same meaning as the C99 macro
@code{FLT_EVAL_METHOD} that describes which excess precision should be
applied.
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree @var{type}, machine_mode @var{mode}, int *@var{punsignedp}, const_tree @var{funtype}, int @var{for_return})
+@c hook-start:TARGET_PROMOTE_FUNCTION_MODE
Like @code{PROMOTE_MODE}, but it is applied to outgoing function arguments or
function return values. The target hook should return the new mode
and possibly change @code{*@var{punsignedp}} if the promotion should
@@ -1041,6 +1069,7 @@ The default is to not promote arguments and return values. You can
also define the hook to @code{default_promote_function_mode_always_promote}
if you would like to apply the same rules given by @code{PROMOTE_MODE}.
@end deftypefn
+@c hook-end
@defmac PARM_BOUNDARY
Normal alignment required for function parameters on the stack, in
@@ -1082,10 +1111,12 @@ just the biggest alignment that, when violated, may cause a fault.
@end defmac
@deftypevr {Target Hook} HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
+@c hook-start:TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
If defined, this target hook specifies the absolute biggest alignment
that a type or variable can have on this machine, otherwise,
@code{BIGGEST_ALIGNMENT} is used.
@end deftypevr
+@c hook-end
@defmac MALLOC_ABI_ALIGNMENT
Alignment, in bits, a C conformant malloc implementation has to
@@ -1151,16 +1182,20 @@ On 32-bit ELF the largest supported section alignment in bits is
@end defmac
@deftypefn {Target Hook} void TARGET_LOWER_LOCAL_DECL_ALIGNMENT (tree @var{decl})
+@c hook-start:TARGET_LOWER_LOCAL_DECL_ALIGNMENT
Define this hook to lower alignment of local, parm or result
decl @samp{(@var{decl})}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_STATIC_RTX_ALIGNMENT (machine_mode @var{mode})
+@c hook-start:TARGET_STATIC_RTX_ALIGNMENT
This hook returns the preferred alignment in bits for a
statically-allocated rtx, such as a constant pool entry. @var{mode}
is the mode of the rtx. The default implementation returns
@samp{GET_MODE_ALIGNMENT (@var{mode})}.
@end deftypefn
+@c hook-end
@defmac DATA_ALIGNMENT (@var{type}, @var{basic-align})
If defined, a C expression to compute the alignment for a variable in
@@ -1187,6 +1222,7 @@ If this macro is not defined, then @var{basic-align} is used.
@end defmac
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_CONSTANT_ALIGNMENT (const_tree @var{constant}, HOST_WIDE_INT @var{basic_align})
+@c hook-start:TARGET_CONSTANT_ALIGNMENT
This hook returns the alignment in bits of a constant that is being
placed in memory. @var{constant} is the constant and @var{basic_align}
is the alignment that the object would ordinarily have.
@@ -1198,6 +1234,7 @@ constants to be word aligned so that @code{strcpy} calls that copy
constants can be done inline. The function
@code{constant_alignment_word_strings} provides such a definition.
@end deftypefn
+@c hook-end
@defmac LOCAL_ALIGNMENT (@var{type}, @var{basic-align})
If defined, a C expression to compute the alignment for a variable in
@@ -1214,12 +1251,14 @@ If the value of this macro has a type, it should be an unsigned type.
@end defmac
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree @var{type})
+@c hook-start:TARGET_VECTOR_ALIGNMENT
This hook can be used to define the alignment for a vector of type
@var{type}, in order to comply with a platform ABI. The default is to
require natural alignment for vector types. The alignment returned by
this hook must be a power-of-two multiple of the default alignment of
the vector element type.
@end deftypefn
+@c hook-end
@defmac STACK_SLOT_ALIGNMENT (@var{type}, @var{mode}, @var{basic-align})
If defined, a C expression to compute the alignment for stack slot.
@@ -1354,21 +1393,26 @@ to aligning a bit-field within the structure.
@end defmac
@deftypefn {Target Hook} bool TARGET_ALIGN_ANON_BITFIELD (void)
+@c hook-start:TARGET_ALIGN_ANON_BITFIELD
When @code{PCC_BITFIELD_TYPE_MATTERS} is true this hook will determine
whether unnamed bitfields affect the alignment of the containing
structure. The hook should return true if the structure should inherit
the alignment requirements of an unnamed bitfield's type.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_NARROW_VOLATILE_BITFIELD (void)
+@c hook-start:TARGET_NARROW_VOLATILE_BITFIELD
This target hook should return @code{true} if accesses to volatile bitfields
should use the narrowest mode possible. It should return @code{false} if
these accesses should use the bitfield container type.
The default is @code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree @var{field}, machine_mode @var{mode})
+@c hook-start:TARGET_MEMBER_TYPE_FORCES_BLK
Return true if a structure, union or array containing @var{field} should
be accessed using @code{BLKMODE}.
@@ -1379,6 +1423,7 @@ retain the field's mode.
Normally, this is not needed.
@end deftypefn
+@c hook-end
@defmac ROUND_TYPE_ALIGN (@var{type}, @var{computed}, @var{specified})
Define this macro as an expression for the alignment of a type (given
@@ -1423,25 +1468,32 @@ pattern needs to support both a 32- and a 64-bit mode.
@end defmac
@deftypefn {Target Hook} scalar_int_mode TARGET_LIBGCC_CMP_RETURN_MODE (void)
+@c hook-start:TARGET_LIBGCC_CMP_RETURN_MODE
This target hook should return the mode to be used for the return value
of compare instructions expanded to libgcc calls. If not defined
@code{word_mode} is returned which is the right choice for a majority of
targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} scalar_int_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void)
+@c hook-start:TARGET_LIBGCC_SHIFT_COUNT_MODE
This target hook should return the mode to be used for the shift count operand
of shift instructions expanded to libgcc calls. If not defined
@code{word_mode} is returned which is the right choice for a majority of
targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} scalar_int_mode TARGET_UNWIND_WORD_MODE (void)
+@c hook-start:TARGET_UNWIND_WORD_MODE
Return machine mode to be used for @code{_Unwind_Word} type.
The default is to use @code{word_mode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree @var{record_type})
+@c hook-start:TARGET_MS_BITFIELD_LAYOUT_P
This target hook returns @code{true} if bit-fields in the given
@var{record_type} are to be laid out following the rules of Microsoft
Visual C/C++, namely: (i) a bit-field won't share the same storage
@@ -1468,16 +1520,22 @@ used on a single field when MS bit-fields are in use, it will take
precedence for that field, but the alignment of the rest of the structure
may affect its placement.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void)
+@c hook-start:TARGET_DECIMAL_FLOAT_SUPPORTED_P
Returns true if the target supports decimal floating point.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_FIXED_POINT_SUPPORTED_P (void)
+@c hook-start:TARGET_FIXED_POINT_SUPPORTED_P
Returns true if the target supports fixed-point arithmetic.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_EXPAND_TO_RTL_HOOK (void)
+@c hook-start:TARGET_EXPAND_TO_RTL_HOOK
This hook is called just before expansion into rtl, allowing the target
to perform additional initializations or analysis before the expansion.
For example, the rs6000 port uses it to allocate a scratch stack slot
@@ -1485,13 +1543,17 @@ for use in copying SDmode values between memory and floating point
registers whenever the function being expanded has any SDmode
usage.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_INSTANTIATE_DECLS (void)
+@c hook-start:TARGET_INSTANTIATE_DECLS
This hook allows the backend to perform additional instantiations on rtl
that are not actually in any insns yet, but will be later.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_MANGLE_TYPE (const_tree @var{type})
+@c hook-start:TARGET_MANGLE_TYPE
If your target defines any fundamental types, or any types your target
uses should be mangled differently from the default, define this hook
to return the appropriate encoding for these types as part of a C++
@@ -1524,6 +1586,7 @@ The default version of this hook always returns @code{NULL}, which is
appropriate for a target that does not define any new fundamental
types.
@end deftypefn
+@c hook-end
@node Type Layout
@section Layout of Source Language Data Types
@@ -1667,6 +1730,7 @@ and @option{-funsigned-char}.
@end defmac
@deftypefn {Target Hook} bool TARGET_DEFAULT_SHORT_ENUMS (void)
+@c hook-start:TARGET_DEFAULT_SHORT_ENUMS
This target hook should return true if the compiler should give an
@code{enum} type only as many bytes as it takes to represent the range
of possible values of that type. It should return false if all
@@ -1674,6 +1738,7 @@ of possible values of that type. It should return false if all
The default is to return false.
@end deftypefn
+@c hook-end
@defmac SIZE_TYPE
A C expression for a string describing the name of the data type to use
@@ -1960,13 +2025,16 @@ must be defined. Modern ports should define @code{CALL_REALLY_USED_REGISTERS}.
@cindex call-clobbered register
@cindex call-saved register
@deftypefn {Target Hook} {const predefined_function_abi &} TARGET_FNTYPE_ABI (const_tree @var{type})
+@c hook-start:TARGET_FNTYPE_ABI
Return the ABI used by a function with type @var{type}; see the
definition of @code{predefined_function_abi} for details of the ABI
descriptor. Targets only need to define this hook if they support
interoperability between several ABIs in the same translation unit.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const predefined_function_abi &} TARGET_INSN_CALLEE_ABI (const rtx_insn *@var{insn})
+@c hook-start:TARGET_INSN_CALLEE_ABI
This hook returns a description of the ABI used by the target of
call instruction @var{insn}; see the definition of
@code{predefined_function_abi} for details of the ABI descriptor.
@@ -1976,11 +2044,13 @@ directly.
Targets only need to define this hook if they support
interoperability between several ABIs in the same translation unit.
@end deftypefn
+@c hook-end
@cindex call-used register
@cindex call-clobbered register
@cindex call-saved register
@deftypefn {Target Hook} bool TARGET_HARD_REGNO_CALL_PART_CLOBBERED (unsigned int @var{abi_id}, unsigned int @var{regno}, machine_mode @var{mode})
+@c hook-start:TARGET_HARD_REGNO_CALL_PART_CLOBBERED
ABIs usually specify that calls must preserve the full contents
of a particular register, or that calls can alter any part of a
particular register. This information is captured by the target macro
@@ -2001,10 +2071,13 @@ for all functions in a translation unit, @var{abi_id} is always 0.
The default implementation returns false, which is correct
for targets that don't have partly call-clobbered registers.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_GET_MULTILIB_ABI_NAME (void)
+@c hook-start:TARGET_GET_MULTILIB_ABI_NAME
This hook returns name of multilib ABI name.
@end deftypefn
+@c hook-end
@findex fixed_regs
@findex call_used_regs
@@ -2012,6 +2085,7 @@ This hook returns name of multilib ABI name.
@findex reg_names
@findex reg_class_contents
@deftypefn {Target Hook} void TARGET_CONDITIONAL_REGISTER_USAGE (void)
+@c hook-start:TARGET_CONDITIONAL_REGISTER_USAGE
This hook may conditionally modify five variables
@code{fixed_regs}, @code{call_used_regs}, @code{global_regs},
@code{reg_names}, and @code{reg_class_contents}, to take into account
@@ -2041,6 +2115,7 @@ of the insn patterns whose constraints permit this class are
controlled by target switches, then GCC will automatically avoid using
these registers when the target switches are opposed to them.)
@end deftypefn
+@c hook-end
@defmac INCOMING_REGNO (@var{out})
Define this macro if the target machine has register windows. This C
@@ -2137,6 +2212,7 @@ This section discusses the macros that describe which kinds of values
consecutive registers are needed for a given mode.
@deftypefn {Target Hook} {unsigned int} TARGET_HARD_REGNO_NREGS (unsigned int @var{regno}, machine_mode @var{mode})
+@c hook-start:TARGET_HARD_REGNO_NREGS
This hook returns the number of consecutive hard registers, starting
at register number @var{regno}, required to hold a value of mode
@var{mode}. This hook must never return zero, even if a register
@@ -2146,6 +2222,7 @@ cannot hold the requested mode - indicate that with
The default definition returns the number of words in @var{mode}.
@end deftypefn
+@c hook-end
@defmac HARD_REGNO_NREGS_HAS_PADDING (@var{regno}, @var{mode})
A C expression that is nonzero if a value of mode @var{mode}, stored
@@ -2184,6 +2261,7 @@ floating-point registers is still 32-bit.
@end defmac
@deftypefn {Target Hook} bool TARGET_HARD_REGNO_MODE_OK (unsigned int @var{regno}, machine_mode @var{mode})
+@c hook-start:TARGET_HARD_REGNO_MODE_OK
This hook returns true if it is permissible to store a value
of mode @var{mode} in hard register number @var{regno} (or in several
registers starting with that one). The default definition returns true
@@ -2239,6 +2317,7 @@ register if floating point arithmetic is not being done. As long as the
floating registers are not in class @code{GENERAL_REGS}, they will not
be used unless some pattern's constraint asks for one.
@end deftypefn
+@c hook-end
@defmac HARD_REGNO_RENAME_OK (@var{from}, @var{to})
A C expression that is nonzero if it is OK to rename a hard register
@@ -2252,6 +2331,7 @@ The default is always nonzero.
@end defmac
@deftypefn {Target Hook} bool TARGET_MODES_TIEABLE_P (machine_mode @var{mode1}, machine_mode @var{mode2})
+@c hook-start:TARGET_MODES_TIEABLE_P
This hook returns true if a value of mode @var{mode1} is accessible
in mode @var{mode2} without copying.
@@ -2267,8 +2347,10 @@ You should define this hook to return true in as many cases as
possible since doing so will allow GCC to perform better register
allocation. The default definition returns true unconditionally.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int @var{regno})
+@c hook-start:TARGET_HARD_REGNO_SCRATCH_OK
This target hook should return @code{true} if it is OK to use a hard register
@var{regno} as scratch reg in peephole2.
@@ -2277,6 +2359,7 @@ is not saved by a prologue in an interrupt handler.
The default version of this hook always returns @code{true}.
@end deftypefn
+@c hook-end
@defmac AVOID_CCMODE_COPIES
Define this macro if the compiler should avoid copies to/from @code{CCmode}
@@ -2602,6 +2685,7 @@ only if neither labeling works.
@end defmac
@deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t @var{rclass})
+@c hook-start:TARGET_PREFERRED_RENAME_CLASS
A target hook that places additional preference on the register
class to use when it is necessary to rename a register in class
@var{rclass} to another class, or perhaps @var{NO_REGS}, if no
@@ -2613,8 +2697,10 @@ smaller than instructions using @code{GENERIC_REGS}. By returning
@code{LO_REGS} from @code{preferred_rename_class}, code size can
be reduced.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx @var{x}, reg_class_t @var{rclass})
+@c hook-start:TARGET_PREFERRED_RELOAD_CLASS
A target hook that places additional restrictions on the register class
to use when it is necessary to copy value @var{x} into a register in class
@var{rclass}. The value is a register class; perhaps @var{rclass}, or perhaps
@@ -2647,6 +2733,7 @@ reload add a @code{!} in front of the constraint: the x86 back-end uses
this feature to discourage usage of 387 registers when math is done in
the SSE registers (and vice versa).
@end deftypefn
+@c hook-end
@defmac PREFERRED_RELOAD_CLASS (@var{x}, @var{class})
A C expression that places additional restrictions on the register class
@@ -2686,6 +2773,7 @@ the SSE registers (and vice versa).
@end defmac
@deftypefn {Target Hook} reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx @var{x}, reg_class_t @var{rclass})
+@c hook-start:TARGET_PREFERRED_OUTPUT_RELOAD_CLASS
Like @code{TARGET_PREFERRED_RELOAD_CLASS}, but for output reloads instead of
input reloads.
@@ -2695,6 +2783,7 @@ argument.
You can also use @code{TARGET_PREFERRED_OUTPUT_RELOAD_CLASS} to discourage
reload from using some alternatives, like @code{TARGET_PREFERRED_RELOAD_CLASS}.
@end deftypefn
+@c hook-end
@defmac LIMIT_RELOAD_CLASS (@var{mode}, @var{class})
A C expression that places additional restrictions on the register class
@@ -2713,6 +2802,7 @@ require the macro to do something nontrivial.
@end defmac
@deftypefn {Target Hook} reg_class_t TARGET_SECONDARY_RELOAD (bool @var{in_p}, rtx @var{x}, reg_class_t @var{reload_class}, machine_mode @var{reload_mode}, secondary_reload_info *@var{sri})
+@c hook-start:TARGET_SECONDARY_RELOAD
Many machines have some registers that cannot be copied directly to or
from memory or even from other types of registers. An example is the
@samp{MQ} register, which on most machines, can only be copied to or
@@ -2797,6 +2887,7 @@ Or if two dependent moves are supposed to have a lower cost than the sum
of the individual moves due to expected fortuitous scheduling and/or special
forwarding logic, you can set @code{sri->extra_cost} to a negative amount.
@end deftypefn
+@c hook-end
@defmac SECONDARY_RELOAD_CLASS (@var{class}, @var{mode}, @var{x})
@defmacx SECONDARY_INPUT_RELOAD_CLASS (@var{class}, @var{mode}, @var{x})
@@ -2859,6 +2950,7 @@ general registers.
@end defmac
@deftypefn {Target Hook} bool TARGET_SECONDARY_MEMORY_NEEDED (machine_mode @var{mode}, reg_class_t @var{class1}, reg_class_t @var{class2})
+@c hook-start:TARGET_SECONDARY_MEMORY_NEEDED
Certain machines have the property that some registers cannot be copied
to some other registers without using memory. Define this hook on
those machines to return true if objects of mode @var{m} in registers
@@ -2867,6 +2959,7 @@ of @var{class1} can only be copied to registers of class @var{class2} by
location into a register of @var{class2}. The default definition returns
false for all inputs.
@end deftypefn
+@c hook-end
@defmac SECONDARY_MEMORY_NEEDED_RTX (@var{mode})
Normally when @code{TARGET_SECONDARY_MEMORY_NEEDED} is defined, the compiler
@@ -2879,6 +2972,7 @@ Do not define this macro if you do not define
@end defmac
@deftypefn {Target Hook} machine_mode TARGET_SECONDARY_MEMORY_NEEDED_MODE (machine_mode @var{mode})
+@c hook-start:TARGET_SECONDARY_MEMORY_NEEDED_MODE
If @code{TARGET_SECONDARY_MEMORY_NEEDED} tells the compiler to use memory
when moving between two particular registers of mode @var{mode},
this hook specifies the mode that the memory should have.
@@ -2899,8 +2993,10 @@ details.
With LRA, the default is to use @var{mode} unmodified.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SELECT_EARLY_REMAT_MODES (sbitmap @var{modes})
+@c hook-start:TARGET_SELECT_EARLY_REMAT_MODES
On some targets, certain modes cannot be held in registers around a
standard ABI call and are relatively expensive to spill to the stack.
The early rematerialization pass can help in such cases by aggressively
@@ -2910,8 +3006,10 @@ This hook returns the set of such modes by setting the associated bits
in @var{modes}. The default implementation selects no modes, which has
the effect of disabling the early rematerialization pass.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t @var{rclass})
+@c hook-start:TARGET_CLASS_LIKELY_SPILLED_P
A target hook which returns @code{true} if pseudos that have been assigned
to registers of class @var{rclass} would likely be spilled because
registers of @var{rclass} are needed for spill registers.
@@ -2926,8 +3024,10 @@ This hook is also used by some of the global intra-procedural code
transformations to throtle code motion, to avoid increasing register
pressure.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned char} TARGET_CLASS_MAX_NREGS (reg_class_t @var{rclass}, machine_mode @var{mode})
+@c hook-start:TARGET_CLASS_MAX_NREGS
A target hook returns the maximum number of consecutive registers
of class @var{rclass} needed to hold a value of mode @var{mode}.
@@ -2943,6 +3043,7 @@ in the reload pass.
The default version of this target hook returns the size of @var{mode}
in words.
@end deftypefn
+@c hook-end
@defmac CLASS_MAX_NREGS (@var{class}, @var{mode})
A C expression for the maximum number of consecutive registers
@@ -2958,6 +3059,7 @@ in the reload pass.
@end defmac
@deftypefn {Target Hook} bool TARGET_CAN_CHANGE_MODE_CLASS (machine_mode @var{from}, machine_mode @var{to}, reg_class_t @var{rclass})
+@c hook-start:TARGET_CAN_CHANGE_MODE_CLASS
This hook returns true if it is possible to bitcast values held in
registers of class @var{rclass} from mode @var{from} to mode @var{to}
and if doing so preserves the low-order bits that are common to both modes.
@@ -2986,22 +3088,28 @@ Failure to prevent this kind of mode change will result in the
entire @code{raw_reg_mode} being modified instead of the partial
value that the middle-end intended.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS (int, @var{reg_class_t}, @var{reg_class_t})
+@c hook-start:TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS
A target hook which can change allocno class for given pseudo from
allocno and best class calculated by IRA.
The default version of this target hook always returns given class.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_LRA_P (void)
+@c hook-start:TARGET_LRA_P
A target hook which returns true if we use LRA instead of reload pass.
The default version of this target hook returns true. New ports
should use LRA, and existing ports are encouraged to convert.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_REGISTER_PRIORITY (int)
+@c hook-start:TARGET_REGISTER_PRIORITY
A target hook which returns the register priority number to which the
register @var{hard_regno} belongs to. The bigger the number, the
more preferable the hard register usage (when all other conditions are
@@ -3013,8 +3121,10 @@ and as result making the generated code smaller.
The default version of this target hook returns always zero.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_REGISTER_USAGE_LEVELING_P (void)
+@c hook-start:TARGET_REGISTER_USAGE_LEVELING_P
A target hook which returns true if we need register usage leveling.
That means if a few hard registers are equally good for the
assignment, we choose the least used hard register. The register
@@ -3025,8 +3135,10 @@ optimizations.
The default version of this target hook returns always false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void)
+@c hook-start:TARGET_DIFFERENT_ADDR_DISPLACEMENT_P
A target hook which returns true if an address with the same structure
can have different maximal legitimate displacement. For example, the
displacement can depend on memory mode or on operand combinations in
@@ -3034,8 +3146,10 @@ the insn.
The default version of this target hook returns always false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx @var{subst})
+@c hook-start:TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P
A target hook which returns @code{true} if @var{subst} can't
substitute safely pseudos with equivalent memory values during
register allocation.
@@ -3044,8 +3158,10 @@ On most machines, this default should be used. For generally
machines with non orthogonal register usage for addressing, such
as SH, this hook can be used to avoid excessive spilling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *@var{offset1}, rtx *@var{offset2}, poly_int64 @var{orig_offset}, machine_mode @var{mode})
+@c hook-start:TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT
This hook tries to split address offset @var{orig_offset} into
two parts: one that should be added to the base address to create
a local anchor point, and an additional offset that can be applied
@@ -3056,15 +3172,19 @@ The hook returns true if it succeeds, storing the offset of the
anchor from the base in @var{offset1} and the offset of the final address
from the anchor in @var{offset2}. The default implementation returns false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} reg_class_t TARGET_SPILL_CLASS (reg_class_t, @var{machine_mode})
+@c hook-start:TARGET_SPILL_CLASS
This hook defines a class of registers which could be used for spilling
pseudos of the given mode and class, or @code{NO_REGS} if only memory
should be used. Not defining this hook is equivalent to returning
@code{NO_REGS} for all inputs.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ADDITIONAL_ALLOCNO_CLASS_P (reg_class_t)
+@c hook-start:TARGET_ADDITIONAL_ALLOCNO_CLASS_P
This hook should return @code{true} if given class of registers should
be an allocno class in any way. Usually RA uses only one register
class from all classes containing the same register set. In some
@@ -3072,21 +3192,26 @@ complicated cases, you need to have two or more such classes as
allocno ones for RA correct work. Not defining this hook is
equivalent to returning @code{false} for all inputs.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} scalar_int_mode TARGET_CSTORE_MODE (enum insn_code @var{icode})
+@c hook-start:TARGET_CSTORE_MODE
This hook defines the machine mode to use for the boolean result of
conditional store patterns. The ICODE argument is the instruction code
for the cstore being performed. Not definiting this hook is the same
as accepting the mode encoded into operand 0 of the cstore expander
patterns.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_COMPUTE_PRESSURE_CLASSES (enum reg_class *@var{pressure_classes})
+@c hook-start:TARGET_COMPUTE_PRESSURE_CLASSES
A target hook which lets a backend compute the set of pressure classes to
be used by those optimization passes which take register pressure into
account, as opposed to letting IRA compute them. It returns the number of
register classes stored in the array @var{pressure_classes}.
@end deftypefn
+@c hook-end
@node Stack and Calling
@section Stack Layout and Calling Conventions
@@ -3154,12 +3279,14 @@ addresses on the stack.
@end defmac
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_STARTING_FRAME_OFFSET (void)
+@c hook-start:TARGET_STARTING_FRAME_OFFSET
This hook returns the offset from the frame pointer to the first local
variable slot to be allocated. If @code{FRAME_GROWS_DOWNWARD}, it is the
offset to @emph{end} of the first slot allocated, otherwise it is the
offset to @emph{beginning} of the first slot allocated. The default
implementation returns 0.
@end deftypefn
+@c hook-end
@defmac STACK_ALIGNMENT_NEEDED
Define to zero to disable final alignment of the stack during reload.
@@ -3227,12 +3354,14 @@ define this macro. The default is to do nothing.
@end defmac
@deftypefn {Target Hook} rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void)
+@c hook-start:TARGET_BUILTIN_SETJMP_FRAME_VALUE
This target hook should return an rtx that is used to store
the address of the current frame into the built in @code{setjmp} buffer.
The default value, @code{virtual_stack_vars_rtx}, is correct for most
machines. One reason you may need to define this target hook is if
@code{hard_frame_pointer_rtx} is the appropriate value on your machine.
@end deftypefn
+@c hook-end
@defmac FRAME_ADDR_RTX (@var{frameaddr})
A C expression whose value is RTL representing the value of the frame
@@ -3301,6 +3430,7 @@ an explicit @option{-gdwarf-@var{version}} option on the command line.
@end defmac
@deftypefn {Target Hook} void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char *@var{label}, rtx @var{pattern}, int @var{index})
+@c hook-start:TARGET_DWARF_HANDLE_FRAME_UNSPEC
This target hook allows the backend to emit frame-related insns that
contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame debugging
info engine will invoke it on insns of the form
@@ -3315,8 +3445,10 @@ to let the backend emit the call frame instructions. @var{label} is
the CFI label attached to the insn, @var{pattern} is the pattern of
the insn and @var{index} is @code{UNSPEC_INDEX} or @code{UNSPECV_INDEX}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned int} TARGET_DWARF_POLY_INDETERMINATE_VALUE (unsigned int @var{i}, unsigned int *@var{factor}, int *@var{offset})
+@c hook-start:TARGET_DWARF_POLY_INDETERMINATE_VALUE
Express the value of @code{poly_int} indeterminate @var{i} as a DWARF
expression, with @var{i} counting from 1. Return the number of a DWARF
register @var{R} and set @samp{*@var{factor}} and @samp{*@var{offset}} such
@@ -3328,6 +3460,7 @@ value_of(@var{R}) / @var{factor} - @var{offset}
A target only needs to define this hook if it sets
@samp{NUM_POLY_INT_COEFFS} to a value greater than 1.
@end deftypefn
+@c hook-end
@defmac INCOMING_FRAME_SP_OFFSET
A C expression whose value is an integer giving the offset, in bytes,
@@ -3623,6 +3756,7 @@ normally not need to override that default.
@end defmac
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE (void)
+@c hook-start:TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE
Some targets have an ABI defined interval for which no probing needs to be done.
When a probe does need to be done this same interval is used as the probe distance
up when doing stack clash protection for alloca.
@@ -3632,6 +3766,7 @@ Defining this hook also requires your functions which make use of alloca to have
of outgoing arguments. If this is not the case the stack will be corrupted.
You need not define this macro if it would always have the value zero.
@end deftypefn
+@c hook-end
@need 2000
@node Frame Registers
@@ -3730,6 +3865,7 @@ defined; instead, the @code{TARGET_STATIC_CHAIN} hook should be used.
@end defmac
@deftypefn {Target Hook} rtx TARGET_STATIC_CHAIN (const_tree @var{fndecl_or_type}, bool @var{incoming_p})
+@c hook-start:TARGET_STATIC_CHAIN
This hook replaces the use of @code{STATIC_CHAIN_REGNUM} et al for
targets that may use different static chain locations for different
nested functions. This may be required if the target has function
@@ -3750,6 +3886,7 @@ The variables @code{stack_pointer_rtx}, @code{frame_pointer_rtx}, and
@code{arg_pointer_rtx} will have been initialized and should be used
to refer to those items.
@end deftypefn
+@c hook-end
@defmac DWARF_FRAME_REGISTERS
This macro specifies the maximum number of hard registers that can be
@@ -3837,6 +3974,7 @@ is such a register and stores its value in @samp{*@var{value}} if so.
This is about eliminating the frame pointer and arg pointer.
@deftypefn {Target Hook} bool TARGET_FRAME_POINTER_REQUIRED (void)
+@c hook-start:TARGET_FRAME_POINTER_REQUIRED
This target hook should return @code{true} if a function must have and use
a frame pointer. This target hook is called in the reload pass. If its return
value is @code{true} the function will have a frame pointer.
@@ -3860,6 +3998,7 @@ fixed register. See @code{FIXED_REGISTERS} for more information.
Default return value is @code{false}.
@end deftypefn
+@c hook-end
@defmac ELIMINABLE_REGS
This macro specifies a table of register pairs used to eliminate
@@ -3887,6 +4026,7 @@ specified first since that is the preferred elimination.
@end defmac
@deftypefn {Target Hook} bool TARGET_CAN_ELIMINATE (const int @var{from_reg}, const int @var{to_reg})
+@c hook-start:TARGET_CAN_ELIMINATE
This target hook should return @code{true} if the compiler is allowed to
try to replace register number @var{from_reg} with register number
@var{to_reg}. This target hook will usually be @code{true}, since most of the
@@ -3895,6 +4035,7 @@ knows about.
Default return value is @code{true}.
@end deftypefn
+@c hook-end
@defmac INITIAL_ELIMINATION_OFFSET (@var{from-reg}, @var{to-reg}, @var{offset-var})
This macro returns the initial difference between the specified pair
@@ -3904,6 +4045,7 @@ registers @code{df_regs_ever_live_p} and @code{call_used_regs}.
@end defmac
@deftypefn {Target Hook} void TARGET_COMPUTE_FRAME_LAYOUT (void)
+@c hook-start:TARGET_COMPUTE_FRAME_LAYOUT
This target hook is called once each time the frame layout needs to be
recalculated. The calculations can be cached by the target and can then
be used by @code{INITIAL_ELIMINATION_OFFSET} instead of re-computing the
@@ -3911,6 +4053,7 @@ layout on every invocation of that hook. This is particularly useful
for targets that have an expensive frame layout function. Implementing
this callback is optional.
@end deftypefn
+@c hook-end
@node Stack Arguments
@subsection Passing Function Arguments on the Stack
@@ -3922,14 +4065,17 @@ on the stack. See the following section for other macros that
control passing certain arguments in registers.
@deftypefn {Target Hook} bool TARGET_PROMOTE_PROTOTYPES (const_tree @var{fntype})
+@c hook-start:TARGET_PROMOTE_PROTOTYPES
This target hook returns @code{true} if an argument declared in a
prototype as an integral type smaller than @code{int} should actually be
passed as an @code{int}. In addition to avoiding errors in certain
cases of mismatch, it also makes for better code on certain machines.
The default is to not promote prototypes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PUSH_ARGUMENT (unsigned int @var{npush})
+@c hook-start:TARGET_PUSH_ARGUMENT
This target hook returns @code{true} if push instructions will be
used to pass outgoing arguments. When the push instruction usage is
optional, @var{npush} is nonzero to indicate the number of bytes to
@@ -3940,6 +4086,7 @@ strategy: to allocate the entire argument block and then store the
arguments into it. If this target hook may return @code{true},
@code{PUSH_ROUNDING} must be defined.
@end deftypefn
+@c hook-end
@defmac PUSH_ARGS_REVERSED
A C expression. If nonzero, function arguments will be evaluated from
@@ -4032,6 +4179,7 @@ stack in its natural location.
@end defmac
@deftypefn {Target Hook} poly_int64 TARGET_RETURN_POPS_ARGS (tree @var{fundecl}, tree @var{funtype}, poly_int64 @var{size})
+@c hook-start:TARGET_RETURN_POPS_ARGS
This target hook returns the number of bytes of its own arguments that
a function pops on returning, or 0 if the function pops no arguments
and the caller must therefore pop them all after the function returns.
@@ -4068,6 +4216,7 @@ nothing (the caller pops all). When this convention is in use,
@var{funtype} is examined to determine whether a function takes a fixed
number of arguments.
@end deftypefn
+@c hook-end
@defmac CALL_POPS_ARGS (@var{cum})
A C expression that should indicate the number of bytes a call sequence
@@ -4094,6 +4243,7 @@ types of arguments are passed in registers or how they are arranged in
the stack.
@deftypefn {Target Hook} rtx TARGET_FUNCTION_ARG (cumulative_args_t @var{ca}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_FUNCTION_ARG
Return an RTX indicating whether function argument @var{arg} is passed
in a register and if so, which register. Argument @var{ca} summarizes all
the previous arguments.
@@ -4137,15 +4287,19 @@ argument, the compiler will abort. If @code{REG_PARM_STACK_SPACE} is
defined, the argument will be computed in the stack and then loaded into
a register.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_MUST_PASS_IN_STACK (const function_arg_info @var{&arg})
+@c hook-start:TARGET_MUST_PASS_IN_STACK
This target hook should return @code{true} if we should not pass @var{arg}
solely in registers. The file @file{expr.h} defines a
definition that is usually appropriate, refer to @file{expr.h} for additional
documentation.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t @var{ca}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_FUNCTION_INCOMING_ARG
Define this hook if the caller and callee on the target have different
views of where arguments are passed. Also define this hook if there are
functions that are never directly called, but are invoked by the hardware
@@ -4164,18 +4318,24 @@ so that it can be used to pass special arguments.
If @code{TARGET_FUNCTION_INCOMING_ARG} is not defined,
@code{TARGET_FUNCTION_ARG} serves both purposes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_USE_PSEUDO_PIC_REG (void)
+@c hook-start:TARGET_USE_PSEUDO_PIC_REG
This hook should return 1 in case pseudo register should be created
for pic_offset_table_rtx during function expand.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_INIT_PIC_REG (void)
+@c hook-start:TARGET_INIT_PIC_REG
Perform a target dependent initialization of pic_offset_table_rtx.
This hook is called at the start of register allocation.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t @var{cum}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_ARG_PARTIAL_BYTES
This target hook returns the number of bytes at the beginning of an
argument that must be put in registers. The value must be zero for
arguments that are passed entirely in registers or that are entirely
@@ -4193,8 +4353,10 @@ compiler when this occurs, and how many bytes should go in registers.
register to be used by the caller for this argument; likewise
@code{TARGET_FUNCTION_INCOMING_ARG}, for the called function.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (cumulative_args_t @var{cum}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_PASS_BY_REFERENCE
This target hook should return @code{true} if argument @var{arg} at the
position indicated by @var{cum} should be passed by reference. This
predicate is queried after target independent reasons for being
@@ -4205,8 +4367,10 @@ pointer to the argument is passed instead of the argument itself.
The pointer is passed in whatever way is appropriate for passing a pointer
to that type.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (cumulative_args_t @var{cum}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_CALLEE_COPIES
The function argument described by the parameters to this hook is
known to be passed by reference. The hook should return true if the
function argument should be copied by the callee instead of copied
@@ -4218,6 +4382,7 @@ not be generated.
The default version of this hook always returns false.
@end deftypefn
+@c hook-end
@defmac CUMULATIVE_ARGS
A C type for declaring a variable that is used as the first argument
@@ -4286,6 +4451,7 @@ argument @var{libname} exists for symmetry with
@end defmac
@deftypefn {Target Hook} void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t @var{ca}, const function_arg_info @var{&arg})
+@c hook-start:TARGET_FUNCTION_ARG_ADVANCE
This hook updates the summarizer variable pointed to by @var{ca} to
advance past argument @var{arg} in the argument list. Once this is done,
the variable @var{cum} is suitable for analyzing the @emph{following}
@@ -4295,16 +4461,20 @@ This hook need not do anything if the argument in question was passed
on the stack. The compiler knows how to track the amount of stack space
used for arguments without any special help.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_FUNCTION_ARG_OFFSET (machine_mode @var{mode}, const_tree @var{type})
+@c hook-start:TARGET_FUNCTION_ARG_OFFSET
This hook returns the number of bytes to add to the offset of an
argument of type @var{type} and mode @var{mode} when passed in memory.
This is needed for the SPU, which passes @code{char} and @code{short}
arguments in the preferred slot that is in the middle of the quad word
instead of starting at the top. The default implementation returns 0.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} pad_direction TARGET_FUNCTION_ARG_PADDING (machine_mode @var{mode}, const_tree @var{type})
+@c hook-start:TARGET_FUNCTION_ARG_PADDING
This hook determines whether, and in which direction, to pad out
an argument of mode @var{mode} and type @var{type}. It returns
@code{PAD_UPWARD} to insert padding above the argument, @code{PAD_DOWNWARD}
@@ -4319,6 +4489,7 @@ For little-endian machines, the default is to pad upward. For
big-endian machines, the default is to pad downward for an argument of
constant size shorter than an @code{int}, and upward otherwise.
@end deftypefn
+@c hook-end
@defmac PAD_VARARGS_DOWN
If defined, a C expression which determines whether the default
@@ -4340,17 +4511,21 @@ required.
@end defmac
@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_BOUNDARY (machine_mode @var{mode}, const_tree @var{type})
+@c hook-start:TARGET_FUNCTION_ARG_BOUNDARY
This hook returns the alignment boundary, in bits, of an argument
with the specified mode and type. The default hook returns
@code{PARM_BOUNDARY} for all arguments.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned int} TARGET_FUNCTION_ARG_ROUND_BOUNDARY (machine_mode @var{mode}, const_tree @var{type})
+@c hook-start:TARGET_FUNCTION_ARG_ROUND_BOUNDARY
Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},
which is the default value for this hook. You can define this hook to
return a different value if an argument size must be rounded to a larger
value.
@end deftypefn
+@c hook-end
@defmac FUNCTION_ARG_REGNO_P (@var{regno})
A C expression that is nonzero if @var{regno} is the number of a hard
@@ -4362,6 +4537,7 @@ stack.
@end defmac
@deftypefn {Target Hook} bool TARGET_SPLIT_COMPLEX_ARG (const_tree @var{type})
+@c hook-start:TARGET_SPLIT_COMPLEX_ARG
This hook should return true if parameter of type @var{type} are passed
as two scalar parameters. By default, GCC will attempt to pack complex
arguments into the target's word size. Some ABIs require complex arguments
@@ -4373,13 +4549,17 @@ point register.
The default value of this hook is @code{NULL}, which is treated as always
false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_BUILD_BUILTIN_VA_LIST (void)
+@c hook-start:TARGET_BUILD_BUILTIN_VA_LIST
This hook returns a type node for @code{va_list} for the target.
The default version of the hook returns @code{void*}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_ENUM_VA_LIST_P (int @var{idx}, const char **@var{pname}, tree *@var{ptree})
+@c hook-start:TARGET_ENUM_VA_LIST_P
This target hook is used in function @code{c_common_nodes_and_builtins}
to iterate through the target specific builtin types for va_list. The
variable @var{idx} is used as iterator. @var{pname} has to be a pointer
@@ -4392,49 +4572,63 @@ If the return value of this macro is zero, then there is no more element.
Otherwise the @var{IDX} should be increased for the next call of this
macro to iterate through all types.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_FN_ABI_VA_LIST (tree @var{fndecl})
+@c hook-start:TARGET_FN_ABI_VA_LIST
This hook returns the va_list type of the calling convention specified by
@var{fndecl}.
The default version of this hook returns @code{va_list_type_node}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_CANONICAL_VA_LIST_TYPE (tree @var{type})
+@c hook-start:TARGET_CANONICAL_VA_LIST_TYPE
This hook returns the va_list type of the calling convention specified by the
type of @var{type}. If @var{type} is not a valid va_list type, it returns
@code{NULL_TREE}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree @var{valist}, tree @var{type}, gimple_seq *@var{pre_p}, gimple_seq *@var{post_p})
+@c hook-start:TARGET_GIMPLIFY_VA_ARG_EXPR
This hook performs target-specific gimplification of
@code{VA_ARG_EXPR}. The first two parameters correspond to the
arguments to @code{va_arg}; the latter two are as in
@code{gimplify.cc:gimplify_expr}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VALID_POINTER_MODE (scalar_int_mode @var{mode})
+@c hook-start:TARGET_VALID_POINTER_MODE
Define this to return nonzero if the port can handle pointers
with machine mode @var{mode}. The default version of this
hook returns true for both @code{ptr_mode} and @code{Pmode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_REF_MAY_ALIAS_ERRNO (ao_ref *@var{ref})
+@c hook-start:TARGET_REF_MAY_ALIAS_ERRNO
Define this to return nonzero if the memory reference @var{ref}
may alias with the system C library errno location. The default
version of this hook assumes the system C library errno location
is either a declaration of type int or accessed by dereferencing
a pointer to int.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_TRANSLATE_MODE_ATTRIBUTE (machine_mode @var{mode})
+@c hook-start:TARGET_TRANSLATE_MODE_ATTRIBUTE
Define this hook if during mode attribute processing, the port should
translate machine_mode @var{mode} to another mode. For example, rs6000's
@code{KFmode}, when it is the same as @code{TFmode}.
The default version of the hook returns that mode that was passed in.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCALAR_MODE_SUPPORTED_P (scalar_mode @var{mode})
+@c hook-start:TARGET_SCALAR_MODE_SUPPORTED_P
Define this to return nonzero if the port is prepared to handle
insns involving scalar mode @var{mode}. For a scalar mode to be
considered supported, all the basic arithmetic and comparisons
@@ -4445,14 +4639,18 @@ required to handle the basic C types (as defined by the port).
Included here are the double-word arithmetic supported by the
code in @file{optabs.cc}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode @var{mode})
+@c hook-start:TARGET_VECTOR_MODE_SUPPORTED_P
Define this to return nonzero if the port is prepared to handle
insns involving vector mode @var{mode}. At the very least, it
must have move patterns for this mode.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_COMPATIBLE_VECTOR_TYPES_P (const_tree @var{type1}, const_tree @var{type2})
+@c hook-start:TARGET_COMPATIBLE_VECTOR_TYPES_P
Return true if there is no target-specific reason for treating
vector types @var{type1} and @var{type2} as distinct types. The caller
has already checked for target-independent reasons, meaning that the
@@ -4472,8 +4670,10 @@ architecture-specific ones.
The default implementation returns true, which is correct for most targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} opt_machine_mode TARGET_ARRAY_MODE (machine_mode @var{mode}, unsigned HOST_WIDE_INT @var{nelems})
+@c hook-start:TARGET_ARRAY_MODE
Return the mode that GCC should use for an array that has
@var{nelems} elements, with each element having mode @var{mode}.
Return no mode if the target has no special requirements. In the
@@ -4486,8 +4686,10 @@ used in specific cases.
The main use of this hook is to specify that an array of vectors should
also have a vector mode. The default implementation returns no mode.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode @var{mode}, unsigned HOST_WIDE_INT @var{nelems})
+@c hook-start:TARGET_ARRAY_MODE_SUPPORTED_P
Return true if GCC should try to use a scalar mode to store an array
of @var{nelems} elements, given that each element has mode @var{mode}.
Returning true here overrides the usual @code{MAX_FIXED_MODE} limit
@@ -4514,16 +4716,20 @@ If this hook allows @code{val} to have a scalar mode, then
@code{int8x8x3_t} can have the same mode. GCC can then store
@code{int8x8x3_t}s in registers rather than forcing them onto the stack.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P (scalar_float_mode @var{mode})
+@c hook-start:TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
Define this to return nonzero if libgcc provides support for the
floating-point mode @var{mode}, which is known to pass
@code{TARGET_SCALAR_MODE_SUPPORTED_P}. The default version of this
hook returns true for all of @code{SFmode}, @code{DFmode},
@code{XFmode} and @code{TFmode}, if such modes exist.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} opt_scalar_float_mode TARGET_FLOATN_MODE (int @var{n}, bool @var{extended})
+@c hook-start:TARGET_FLOATN_MODE
Define this to return the machine mode to use for the type
@code{_Float@var{n}}, if @var{extended} is false, or the type
@code{_Float@var{n}x}, if @var{extended} is true. If such a type is not
@@ -4540,8 +4746,10 @@ of @var{n} and @var{extended} that are valid according to
ISO/IEC TS 18661-3:2015; that is, @var{n} is one of 32, 64, 128, or,
if @var{extended} is false, 16 or greater than 128 and a multiple of 32.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_FLOATN_BUILTIN_P (int @var{func})
+@c hook-start:TARGET_FLOATN_BUILTIN_P
Define this to return true if the @code{_Float@var{n}} and
@code{_Float@var{n}x} built-in functions should implicitly enable the
built-in function without the @code{__builtin_} prefix in addition to the
@@ -4551,8 +4759,10 @@ the GNU C langauge. In strict ANSI/ISO mode, the built-in function without
the @code{__builtin_} prefix is not enabled. The argument @code{FUNC} is the
@code{enum built_in_function} id of the function to be enabled.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P (machine_mode @var{mode})
+@c hook-start:TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P
Define this to return nonzero for machine modes for which the port has
small register classes. If this target hook returns nonzero for a given
@var{mode}, the compiler will try to minimize the lifetime of registers
@@ -4583,6 +4793,7 @@ that can be performed in some cases. If you do not define this hook
to return a nonzero value when it is required, the compiler will run out
of spill registers and print a fatal error message.
@end deftypefn
+@c hook-end
@node Scalar Return
@subsection How Scalar Function Values Are Returned
@@ -4594,6 +4805,7 @@ This section discusses the macros that control returning scalars as
values---values that can fit in registers.
@deftypefn {Target Hook} rtx TARGET_FUNCTION_VALUE (const_tree @var{ret_type}, const_tree @var{fn_decl_or_type}, bool @var{outgoing})
+@c hook-start:TARGET_FUNCTION_VALUE
Define this to return an RTX representing the place where a function
returns or receives a value of data type @var{ret_type}, a tree node
@@ -4636,6 +4848,7 @@ different RTX depending on @var{outgoing}.
aggregate data types, because these are returned in another way. See
@code{TARGET_STRUCT_VALUE_RTX} and related macros, below.
@end deftypefn
+@c hook-end
@defmac FUNCTION_VALUE (@var{valtype}, @var{func})
This macro has been deprecated. Use @code{TARGET_FUNCTION_VALUE} for
@@ -4653,6 +4866,7 @@ compiled.
@end defmac
@deftypefn {Target Hook} rtx TARGET_LIBCALL_VALUE (machine_mode @var{mode}, const_rtx @var{fun})
+@c hook-start:TARGET_LIBCALL_VALUE
Define this hook if the back-end needs to know the name of the libcall
function in order to determine where the result should be returned.
@@ -4662,6 +4876,7 @@ representing the place where the library function result will be returned.
If this hook is not defined, then LIBCALL_VALUE will be used.
@end deftypefn
+@c hook-end
@defmac FUNCTION_VALUE_REGNO_P (@var{regno})
A C expression that is nonzero if @var{regno} is the number of a hard
@@ -4685,6 +4900,7 @@ for a new target instead.
@end defmac
@deftypefn {Target Hook} bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int @var{regno})
+@c hook-start:TARGET_FUNCTION_VALUE_REGNO_P
A target hook that return @code{true} if @var{regno} is the number of a hard
register in which the values of called function may come back.
@@ -4698,6 +4914,7 @@ should recognize only the caller's register numbers.
If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be used.
@end deftypefn
+@c hook-end
@defmac APPLY_RESULT_SIZE
Define this macro if @samp{untyped_call} and @samp{untyped_return}
@@ -4706,14 +4923,17 @@ saving and restoring an arbitrary return value.
@end defmac
@deftypevr {Target Hook} bool TARGET_OMIT_STRUCT_RETURN_REG
+@c hook-start:TARGET_OMIT_STRUCT_RETURN_REG
Normally, when a function returns a structure by memory, the address
is passed as an invisible pointer argument, but the compiler also
arranges to return the address from the function like it would a normal
pointer return value. Define this to true if that behavior is
undesirable on your target.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_RETURN_IN_MSB (const_tree @var{type})
+@c hook-start:TARGET_RETURN_IN_MSB
This hook should return true if values of type @var{type} are returned
at the most significant end of a register (in other words, if they are
padded at the least significant end). You can assume that @var{type}
@@ -4725,6 +4945,7 @@ or 3-byte structure is returned at the most significant end of a
4-byte register, @code{TARGET_FUNCTION_VALUE} should provide an
@code{SImode} rtx.
@end deftypefn
+@c hook-end
@node Aggregate Return
@subsection How Large Values Are Returned
@@ -4744,6 +4965,7 @@ This section describes how to control returning structure values in
memory.
@deftypefn {Target Hook} bool TARGET_RETURN_IN_MEMORY (const_tree @var{type}, const_tree @var{fntype})
+@c hook-start:TARGET_RETURN_IN_MEMORY
This target hook should return a nonzero value to say to return the
function value in memory, just as large structures are always returned.
Here @var{type} will be the data type of the value, and @var{fntype}
@@ -4761,6 +4983,7 @@ Do not use this hook to indicate that structures and unions should always
be returned in memory. You should instead use @code{DEFAULT_PCC_STRUCT_RETURN}
to indicate this.
@end deftypefn
+@c hook-end
@defmac DEFAULT_PCC_STRUCT_RETURN
Define this macro to be 1 if all structure and union return values must be
@@ -4774,6 +4997,7 @@ If not defined, this defaults to the value 1.
@end defmac
@deftypefn {Target Hook} rtx TARGET_STRUCT_VALUE_RTX (tree @var{fndecl}, int @var{incoming})
+@c hook-start:TARGET_STRUCT_VALUE_RTX
This target hook should return the location of the structure value
address (normally a @code{mem} or @code{reg}), or 0 if the address is
passed as an ``invisible'' first argument. Note that @var{fndecl} may
@@ -4795,6 +5019,7 @@ stack, return a @code{mem} which refers to the frame pointer. If
structure value address at the beginning of a function. If you need
to emit adjusting code, you should do it at this point.
@end deftypefn
+@c hook-end
@defmac PCC_STATIC_STRUCT_RETURN
Define this macro if the usual system convention on the target machine
@@ -4809,26 +5034,34 @@ nothing when you use @option{-freg-struct-return} mode.
@end defmac
@deftypefn {Target Hook} fixed_size_mode TARGET_GET_RAW_RESULT_MODE (int @var{regno})
+@c hook-start:TARGET_GET_RAW_RESULT_MODE
This target hook returns the mode to be used when accessing raw return
registers in @code{__builtin_return}. Define this macro if the value
in @var{reg_raw_mode} is not correct.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} fixed_size_mode TARGET_GET_RAW_ARG_MODE (int @var{regno})
+@c hook-start:TARGET_GET_RAW_ARG_MODE
This target hook returns the mode to be used when accessing raw argument
registers in @code{__builtin_apply_args}. Define this macro if the value
in @var{reg_raw_mode} is not correct.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_EMPTY_RECORD_P (const_tree @var{type})
+@c hook-start:TARGET_EMPTY_RECORD_P
This target hook returns true if the type is an empty record. The default
is to return @code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_WARN_PARAMETER_PASSING_ABI (cumulative_args_t @var{ca}, tree @var{type})
+@c hook-start:TARGET_WARN_PARAMETER_PASSING_ABI
This target hook warns about the change in empty class parameter passing
ABI.
@end deftypefn
+@c hook-end
@node Caller Saves
@subsection Caller-Saves Register Allocation
@@ -4855,6 +5088,7 @@ This section describes the macros that output function entry
(@dfn{prologue}) and exit (@dfn{epilogue}) code.
@deftypefn {Target Hook} void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE *@var{file}, unsigned HOST_WIDE_INT @var{patch_area_size}, bool @var{record_p})
+@c hook-start:TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY
Generate a patchable area at the function start, consisting of
@var{patch_area_size} NOP instructions. If the target supports named
sections and if @var{record_p} is true, insert a pointer to the current
@@ -4862,8 +5096,10 @@ location in the table of patchable functions. The default implementation
of the hook places the table of pointers in the special section named
@code{__patchable_function_entries}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_PROLOGUE (FILE *@var{file})
+@c hook-start:TARGET_ASM_FUNCTION_PROLOGUE
If defined, a function that outputs the assembler code for entry to a
function. The prologue is responsible for setting up the stack frame,
initializing the frame pointer register, saving registers that must be
@@ -4907,22 +5143,28 @@ compatibility reasons. Except in cases where required by standard
or by a debugger, there is no reason why the stack layout used by GCC
need agree with that used by other compilers for a machine.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *@var{file})
+@c hook-start:TARGET_ASM_FUNCTION_END_PROLOGUE
If defined, a function that outputs assembler code at the end of a
prologue. This should be used when the function prologue is being
emitted as RTL, and you have some extra assembler that needs to be
emitted. @xref{prologue instruction pattern}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *@var{file})
+@c hook-start:TARGET_ASM_FUNCTION_BEGIN_EPILOGUE
If defined, a function that outputs assembler code at the start of an
epilogue. This should be used when the function epilogue is being
emitted as RTL, and you have some extra assembler that needs to be
emitted. @xref{epilogue instruction pattern}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_EPILOGUE (FILE *@var{file})
+@c hook-start:TARGET_ASM_FUNCTION_EPILOGUE
If defined, a function that outputs the assembler code for exit from a
function. The epilogue is responsible for restoring the saved
registers and stack pointer to their values when the function was
@@ -4968,6 +5210,7 @@ needs to know what was decided. The number of bytes of the current
function's arguments that this function should pop is available in
@code{crtl->args.pops_args}. @xref{Scalar Return}.
@end deftypefn
+@c hook-end
@itemize @bullet
@item
@@ -5030,6 +5273,7 @@ on entry to an exception edge.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_MI_THUNK (FILE *@var{file}, tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, HOST_WIDE_INT @var{vcall_offset}, tree @var{function})
+@c hook-start:TARGET_ASM_OUTPUT_MI_THUNK
A function that outputs the assembler code for a thunk
function, used to implement C++ virtual function calls with multiple
inheritance. The thunk acts as a wrapper around a virtual function,
@@ -5070,14 +5314,17 @@ front end will generate a less efficient heavyweight thunk that calls
@var{function} instead of jumping to it. The generic approach does
not support varargs.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree @var{thunk_fndecl}, HOST_WIDE_INT @var{delta}, HOST_WIDE_INT @var{vcall_offset}, const_tree @var{function})
+@c hook-start:TARGET_ASM_CAN_OUTPUT_MI_THUNK
A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be able
to output the assembler code for the thunk function specified by the
arguments it is passed, and false otherwise. In the latter case, the
generic approach will be used by the C++ front end, with the limitations
previously exposed.
@end deftypefn
+@c hook-end
@node Profiling
@subsection Generating Code for Profiling
@@ -5121,18 +5368,21 @@ the function prologue. Normally, the profiling code comes after.
@end defmac
@deftypefn {Target Hook} bool TARGET_KEEP_LEAF_WHEN_PROFILED (void)
+@c hook-start:TARGET_KEEP_LEAF_WHEN_PROFILED
This target hook returns true if the target wants the leaf flag for
the current function to stay true even if it calls mcount. This might
make sense for targets using the leaf flag only to determine whether a
stack frame needs to be generated or not and for which the call to
mcount is generated before the function prologue.
@end deftypefn
+@c hook-end
@node Tail Calls
@subsection Permitting tail calls
@cindex tail calls
@deftypefn {Target Hook} bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree @var{decl}, tree @var{exp})
+@c hook-start:TARGET_FUNCTION_OK_FOR_SIBCALL
True if it is OK to do sibling call optimization for the specified
call expression @var{exp}. @var{decl} will be the called function,
or @code{NULL} if this is an indirect call.
@@ -5144,8 +5394,10 @@ as the @code{sibcall} md pattern cannot fail, or fall over to a
``normal'' call. The criteria for successful sibling call optimization
may vary greatly between different architectures.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap @var{regs})
+@c hook-start:TARGET_EXTRA_LIVE_ON_ENTRY
Add any hard registers to @var{regs} that are live on entry to the
function. This hook only needs to be defined to provide registers that
cannot be found by examination of FUNCTION_ARG_REGNO_P, the callee saved
@@ -5153,17 +5405,22 @@ registers, STATIC_CHAIN_INCOMING_REGNUM, STATIC_CHAIN_REGNUM,
TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, EH_USES,
FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SET_UP_BY_PROLOGUE (struct hard_reg_set_container *@var{})
+@c hook-start:TARGET_SET_UP_BY_PROLOGUE
This hook should add additional registers that are computed by the prologue
to the hard regset for shrink-wrapping optimization purposes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_WARN_FUNC_RETURN (tree)
+@c hook-start:TARGET_WARN_FUNC_RETURN
True if a function's return statements should be checked for matching
the function's return type. This includes checking for falling off the end
of a non-void function. Return false if no such check should be made.
@end deftypefn
+@c hook-end
@node Shrink-wrapping separate components
@subsection Shrink-wrapping separate components
@@ -5191,6 +5448,7 @@ and @code{shrink_wrap.components_for_bb} hooks, and deallocated by the
generic code.
@deftypefn {Target Hook} sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS (void)
+@c hook-start:TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
This hook should return an @code{sbitmap} with the bits set for those
components that can be separately shrink-wrapped in the current function.
Return @code{NULL} if the current function should not get any separate
@@ -5198,40 +5456,52 @@ shrink-wrapping.
Don't define this hook if it would always return @code{NULL}.
If it is defined, the other hooks in this group have to be defined as well.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB (basic_block)
+@c hook-start:TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
This hook should return an @code{sbitmap} with the bits set for those
components where either the prologue component has to be executed before
the @code{basic_block}, or the epilogue component after it, or both.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap @var{components}, edge @var{e}, sbitmap @var{edge_components}, bool @var{is_prologue})
+@c hook-start:TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS
This hook should clear the bits in the @var{components} bitmap for those
components in @var{edge_components} that the target cannot handle on edge
@var{e}, where @var{is_prologue} says if this is for a prologue or an
epilogue instead.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS (sbitmap)
+@c hook-start:TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS
Emit prologue insns for the components indicated by the parameter.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS (sbitmap)
+@c hook-start:TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS
Emit epilogue insns for the components indicated by the parameter.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS (sbitmap)
+@c hook-start:TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
Mark the components in the parameter as handled, so that the
@code{prologue} and @code{epilogue} named patterns know to ignore those
components. The target code should not hang on to the @code{sbitmap}, it
will be deleted after this call.
@end deftypefn
+@c hook-end
@node Stack Smashing Protection
@subsection Stack smashing protection
@cindex stack smashing protection
@deftypefn {Target Hook} tree TARGET_STACK_PROTECT_GUARD (void)
+@c hook-start:TARGET_STACK_PROTECT_GUARD
This hook returns a @code{DECL} node for the external variable to use
for the stack protection guard. This variable is initialized by the
runtime to some random value and is used to initialize the guard value
@@ -5241,8 +5511,10 @@ variable must be @code{ptr_type_node}.
The default version of this hook creates a variable called
@samp{__stack_chk_guard}, which is normally defined in @file{libgcc2.c}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_STACK_PROTECT_FAIL (void)
+@c hook-start:TARGET_STACK_PROTECT_FAIL
This hook returns a @code{CALL_EXPR} that alerts the runtime that the
stack protect guard variable has been modified. This expression should
involve a call to a @code{noreturn} function.
@@ -5251,13 +5523,17 @@ The default version of this hook invokes a function called
@samp{__stack_chk_fail}, taking no arguments. This function is
normally defined in @file{libgcc2.c}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void)
+@c hook-start:TARGET_STACK_PROTECT_RUNTIME_ENABLED_P
Returns true if the target wants GCC's default stack protect runtime support,
otherwise return false. The default implementation always returns true.
@end deftypefn
+@c hook-end
@deftypefn {Common Target Hook} bool TARGET_SUPPORTS_SPLIT_STACK (bool @var{report}, struct gcc_options *@var{opts})
+@c hook-start:TARGET_SUPPORTS_SPLIT_STACK
Whether this target supports splitting the stack when the options
described in @var{opts} have been passed. This is called
after options have been parsed, so the target may reject splitting
@@ -5265,8 +5541,10 @@ the stack in some configurations. The default version of this hook
returns false. If @var{report} is true, this function may issue a warning
or error; if @var{report} is false, it must simply return a value
@end deftypefn
+@c hook-end
@deftypefn {Common Target Hook} {vec<const char *>} TARGET_GET_VALID_OPTION_VALUES (int @var{option_code}, const char *@var{prefix})
+@c hook-start:TARGET_GET_VALID_OPTION_VALUES
The hook is used for options that have a non-trivial list of
possible option values. OPTION_CODE is option code of opt_code
enum type. PREFIX is used for bash completion and allows an implementation
@@ -5274,12 +5552,14 @@ to return more specific completion based on the prefix. All string values
should be allocated from heap memory and consumers should release them.
The result will be pruned to cases with PREFIX if not NULL.
@end deftypefn
+@c hook-end
@node Miscellaneous Register Hooks
@subsection Miscellaneous register hooks
@cindex miscellaneous register hooks
@deftypevr {Target Hook} bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
+@c hook-start:TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS
Set to true if each call that binds to a local definition explicitly
clobbers or sets all non-fixed registers modified by performing the call.
That is, by the call pattern itself, or by code that might be inserted by the
@@ -5289,6 +5569,7 @@ in the call pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE.
The default version of this hook is set to false. The purpose of this hook
is to enable the fipa-ra optimization.
@end deftypevr
+@c hook-end
@node Varargs
@section Implementing the Varargs Macros
@@ -5359,14 +5640,17 @@ interpret the values of @code{__builtin_classify_type}.
These machine description macros help implement varargs:
@deftypefn {Target Hook} rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void)
+@c hook-start:TARGET_EXPAND_BUILTIN_SAVEREGS
If defined, this hook produces the machine-specific code for a call to
@code{__builtin_saveregs}. This code will be moved to the very
beginning of the function, before any parameter access are made. The
return value of this function should be an RTX that contains the value
to use as the return of @code{__builtin_saveregs}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t @var{args_so_far}, const function_arg_info @var{&arg}, int *@var{pretend_args_size}, int @var{second_time})
+@c hook-start:TARGET_SETUP_INCOMING_VARARGS
This target hook offers an alternative to using
@code{__builtin_saveregs} and defining the hook
@code{TARGET_EXPAND_BUILTIN_SAVEREGS}. Use it to store the anonymous
@@ -5401,8 +5685,10 @@ happens for an inline function, which is not actually compiled until the
end of the source file. The hook @code{TARGET_SETUP_INCOMING_VARARGS} should
not generate any instructions in this case.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t @var{ca})
+@c hook-start:TARGET_STRICT_ARGUMENT_NAMING
Define this hook to return @code{true} if the location where a function
argument is passed depends on whether or not it is a named argument.
@@ -5416,8 +5702,10 @@ except the last are treated as named.
You need not define this hook if it always returns @code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_CALL_ARGS (rtx, @var{tree})
+@c hook-start:TARGET_CALL_ARGS
While generating RTL for a function call, this target hook is invoked once
for each argument passed to the function, either a register returned by
@code{TARGET_FUNCTION_ARG} or a memory location. It is called just
@@ -5431,16 +5719,20 @@ For functions without arguments, the hook is called once with @code{pc_rtx}
passed instead of an argument register.
Most ports do not need to implement anything for this hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_END_CALL_ARGS (void)
+@c hook-start:TARGET_END_CALL_ARGS
This target hook is invoked while generating RTL for a function call,
just after the point where the return reg is copied into a pseudo. It
signals that all the call argument and return registers for the just
emitted call are now no longer in use.
Most ports do not need to implement anything for this hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED (cumulative_args_t @var{ca})
+@c hook-start:TARGET_PRETEND_OUTGOING_VARARGS_NAMED
If you need to conditionally change ABIs so that one works with
@code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither
@code{TARGET_SETUP_INCOMING_VARARGS} nor @code{TARGET_STRICT_ARGUMENT_NAMING} was
@@ -5448,6 +5740,7 @@ defined, then define this hook to return @code{true} if
@code{TARGET_SETUP_INCOMING_VARARGS} is used, @code{false} otherwise.
Otherwise, you should not define this hook.
@end deftypefn
+@c hook-end
@node Trampolines
@section Support for Nested Functions
@@ -5496,6 +5789,7 @@ descriptor support, or can use GCC's generic descriptor implementation
for nested functions.
@deftypevr {Target Hook} int TARGET_CUSTOM_FUNCTION_DESCRIPTORS
+@c hook-start:TARGET_CUSTOM_FUNCTION_DESCRIPTORS
If the target can use GCC's generic descriptor mechanism for nested
functions, define this hook to a power of 2 representing an unused bit
in function pointers which can be used to differentiate descriptors at
@@ -5513,6 +5807,7 @@ Using descriptors for nested functions
eliminates the need for trampolines that reside on the stack and require
it to be made executable.
@end deftypevr
+@c hook-end
The following macros tell GCC how to generate code to allocate and
initialize an executable trampoline. You can also use this interface
@@ -5537,6 +5832,7 @@ may be necessary to take out pieces of the address and store them
separately.
@deftypefn {Target Hook} void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *@var{f})
+@c hook-start:TARGET_ASM_TRAMPOLINE_TEMPLATE
This hook is called by @code{assemble_trampoline_template} to output,
on the stream @var{f}, assembler code for a block of data that contains
the constant parts of a trampoline. This code should not include a
@@ -5547,6 +5843,7 @@ for the target. Do not define this hook on systems where the block move
code to copy the trampoline into place would be larger than the code
to generate it on the spot.
@end deftypefn
+@c hook-end
@defmac TRAMPOLINE_SECTION
Return the section into which the trampoline template is to be placed
@@ -5565,6 +5862,7 @@ is used for aligning trampolines.
@end defmac
@deftypefn {Target Hook} void TARGET_TRAMPOLINE_INIT (rtx @var{m_tramp}, tree @var{fndecl}, rtx @var{static_chain})
+@c hook-start:TARGET_TRAMPOLINE_INIT
This hook is called to initialize a trampoline.
@var{m_tramp} is an RTX for the memory block for the trampoline; @var{fndecl}
is the @code{FUNCTION_DECL} for the nested function; @var{static_chain} is an
@@ -5583,8 +5881,10 @@ If the target requires any other actions, such as flushing caches
enabling stack execution, these actions should be performed after
initializing the trampoline proper.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE (rtx @var{begin}, rtx @var{end})
+@c hook-start:TARGET_EMIT_CALL_BUILTIN___CLEAR_CACHE
On targets that do not define a @code{clear_cache} insn expander,
but that define the @code{CLEAR_CACHE_INSN} macro,
maybe_emit_call_builtin___clear_cache relies on this target hook
@@ -5595,8 +5895,10 @@ taking the assembler name from the builtin declaration. Overriding
definitions may call alternate functions, with alternate calling
conventions, or emit alternate RTX to perform the job.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx @var{addr})
+@c hook-start:TARGET_TRAMPOLINE_ADJUST_ADDRESS
This hook should perform any machine-specific adjustment in
the address of the trampoline. Its argument contains the address of the
memory block that was passed to @code{TARGET_TRAMPOLINE_INIT}. In case
@@ -5605,6 +5907,7 @@ address at which the template was stored, the different address should
be returned; otherwise @var{addr} should be returned unchanged.
If this hook is not defined, @var{addr} will be used for function calls.
@end deftypefn
+@c hook-end
Implementing trampolines is difficult on many machines because they have
separate instruction and data caches. Writing into a stack location
@@ -5665,6 +5968,7 @@ are ABI-mandated names that the compiler should provide.
@findex set_optab_libfunc
@findex init_one_libfunc
@deftypefn {Target Hook} void TARGET_INIT_LIBFUNCS (void)
+@c hook-start:TARGET_INIT_LIBFUNCS
This hook should declare additional library routines or rename
existing ones, using the functions @code{set_optab_libfunc} and
@code{init_one_libfunc} defined in @file{optabs.cc}.
@@ -5673,8 +5977,10 @@ library routines.
The default is to do nothing. Most ports don't need to define this hook.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_LIBFUNC_GNU_PREFIX
+@c hook-start:TARGET_LIBFUNC_GNU_PREFIX
If false (the default), internal library routines start with two
underscores. If set to true, these routines start with @code{__gnu_}
instead. E.g., @code{__muldi3} changes to @code{__gnu_muldi3}. This
@@ -5682,6 +5988,7 @@ currently only affects functions defined in @file{libgcc2.c}. If this
is set to true, the @file{tm.h} file must also
@code{#define LIBGCC2_GNU_PREFIX}.
@end deftypevr
+@c hook-end
@defmac FLOAT_LIB_COMPARE_RETURNS_BOOL (@var{mode}, @var{comparison})
This macro should return @code{true} if the library routine that
@@ -5737,17 +6044,21 @@ macro, a reasonable default is used.
@end defmac
@deftypefn {Target Hook} bool TARGET_LIBC_HAS_FUNCTION (enum function_class @var{fn_class}, tree @var{type})
+@c hook-start:TARGET_LIBC_HAS_FUNCTION
This hook determines whether a function from a class of functions
@var{fn_class} is present in the target C library. If @var{type} is NULL,
the caller asks for support for all standard (float, double, long double)
types. If @var{type} is non-NULL, the caller asks for support for a
specific type.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_LIBC_HAS_FAST_FUNCTION (int @var{fcode})
+@c hook-start:TARGET_LIBC_HAS_FAST_FUNCTION
This hook determines whether a function from a class of functions
@code{(enum function_class)}@var{fcode} has a fast implementation.
@end deftypefn
+@c hook-end
@defmac NEXT_OBJC_RUNTIME
Set this macro to 1 to use the "NeXT" Objective-C message sending conventions
@@ -5816,6 +6127,7 @@ accept.
@end defmac
@deftypefn {Target Hook} bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode @var{mode}, rtx @var{x}, bool @var{strict})
+@c hook-start:TARGET_LEGITIMATE_ADDRESS_P
A function that returns whether @var{x} (an RTX) is a legitimate memory
address on the target machine for a memory operand of mode @var{mode}.
@@ -5879,6 +6191,7 @@ that case and the non-strict variant otherwise.
Using the hook is usually simpler because it limits the number of
files that are recompiled when changes are made.
@end deftypefn
+@c hook-end
@defmac TARGET_MEM_CONSTRAINT
A single character to be used instead of the default @code{'m'}
@@ -5905,6 +6218,7 @@ a label_ref or symbol_ref within an UNSPEC@.
@end defmac
@deftypefn {Target Hook} rtx TARGET_LEGITIMIZE_ADDRESS (rtx @var{x}, rtx @var{oldx}, machine_mode @var{mode})
+@c hook-start:TARGET_LEGITIMIZE_ADDRESS
This hook is given an invalid memory address @var{x} for an
operand of mode @var{mode} and should try to return a valid memory
address.
@@ -5926,6 +6240,7 @@ is safe to omit this hook or make it return @var{x} if it cannot find
a valid way to legitimize the address. But often a machine-dependent
strategy can generate better code.
@end deftypefn
+@c hook-end
@defmac LEGITIMIZE_RELOAD_ADDRESS (@var{x}, @var{mode}, @var{opnum}, @var{type}, @var{ind_levels}, @var{win})
A C compound statement that attempts to replace @var{x}, which is an address
@@ -5977,6 +6292,7 @@ address; but often a machine-dependent strategy can generate better code.
@end defmac
@deftypefn {Target Hook} bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx @var{addr}, addr_space_t @var{addrspace})
+@c hook-start:TARGET_MODE_DEPENDENT_ADDRESS_P
This hook returns @code{true} if memory address @var{addr} in address
space @var{addrspace} can have
different meanings depending on the machine mode of the memory
@@ -5992,16 +6308,20 @@ You may assume that @var{addr} is a valid address for the machine.
The default version of this hook returns @code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode @var{mode}, rtx @var{x})
+@c hook-start:TARGET_LEGITIMATE_CONSTANT_P
This hook returns true if @var{x} is a legitimate constant for a
@var{mode}-mode immediate operand on the target machine. You can assume that
@var{x} satisfies @code{CONSTANT_P}, so you need not check this.
The default definition returns true.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PRECOMPUTE_TLS_P (machine_mode @var{mode}, rtx @var{x})
+@c hook-start:TARGET_PRECOMPUTE_TLS_P
This hook returns true if @var{x} is a TLS operand on the target
machine that should be pre-computed when used as the argument in a call.
You can assume that @var{x} satisfies @code{CONSTANT_P}, so you need not
@@ -6009,8 +6329,10 @@ check this.
The default definition returns false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_DELEGITIMIZE_ADDRESS (rtx @var{x})
+@c hook-start:TARGET_DELEGITIMIZE_ADDRESS
This hook is used to undo the possibly obfuscating effects of the
@code{LEGITIMIZE_ADDRESS} and @code{LEGITIMIZE_RELOAD_ADDRESS} target
macros. Some backend implementations of these macros wrap symbol
@@ -6019,13 +6341,17 @@ addressing modes. This target hook allows GCC's optimizers to understand
the semantics of these opaque @code{UNSPEC}s by converting them back
into their original form.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx @var{x})
+@c hook-start:TARGET_CONST_NOT_OK_FOR_DEBUG_P
This hook should return true if @var{x} should not be emitted into
debug sections.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode @var{mode}, rtx @var{x})
+@c hook-start:TARGET_CANNOT_FORCE_CONST_MEM
This hook should return true if @var{x} is of a form that cannot (or
should not) be spilled to the constant pool. @var{mode} is the mode
of @var{x}.
@@ -6038,29 +6364,37 @@ from the constant pool instead of spilling and reloading a register
holding the constant. This restriction is often true of addresses
of TLS symbols for various targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode @var{mode}, const_rtx @var{x})
+@c hook-start:TARGET_USE_BLOCKS_FOR_CONSTANT_P
This hook should return true if pool entries for constant @var{x} can
be placed in an @code{object_block} structure. @var{mode} is the mode
of @var{x}.
The default version returns false for all constants.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree @var{decl})
+@c hook-start:TARGET_USE_BLOCKS_FOR_DECL_P
This hook should return true if pool entries for @var{decl} should
be placed in an @code{object_block} structure.
The default version returns true for all decls.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_BUILTIN_RECIPROCAL (tree @var{fndecl})
+@c hook-start:TARGET_BUILTIN_RECIPROCAL
This hook should return the DECL of a function that implements the
reciprocal of the machine-specific builtin function @var{fndecl}, or
@code{NULL_TREE} if such a function is not available.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void)
+@c hook-start:TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD
This hook should return the DECL of a function @var{f} that given an
address @var{addr} as an argument returns a mask @var{m} that can be
used to extract from two vectors the relevant data that resides in
@@ -6088,14 +6422,18 @@ If this hook is not defined, then @var{addr} will be used as
the argument @var{OFF} to @code{REALIGN_LOAD}, in which case the low
log2(@var{VS}) @minus{} 1 bits of @var{addr} will be considered.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum vect_cost_for_stmt @var{type_of_cost}, tree @var{vectype}, int @var{misalign})
+@c hook-start:TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST
Returns cost of different scalar or vector statements for vectorization cost model.
For vector memory operations the cost may depend on type (@var{vectype}) and
misalignment value (@var{misalign}).
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} poly_uint64 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT (const_tree @var{type})
+@c hook-start:TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT
This hook returns the preferred alignment in bits for accesses to
vectors of type @var{type} in vectorized code. This might be less than
or greater than the ABI-defined value returned by
@@ -6106,14 +6444,18 @@ for alignment.
The default hook returns @code{TYPE_ALIGN (@var{type})}, which is
correct for most targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE (const_tree @var{type}, bool @var{is_packed})
+@c hook-start:TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE
Return true if vector alignment is reachable (by peeling N iterations)
for the given scalar type @var{type}. @var{is_packed} is false if the scalar
access using @var{type} is known to be naturally aligned.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VECTORIZE_VEC_PERM_CONST (machine_mode @var{mode}, machine_mode @var{op_mode}, rtx @var{output}, rtx @var{in0}, rtx @var{in1}, const vec_perm_indices @var{&sel})
+@c hook-start:TARGET_VECTORIZE_VEC_PERM_CONST
This hook is used to test whether the target can permute up to two
vectors of mode @var{op_mode} using the permutation vector @code{sel},
producing a vector of mode @var{mode}. The hook is also used to emit such
@@ -6136,45 +6478,57 @@ the selector into a register and using the @var{vec_perm@var{mode}}
instruction pattern. There is no need for the hook to handle these two
implementation approaches itself.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION (unsigned @var{code}, tree @var{vec_type_out}, tree @var{vec_type_in})
+@c hook-start:TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
This hook should return the decl of a function that implements the
vectorized variant of the function with the @code{combined_fn} code
@var{code} or @code{NULL_TREE} if such a function is not available.
The return type of the vectorized function shall be of vector type
@var{vec_type_out} and the argument types should be @var{vec_type_in}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION (tree @var{fndecl}, tree @var{vec_type_out}, tree @var{vec_type_in})
+@c hook-start:TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION
This hook should return the decl of a function that implements the
vectorized variant of target built-in function @code{fndecl}. The
return type of the vectorized function shall be of vector type
@var{vec_type_out} and the argument types should be @var{vec_type_in}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT (machine_mode @var{mode}, const_tree @var{type}, int @var{misalignment}, bool @var{is_packed})
+@c hook-start:TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT
This hook should return true if the target supports misaligned vector
store/load of a specific factor denoted in the @var{misalignment}
parameter. The vector store/load should be of machine mode @var{mode} and
the elements in the vectors should be of type @var{type}. @var{is_packed}
parameter is true if the memory access is defined in a packed struct.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE (scalar_mode @var{mode})
+@c hook-start:TARGET_VECTORIZE_PREFERRED_SIMD_MODE
This hook should return the preferred mode for vectorizing scalar
mode @var{mode}. The default is
equal to @code{word_mode}, because the vectorizer can do some
transformations even in absence of specialized @acronym{SIMD} hardware.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_VECTORIZE_SPLIT_REDUCTION (machine_mode)
+@c hook-start:TARGET_VECTORIZE_SPLIT_REDUCTION
This hook should return the preferred mode to split the final reduction
step on @var{mode} to. The reduction is then carried out reducing upper
against lower halves of vectors recursively until the specified mode is
reached. The default is @var{mode} which means no splitting.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned int} TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES (vector_modes *@var{modes}, bool @var{all})
+@c hook-start:TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES
If using the mode returned by @code{TARGET_VECTORIZE_PREFERRED_SIMD_MODE}
is not the only approach worth considering, this hook should add one mode to
@var{modes} for each useful alternative approach. These modes are then
@@ -6204,8 +6558,10 @@ The hook does not need to do anything if the vector returned by
for autovectorization. The default implementation adds no modes and
returns 0.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} opt_machine_mode TARGET_VECTORIZE_RELATED_MODE (machine_mode @var{vector_mode}, scalar_mode @var{element_mode}, poly_uint64 @var{nunits})
+@c hook-start:TARGET_VECTORIZE_RELATED_MODE
If a piece of code is using vector mode @var{vector_mode} and also wants
to operate on elements of mode @var{element_mode}, return the vector mode
it should use for those elements. If @var{nunits} is nonzero, ensure that
@@ -6228,8 +6584,10 @@ The default implementation uses @code{mode_for_vector} to find the
requested mode, returning a mode with the same size as @var{vector_mode}
when @var{nunits} is zero. This is the correct behavior for most targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} opt_machine_mode TARGET_VECTORIZE_GET_MASK_MODE (machine_mode @var{mode})
+@c hook-start:TARGET_VECTORIZE_GET_MASK_MODE
Return the mode to use for a vector mask that holds one boolean
result for each element of vector mode @var{mode}. The returned mask mode
can be a vector of integers (class @code{MODE_VECTOR_INT}), a vector of
@@ -6240,14 +6598,18 @@ mask mode exists.
The default implementation returns a @code{MODE_VECTOR_INT} with the
same size and number of elements as @var{mode}, if such a mode exists.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned @var{ifn})
+@c hook-start:TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE
This hook returns true if masked internal function @var{ifn} (really of
type @code{internal_fn}) should be considered expensive when the mask is
all zeros. GCC can then try to branch around the instruction instead.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {class vector_costs *} TARGET_VECTORIZE_CREATE_COSTS (vec_info *@var{vinfo}, bool @var{costing_for_scalar})
+@c hook-start:TARGET_VECTORIZE_CREATE_COSTS
This hook should initialize target-specific data structures in preparation
for modeling the costs of vectorizing a loop or basic block. The default
allocates three unsigned integers for accumulating costs for the prologue,
@@ -6257,24 +6619,30 @@ is being vectorized. If @var{costing_for_scalar} is true, it indicates the
current cost model is for the scalar version of a loop or block; otherwise
it is for the vector version.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree @var{mem_vectype}, const_tree @var{index_type}, int @var{scale})
+@c hook-start:TARGET_VECTORIZE_BUILTIN_GATHER
Target builtin that implements vector gather operation. @var{mem_vectype}
is the vector type of the load and @var{index_type} is scalar type of
the index, scaled by @var{scale}.
The default is @code{NULL_TREE} which means to not vectorize gather
loads.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree @var{vectype}, const_tree @var{index_type}, int @var{scale})
+@c hook-start:TARGET_VECTORIZE_BUILTIN_SCATTER
Target builtin that implements vector scatter operation. @var{vectype}
is the vector type of the store and @var{index_type} is scalar type of
the index, scaled by @var{scale}.
The default is @code{NULL_TREE} which means to not vectorize scatter
stores.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN (struct cgraph_node *@var{}, struct cgraph_simd_clone *@var{}, @var{tree}, @var{int})
+@c hook-start:TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN
This hook should set @var{vecsize_mangle}, @var{vecsize_int}, @var{vecsize_float}
fields in @var{simd_clone} structure pointed by @var{clone_info} argument and also
@var{simdlen} field if it was previously 0.
@@ -6284,31 +6652,41 @@ not determined by the bitsize (in which case @var{simdlen} is always used).
The hook should return 0 if SIMD clones shouldn't be emitted,
or number of @var{vecsize_mangle} variants that should be emitted.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *@var{})
+@c hook-start:TARGET_SIMD_CLONE_ADJUST
This hook should add implicit @code{attribute(target("..."))} attribute
to SIMD clone @var{node} if needed.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *@var{})
+@c hook-start:TARGET_SIMD_CLONE_USABLE
This hook should return -1 if SIMD clone @var{node} shouldn't be used
in vectorized loops in current function, or non-negative number if it is
usable. In that case, the smaller the number is, the more desirable it is
to use it.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SIMT_VF (void)
+@c hook-start:TARGET_SIMT_VF
Return number of threads in SIMT thread group on the target.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_OMP_DEVICE_KIND_ARCH_ISA (enum omp_device_kind_arch_isa @var{trait}, const char *@var{name})
+@c hook-start:TARGET_OMP_DEVICE_KIND_ARCH_ISA
Return 1 if @var{trait} @var{name} is present in the OpenMP context's
device trait set, return 0 if not present in any OpenMP context in the
whole translation unit, or -1 if not present in the current OpenMP context
but might be present in another OpenMP context in the same TU.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_GOACC_VALIDATE_DIMS (tree @var{decl}, int *@var{dims}, int @var{fn_level}, unsigned @var{used})
+@c hook-start:TARGET_GOACC_VALIDATE_DIMS
This hook should check the launch dimensions provided for an OpenACC
compute region, or routine. Defaulted values are represented as -1
and non-constant values as 0. The @var{fn_level} is negative for the
@@ -6320,13 +6698,17 @@ Diagnostics should be issued as appropriate. Return
true, if changes have been made. You must override this hook to
provide dimensions larger than 1.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_GOACC_DIM_LIMIT (int @var{axis})
+@c hook-start:TARGET_GOACC_DIM_LIMIT
This hook should return the maximum size of a particular dimension,
or zero if unbounded.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_GOACC_FORK_JOIN (gcall *@var{call}, const int *@var{dims}, bool @var{is_fork})
+@c hook-start:TARGET_GOACC_FORK_JOIN
This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN
function calls to target-specific gimple, or indicate whether they
should be retained. It is executed during the oacc_device_lower pass.
@@ -6335,8 +6717,10 @@ return false, if it is to be deleted (either because target-specific
gimple has been inserted before it, or there is no need for it).
The default hook returns false, if there are no RTL expanders for them.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_GOACC_REDUCTION (gcall *@var{call})
+@c hook-start:TARGET_GOACC_REDUCTION
This hook is used by the oacc_transform pass to expand calls to the
@var{GOACC_REDUCTION} internal function, into a sequence of gimple
instructions. @var{call} is gimple statement containing the call to
@@ -6344,8 +6728,10 @@ the function. This hook removes statement @var{call} after the
expanded sequence has been inserted. This hook is also responsible
for allocating any storage for reductions when necessary.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_PREFERRED_ELSE_VALUE (unsigned @var{ifn}, tree @var{type}, unsigned @var{nops}, tree *@var{ops})
+@c hook-start:TARGET_PREFERRED_ELSE_VALUE
This hook returns the target's preferred final argument for a call
to conditional internal function @var{ifn} (really of type
@code{internal_fn}). @var{type} specifies the return type of the
@@ -6360,8 +6746,10 @@ This hook is only relevant if the target supports conditional patterns
like @code{cond_add@var{m}}. The default implementation returns a zero
constant of type @var{type}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_GOACC_ADJUST_PRIVATE_DECL (location_t @var{loc}, tree @var{var}, int @var{level})
+@c hook-start:TARGET_GOACC_ADJUST_PRIVATE_DECL
This hook, if defined, is used by accelerator target back-ends to adjust
OpenACC variable declarations that should be made private to the given
parallelism level (i.e. @code{GOMP_DIM_GANG}, @code{GOMP_DIM_WORKER} or
@@ -6373,8 +6761,10 @@ You may also use the @code{TARGET_GOACC_EXPAND_VAR_DECL} hook if the
adjusted variable declaration needs to be expanded to RTL in a non-standard
way.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_GOACC_EXPAND_VAR_DECL (tree @var{var})
+@c hook-start:TARGET_GOACC_EXPAND_VAR_DECL
This hook, if defined, is used by accelerator target back-ends to expand
specially handled kinds of @code{VAR_DECL} expressions. A particular use is
to place variables with specific attributes inside special accelarator
@@ -6386,6 +6776,7 @@ Only define this hook if your accelerator target needs to expand certain
private variables at OpenACC device-lowering time using the
@code{TARGET_GOACC_ADJUST_PRIVATE_DECL} target hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_GOACC_CREATE_WORKER_BROADCAST_RECORD (tree @var{rec}, bool @var{sender}, const char *@var{name}, unsigned HOST_WIDE_INT @var{offset})
Create a record used to propagate local-variable state from an active
@@ -6439,19 +6830,24 @@ section anchors at all unless either @code{TARGET_MIN_ANCHOR_OFFSET}
or @code{TARGET_MAX_ANCHOR_OFFSET} is set to a nonzero value.
@deftypevr {Target Hook} HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET
+@c hook-start:TARGET_MIN_ANCHOR_OFFSET
The minimum offset that should be applied to a section anchor.
On most targets, it should be the smallest offset that can be
applied to a base register while still giving a legitimate address
for every mode. The default value is 0.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET
+@c hook-start:TARGET_MAX_ANCHOR_OFFSET
Like @code{TARGET_MIN_ANCHOR_OFFSET}, but the maximum (inclusive)
offset that should be applied to section anchors. The default
value is 0.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_ANCHOR (rtx @var{x})
+@c hook-start:TARGET_ASM_OUTPUT_ANCHOR
Write the assembly code to define section anchor @var{x}, which is a
@code{SYMBOL_REF} for which @samp{SYMBOL_REF_ANCHOR_P (@var{x})} is true.
The hook is called with the assembly output position set to the beginning
@@ -6462,8 +6858,10 @@ it to define the symbol as @samp{. + SYMBOL_REF_BLOCK_OFFSET (@var{x})}.
If @code{ASM_OUTPUT_DEF} is not available, the hook's default definition
is @code{NULL}, which disables the use of section anchors altogether.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx @var{x})
+@c hook-start:TARGET_USE_ANCHORS_FOR_SYMBOL_P
Return true if GCC should attempt to use anchors to access @code{SYMBOL_REF}
@var{x}. You can assume @samp{SYMBOL_REF_HAS_BLOCK_INFO_P (@var{x})} and
@samp{!SYMBOL_REF_ANCHOR_P (@var{x})}.
@@ -6472,6 +6870,7 @@ The default version is correct for most targets, but you might need to
intercept this hook to handle things like target-specific attributes
or target-specific sections.
@end deftypefn
+@c hook-end
@node Condition Code
@section Condition Code Status
@@ -6571,6 +6970,7 @@ in @file{@var{machine}-modes.def}.
@end defmac
@deftypefn {Target Hook} void TARGET_CANONICALIZE_COMPARISON (int *@var{code}, rtx *@var{op0}, rtx *@var{op1}, bool @var{op0_preserve_value})
+@c hook-start:TARGET_CANONICALIZE_COMPARISON
On some machines not all possible comparisons are defined, but you can
convert an invalid comparison into a valid one. For example, the Alpha
does not have a @code{GT} comparison, but you can use an @code{LT}
@@ -6591,6 +6991,7 @@ valid but will see if the resulting insn matches a pattern in the
You need not to implement this hook if it would never change the
comparison code or operands.
@end deftypefn
+@c hook-end
@defmac REVERSIBLE_CC_MODE (@var{mode})
A C expression whose value is one if it is always safe to reverse a
@@ -6626,6 +7027,7 @@ like:
@end defmac
@deftypefn {Target Hook} bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int *@var{p1}, unsigned int *@var{p2})
+@c hook-start:TARGET_FIXED_CONDITION_CODE_REGS
On targets which use a hard
register rather than a pseudo-register to hold condition codes, the
regular CSE passes are often not able to identify cases in which the
@@ -6639,8 +7041,10 @@ integer pointed to by @var{p2} should be set to
The default version of this hook returns false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode @var{m1}, machine_mode @var{m2})
+@c hook-start:TARGET_CC_MODES_COMPATIBLE
On targets which use multiple condition code modes in class
@code{MODE_CC}, it is sometimes the case that a comparison can be
validly done in more than one mode. On such a system, define this
@@ -6652,12 +7056,15 @@ The default version of this hook checks whether the modes are the
same. If they are, it returns that mode. If they are different, it
returns @code{VOIDmode}.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} {unsigned int} TARGET_FLAGS_REGNUM
+@c hook-start:TARGET_FLAGS_REGNUM
If the target has a dedicated flags register, and it needs to use the
post-reload comparison elimination pass, or the delay slot filler pass,
then this value should be set appropriately.
@end deftypevr
+@c hook-end
@node Costs
@section Describing Relative Costs of Operations
@@ -6691,6 +7098,7 @@ These macros are obsolete, new ports should use the target hook
@end defmac
@deftypefn {Target Hook} int TARGET_REGISTER_MOVE_COST (machine_mode @var{mode}, reg_class_t @var{from}, reg_class_t @var{to})
+@c hook-start:TARGET_REGISTER_MOVE_COST
This target hook should return the cost of moving data of mode @var{mode}
from a register in class @var{from} to one in class @var{to}. The classes
are expressed using the enumeration values such as @code{GENERAL_REGS}.
@@ -6710,6 +7118,7 @@ if the @samp{mov@var{m}} pattern's constraints do not allow such copying.
The default version of this function returns 2.
@end deftypefn
+@c hook-end
@defmac MEMORY_MOVE_COST (@var{mode}, @var{class}, @var{in})
A C expression for the cost of moving data of mode @var{mode} between a
@@ -6739,6 +7148,7 @@ These macros are obsolete, new ports should use the target hook
@end defmac
@deftypefn {Target Hook} int TARGET_MEMORY_MOVE_COST (machine_mode @var{mode}, reg_class_t @var{rclass}, bool @var{in})
+@c hook-start:TARGET_MEMORY_MOVE_COST
This target hook should return the cost of moving data of mode @var{mode}
between a register of class @var{rclass} and memory; @var{in} is @code{false}
if the value is to be written to memory, @code{true} if it is to be read in.
@@ -6761,6 +7171,7 @@ secondary register in the conventional way but the default base value of
value to the result of that function. The arguments to that function
are the same as to this target hook.
@end deftypefn
+@c hook-end
@defmac BRANCH_COST (@var{speed_p}, @var{predictable_p})
A C expression for the cost of a branch instruction. A value of 1 is
@@ -6792,6 +7203,7 @@ other fields in the same word of the structure, but to different bytes.
@end defmac
@deftypefn {Target Hook} bool TARGET_SLOW_UNALIGNED_ACCESS (machine_mode @var{mode}, unsigned int @var{align})
+@c hook-start:TARGET_SLOW_UNALIGNED_ACCESS
This hook returns true if memory accesses described by the
@var{mode} and @var{alignment} parameters have a cost many times greater
than aligned accesses, for example if they are emulated in a trap handler.
@@ -6807,6 +7219,7 @@ add a cycle or two to the time for a memory access.
The hook must return true whenever @code{STRICT_ALIGNMENT} is true.
The default implementation returns @code{STRICT_ALIGNMENT}.
@end deftypefn
+@c hook-end
@defmac MOVE_RATIO (@var{speed})
The threshold of number of scalar memory-to-memory move insns, @emph{below}
@@ -6825,6 +7238,7 @@ If you don't define this, a reasonable default is used.
@end defmac
@deftypefn {Target Hook} bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned HOST_WIDE_INT @var{size}, unsigned int @var{alignment}, enum by_pieces_operation @var{op}, bool @var{speed_p})
+@c hook-start:TARGET_USE_BY_PIECES_INFRASTRUCTURE_P
GCC will attempt several strategies when asked to copy between
two areas of memory, or to set, clear or store to memory, for example
when copying a @code{struct}. The @code{by_pieces} infrastructure
@@ -6858,15 +7272,19 @@ Returning true for higher values of @code{size} may also cause an increase
in code size, for example where the number of insns emitted to perform a
move would be greater than that of a library call.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_OVERLAP_OP_BY_PIECES_P (void)
+@c hook-start:TARGET_OVERLAP_OP_BY_PIECES_P
This target hook should return true if when the @code{by_pieces}
infrastructure is used, an offset adjusted unaligned memory operation
in the smallest integer mode for the last piece operation of a memory
region can be generated to avoid doing more than one smaller operations.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_COMPARE_BY_PIECES_BRANCH_RATIO (machine_mode @var{mode})
+@c hook-start:TARGET_COMPARE_BY_PIECES_BRANCH_RATIO
When expanding a block comparison in MODE, gcc can try to reduce the
number of branches at the expense of more memory operations. This hook
allows the target to override the default choice. It should return the
@@ -6875,6 +7293,7 @@ one comparison per @var{mode}-sized piece. A port can also prevent a
particular mode from being used for block comparisons by returning a
negative number from this hook.
@end deftypefn
+@c hook-end
@defmac MOVE_MAX_PIECES
A C expression used by @code{move_by_pieces} to determine the largest unit
@@ -6978,6 +7397,7 @@ Define this macro if a non-short-circuit operation produced by
@end defmac
@deftypefn {Target Hook} bool TARGET_OPTAB_SUPPORTED_P (int @var{op}, machine_mode @var{mode1}, machine_mode @var{mode2}, optimization_type @var{opt_type})
+@c hook-start:TARGET_OPTAB_SUPPORTED_P
Return true if the optimizers should use optab @var{op} with
modes @var{mode1} and @var{mode2} for optimization type @var{opt_type}.
The optab is known to have an associated @file{.md} instruction
@@ -6990,8 +7410,10 @@ optimizers should use optab @code{rintdf2}.
The default hook returns true for all inputs.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_RTX_COSTS (rtx @var{x}, machine_mode @var{mode}, int @var{outer_code}, int @var{opno}, int *@var{total}, bool @var{speed})
+@c hook-start:TARGET_RTX_COSTS
This target hook describes the relative costs of RTL expressions.
The cost may depend on the precise form of the expression, which is
@@ -7022,8 +7444,10 @@ size cost of an expression, again relative to @code{COSTS_N_INSNS}.
The hook returns true when all subexpressions of @var{x} have been
processed, and false when @code{rtx_cost} should recurse.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_ADDRESS_COST (rtx @var{address}, machine_mode @var{mode}, addr_space_t @var{as}, bool @var{speed})
+@c hook-start:TARGET_ADDRESS_COST
This hook computes the cost of an addressing mode that contains
@var{address}. If not defined, the cost is computed from
the @var{address} expression and the @code{TARGET_RTX_COST} hook.
@@ -7057,8 +7481,10 @@ should be considered in the definition of this macro. Equivalent costs
should probably only be given to addresses with different numbers of
registers on machines with lots of registers.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_INSN_COST (rtx_insn *@var{insn}, bool @var{speed})
+@c hook-start:TARGET_INSN_COST
This target hook describes the relative costs of RTL instructions.
In implementing this hook, you can use the construct
@@ -7069,8 +7495,10 @@ When optimizing for code size, i.e.@: when @code{speed} is
false, this target hook should be used to estimate the relative
size cost of an expression, again relative to @code{COSTS_N_INSNS}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned int} TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge @var{e})
+@c hook-start:TARGET_MAX_NOCE_IFCVT_SEQ_COST
This hook returns a value in the same units as @code{TARGET_RTX_COSTS},
giving the maximum acceptable cost for a sequence generated by the RTL
if-conversion pass when conditional execution is not available.
@@ -7089,21 +7517,27 @@ The default implementation of this hook uses the
@code{max-rtl-if-conversion-[un]predictable} parameters if they are set,
and uses a multiple of @code{BRANCH_COST} otherwise.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_NOCE_CONVERSION_PROFITABLE_P (rtx_insn *@var{seq}, struct noce_if_info *@var{if_info})
+@c hook-start:TARGET_NOCE_CONVERSION_PROFITABLE_P
This hook returns true if the instruction sequence @code{seq} is a good
candidate as a replacement for the if-convertible sequence described in
@code{if_info}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_NEW_ADDRESS_PROFITABLE_P (rtx @var{memref}, rtx_insn * @var{insn}, rtx @var{new_addr})
+@c hook-start:TARGET_NEW_ADDRESS_PROFITABLE_P
Return @code{true} if it is profitable to replace the address in
@var{memref} with @var{new_addr}. This allows targets to prevent the
scheduler from undoing address optimizations. The instruction containing the
memref is @var{insn}. The default implementation returns @code{true}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void)
+@c hook-start:TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P
This predicate controls the use of the eager delay slot filler to disallow
speculatively executed instructions being placed in delay slots. Targets
such as certain MIPS architectures possess both branches with and without
@@ -7112,8 +7546,10 @@ disabling it is beneficial when ordinary branches are available. Use of
delay slot branches filled using the basic filler is often still desirable
as the delay slot can hide a pipeline bubble.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_ESTIMATED_POLY_VALUE (poly_int64 @var{val}, poly_value_estimate_kind @var{kind})
+@c hook-start:TARGET_ESTIMATED_POLY_VALUE
Return an estimate of the runtime value of @var{val}, for use in
things like cost calculations or profiling frequencies. @var{kind} is used
to ask for the minimum, maximum, and likely estimates of the value through
@@ -7121,6 +7557,7 @@ the @code{POLY_VALUE_MIN}, @code{POLY_VALUE_MAX} and
@code{POLY_VALUE_LIKELY} values. The default
implementation returns the lowest possible value of @var{val}.
@end deftypefn
+@c hook-end
@node Scheduling
@section Adjusting the Instruction Scheduler
@@ -7131,6 +7568,7 @@ hooks for this purpose. It is usually enough to define just a few of
them: try the first ones in this list first.
@deftypefn {Target Hook} int TARGET_SCHED_ISSUE_RATE (void)
+@c hook-start:TARGET_SCHED_ISSUE_RATE
This hook returns the maximum number of instructions that can ever
issue at the same time on the target machine. The default is one.
Although the insn scheduler can define itself the possibility of issue
@@ -7141,8 +7579,10 @@ This value must be constant over the entire compilation. If you need
it to vary depending on what the instructions are, you must use
@samp{TARGET_SCHED_VARIABLE_ISSUE}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_VARIABLE_ISSUE (FILE *@var{file}, int @var{verbose}, rtx_insn *@var{insn}, int @var{more})
+@c hook-start:TARGET_SCHED_VARIABLE_ISSUE
This hook is executed by the scheduler after it has scheduled an insn
from the ready list. It should return the number of insns which can
still be issued in the current cycle. The default is
@@ -7155,8 +7595,10 @@ debug output to. @var{verbose} is the verbose level provided by
@option{-fsched-verbose-@var{n}}. @var{insn} is the instruction that
was scheduled.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_ADJUST_COST (rtx_insn *@var{insn}, int @var{dep_type1}, rtx_insn *@var{dep_insn}, int @var{cost}, unsigned int @var{dw})
+@c hook-start:TARGET_SCHED_ADJUST_COST
This function corrects the value of @var{cost} based on the
relationship between @var{insn} and @var{dep_insn} through a
dependence of type dep_type, and strength @var{dw}. It should return the new
@@ -7170,16 +7612,20 @@ times of the first and the second insns. If these values are not
acceptable, you could use the hook to modify them too. See also
@pxref{Processor pipeline description}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *@var{insn}, int @var{priority})
+@c hook-start:TARGET_SCHED_ADJUST_PRIORITY
This hook adjusts the integer scheduling priority @var{priority} of
@var{insn}. It should return the new priority. Increase the priority to
execute @var{insn} earlier, reduce the priority to execute @var{insn}
later. Do not define this hook if you do not need to adjust the
scheduling priorities of insns.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_REORDER (FILE *@var{file}, int @var{verbose}, rtx_insn **@var{ready}, int *@var{n_readyp}, int @var{clock})
+@c hook-start:TARGET_SCHED_REORDER
This hook is executed by the scheduler after it has scheduled the ready
list, to allow the machine description to reorder it (for example to
combine two small instructions together on @samp{VLIW} machines).
@@ -7195,8 +7641,10 @@ the number of ready insns. The return value is the number of insns that
can issue this cycle; normally this is just @code{issue_rate}. See also
@samp{TARGET_SCHED_REORDER2}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_REORDER2 (FILE *@var{file}, int @var{verbose}, rtx_insn **@var{ready}, int *@var{n_readyp}, int @var{clock})
+@c hook-start:TARGET_SCHED_REORDER2
Like @samp{TARGET_SCHED_REORDER}, but called at a different time. That
function is called whenever the scheduler starts a new cycle. This one
is called once per iteration over a cycle, immediately after
@@ -7206,12 +7654,16 @@ this hook can be useful if there are frequent situations where
scheduling one insn causes other insns to become ready in the same
cycle. These other insns can then be taken into account properly.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_MACRO_FUSION_P (void)
+@c hook-start:TARGET_SCHED_MACRO_FUSION_P
This hook is used to check whether target platform supports macro fusion.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *@var{prev}, rtx_insn *@var{curr})
+@c hook-start:TARGET_SCHED_MACRO_FUSION_PAIR_P
This hook is used to check whether two insns should be macro fused for
a target microarchitecture. If this hook returns true for the given insn pair
(@var{prev} and @var{curr}), the scheduler will put them into a sched
@@ -7219,8 +7671,10 @@ group, and they will not be scheduled apart. The two insns will be either
two SET insns or a compare and a conditional jump and this hook should
validate any dependencies needed to fuse the two insns together.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK (rtx_insn *@var{head}, rtx_insn *@var{tail})
+@c hook-start:TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK
This hook is called after evaluation forward dependencies of insns in
chain given by two parameter values (@var{head} and @var{tail}
correspondingly) but before insns scheduling of the insn chain. For
@@ -7229,8 +7683,10 @@ analysis of dependencies. This hook can use backward and forward
dependencies of the insn scheduler because they are already
calculated.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_INIT (FILE *@var{file}, int @var{verbose}, int @var{max_ready})
+@c hook-start:TARGET_SCHED_INIT
This hook is executed by the scheduler at the beginning of each block of
instructions that are to be scheduled. @var{file} is either a null
pointer, or a stdio stream to write any debug output to. @var{verbose}
@@ -7239,8 +7695,10 @@ is the verbose level provided by @option{-fsched-verbose-@var{n}}.
region that can be live at the same time. This can be used to allocate
scratch space if it is needed, e.g.@: by @samp{TARGET_SCHED_REORDER}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FINISH (FILE *@var{file}, int @var{verbose})
+@c hook-start:TARGET_SCHED_FINISH
This hook is executed by the scheduler at the end of each block of
instructions that are to be scheduled. It can be used to perform
cleanup of any actions done by the other scheduling hooks. @var{file}
@@ -7248,21 +7706,27 @@ is either a null pointer, or a stdio stream to write any debug output
to. @var{verbose} is the verbose level provided by
@option{-fsched-verbose-@var{n}}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_INIT_GLOBAL (FILE *@var{file}, int @var{verbose}, int @var{old_max_uid})
+@c hook-start:TARGET_SCHED_INIT_GLOBAL
This hook is executed by the scheduler after function level initializations.
@var{file} is either a null pointer, or a stdio stream to write any debug output to.
@var{verbose} is the verbose level provided by @option{-fsched-verbose-@var{n}}.
@var{old_max_uid} is the maximum insn uid when scheduling begins.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FINISH_GLOBAL (FILE *@var{file}, int @var{verbose})
+@c hook-start:TARGET_SCHED_FINISH_GLOBAL
This is the cleanup hook corresponding to @code{TARGET_SCHED_INIT_GLOBAL}.
@var{file} is either a null pointer, or a stdio stream to write any debug output to.
@var{verbose} is the verbose level provided by @option{-fsched-verbose-@var{n}}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void)
+@c hook-start:TARGET_SCHED_DFA_PRE_CYCLE_INSN
The hook returns an RTL insn. The automaton state used in the
pipeline hazard recognizer is changed as if the insn were scheduled
when the new simulated processor cycle starts. Usage of the hook may
@@ -7271,37 +7735,49 @@ processors. If the hook is defined, it is used only for the automaton
based pipeline description. The default is not to change the state
when the new simulated processor cycle starts.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void)
+@c hook-start:TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN
The hook can be used to initialize data used by the previous hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {rtx_insn *} TARGET_SCHED_DFA_POST_CYCLE_INSN (void)
+@c hook-start:TARGET_SCHED_DFA_POST_CYCLE_INSN
The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used
to changed the state as if the insn were scheduled when the new
simulated processor cycle finishes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void)
+@c hook-start:TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN
The hook is analogous to @samp{TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN} but
used to initialize data used by the previous hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void)
+@c hook-start:TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE
The hook to notify target that the current simulated cycle is about to finish.
The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used
to change the state in more complicated situations - e.g., when advancing
state on a single insn is not enough.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void)
+@c hook-start:TARGET_SCHED_DFA_POST_ADVANCE_CYCLE
The hook to notify target that new simulated cycle has just started.
The hook is analogous to @samp{TARGET_SCHED_DFA_POST_CYCLE_INSN} but used
to change the state in more complicated situations - e.g., when advancing
state on a single insn is not enough.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD (void)
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
This hook controls better choosing an insn from the ready insn queue
for the @acronym{DFA}-based insn scheduler. Usually the scheduler
chooses the first insn from the queue. If the hook returns a positive
@@ -7329,8 +7805,10 @@ schedules to choose the best one.
The default is no multipass scheduling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD (rtx_insn *@var{insn}, int @var{ready_index})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD
This hook controls what insns from the ready insn queue will be
considered for the multipass insn scheduling. If the hook returns
@@ -7345,35 +7823,49 @@ to allow backends make correct judgements.
The default is that any ready insns can be chosen to be issued.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void *@var{data}, signed char *@var{ready_try}, int @var{n_ready}, bool @var{first_cycle_insn_p})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN
This hook prepares the target backend for a new round of multipass
scheduling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void *@var{data}, signed char *@var{ready_try}, int @var{n_ready}, rtx_insn *@var{insn}, const void *@var{prev_data})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE
This hook is called when multipass scheduling evaluates instruction INSN.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK (const void *@var{data}, signed char *@var{ready_try}, int @var{n_ready})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK
This is called when multipass scheduling backtracks from evaluation of
an instruction.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void *@var{data})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END
This hook notifies the target about the result of the concluded current
round of multipass scheduling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void *@var{data})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT
This hook initializes target-specific data used in multipass scheduling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void *@var{data})
+@c hook-start:TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI
This hook finalizes target-specific data used in multipass scheduling.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_DFA_NEW_CYCLE (FILE *@var{dump}, int @var{verbose}, rtx_insn *@var{insn}, int @var{last_clock}, int @var{clock}, int *@var{sort_p})
+@c hook-start:TARGET_SCHED_DFA_NEW_CYCLE
This hook is called by the insn scheduler before issuing @var{insn}
on cycle @var{clock}. If the hook returns nonzero,
@var{insn} is not issued on this processor cycle. Instead,
@@ -7385,8 +7877,10 @@ verbosity level to use for debugging output.
processor cycle on which the previous insn has been issued,
and the current processor cycle.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep *@var{_dep}, int @var{cost}, int @var{distance})
+@c hook-start:TARGET_SCHED_IS_COSTLY_DEPENDENCE
This hook is used to define which dependences are considered costly by
the target, so costly that it is not advisable to schedule the insns that
are involved in the dependence too close to one another. The parameters
@@ -7406,36 +7900,50 @@ important. In such targets one may want to allow issuing dependent insns
closer to one another---i.e., closer than the dependence distance; however,
not in cases of ``costly dependences'', which this hooks allows to define.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_H_I_D_EXTENDED (void)
+@c hook-start:TARGET_SCHED_H_I_D_EXTENDED
This hook is called by the insn scheduler after emitting a new instruction to
the instruction stream. The hook notifies a target backend to extend its
per instruction data structures.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {void *} TARGET_SCHED_ALLOC_SCHED_CONTEXT (void)
+@c hook-start:TARGET_SCHED_ALLOC_SCHED_CONTEXT
Return a pointer to a store large enough to hold target scheduling context.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_INIT_SCHED_CONTEXT (void *@var{tc}, bool @var{clean_p})
+@c hook-start:TARGET_SCHED_INIT_SCHED_CONTEXT
Initialize store pointed to by @var{tc} to hold target scheduling context.
It @var{clean_p} is true then initialize @var{tc} as if scheduler is at the
beginning of the block. Otherwise, copy the current context into @var{tc}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_CONTEXT (void *@var{tc})
+@c hook-start:TARGET_SCHED_SET_SCHED_CONTEXT
Copy target scheduling context pointed to by @var{tc} to the current context.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *@var{tc})
+@c hook-start:TARGET_SCHED_CLEAR_SCHED_CONTEXT
Deallocate internal data in target scheduling context pointed to by @var{tc}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FREE_SCHED_CONTEXT (void *@var{tc})
+@c hook-start:TARGET_SCHED_FREE_SCHED_CONTEXT
Deallocate a store for target scheduling context pointed to by @var{tc}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_SPECULATE_INSN (rtx_insn *@var{insn}, unsigned int @var{dep_status}, rtx *@var{new_pat})
+@c hook-start:TARGET_SCHED_SPECULATE_INSN
This hook is called by the insn scheduler when @var{insn} has only
speculative dependencies and therefore can be scheduled speculatively.
The hook is used to check if the pattern of @var{insn} has a speculative
@@ -7445,14 +7953,18 @@ or @minus{}1, if it doesn't. @var{request} describes the type of requested
speculation. If the return value equals 1 then @var{new_pat} is assigned
the generated speculative pattern.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int @var{dep_status})
+@c hook-start:TARGET_SCHED_NEEDS_BLOCK_P
This hook is called by the insn scheduler during generation of recovery code
for @var{insn}. It should return @code{true}, if the corresponding check
instruction should branch to recovery code, or @code{false} otherwise.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *@var{insn}, rtx_insn *@var{label}, unsigned int @var{ds})
+@c hook-start:TARGET_SCHED_GEN_SPEC_CHECK
This hook is called by the insn scheduler to generate a pattern for recovery
check instruction. If @var{mutate_p} is zero, then @var{insn} is a
speculative instruction for which the check should be generated.
@@ -7462,23 +7974,29 @@ recovery code (a simple check). If @var{mutate_p} is nonzero, then
a pattern for a branchy check corresponding to a simple check denoted by
@var{insn} should be generated. In this case @var{label} can't be null.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def *@var{spec_info})
+@c hook-start:TARGET_SCHED_SET_SCHED_FLAGS
This hook is used by the insn scheduler to find out what features should be
enabled/used.
The structure *@var{spec_info} should be filled in by the target.
The structure describes speculation types that can be used in the scheduler.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_CAN_SPECULATE_INSN (rtx_insn *@var{insn})
+@c hook-start:TARGET_SCHED_CAN_SPECULATE_INSN
Some instructions should never be speculated by the schedulers, usually
because the instruction is too expensive to get this wrong. Often such
instructions have long latency, and often they are not fully modeled in the
pipeline descriptions. This hook should return @code{false} if @var{insn}
should not be speculated.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_SMS_RES_MII (struct ddg *@var{g})
+@c hook-start:TARGET_SCHED_SMS_RES_MII
This hook is called by the swing modulo scheduler to calculate a
resource-based lower bound which is based on the resources available in
the machine and the resources required by each instruction. The target
@@ -7486,29 +8004,39 @@ backend can use @var{g} to calculate such bound. A very simple lower
bound will be used in case this hook is not implemented: the total number
of instructions divided by the issue rate.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SCHED_DISPATCH (rtx_insn *@var{insn}, int @var{x})
+@c hook-start:TARGET_SCHED_DISPATCH
This hook is called by Haifa Scheduler. It returns true if dispatch scheduling
is supported in hardware and the condition specified in the parameter is true.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_DISPATCH_DO (rtx_insn *@var{insn}, int @var{x})
+@c hook-start:TARGET_SCHED_DISPATCH_DO
This hook is called by Haifa Scheduler. It performs the operation specified
in its second parameter.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_SCHED_EXPOSED_PIPELINE
+@c hook-start:TARGET_SCHED_EXPOSED_PIPELINE
True if the processor has an exposed pipeline, which means that not just
the order of instructions is important for correctness when scheduling, but
also the latencies of operations.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int @var{opc}, machine_mode @var{mode})
+@c hook-start:TARGET_SCHED_REASSOCIATION_WIDTH
This hook is called by tree reassociator to determine a level of
parallelism required in output calculations chain.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *@var{insn}, int @var{max_pri}, int *@var{fusion_pri}, int *@var{pri})
+@c hook-start:TARGET_SCHED_FUSION_PRIORITY
This hook is called by scheduling fusion pass. It calculates fusion
priorities for each instruction passed in by parameter. The priorities
are returned via pointer parameters.
@@ -7583,11 +8111,14 @@ work, it is only enabled by default when peephole2 is in effect.
This is firstly introduced on ARM/AArch64 targets, please refer to
the hook implementation for how different fusion types are supported.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_EXPAND_DIVMOD_LIBFUNC (rtx @var{libfunc}, machine_mode @var{mode}, rtx @var{op0}, rtx @var{op1}, rtx *@var{quot}, rtx *@var{rem})
+@c hook-start:TARGET_EXPAND_DIVMOD_LIBFUNC
Define this hook for enabling divmod transform if the port does not have
hardware divmod insn but defines target-specific divmod libfuncs.
@end deftypefn
+@c hook-end
@node Sections
@section Dividing the Output into Sections (Texts, Data, @dots{})
@@ -7771,6 +8302,7 @@ This macro is irrelevant if there is no separate readonly data section.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_INIT_SECTIONS (void)
+@c hook-start:TARGET_ASM_INIT_SECTIONS
Define this hook if you need to do something special to set up the
@file{varasm.cc} sections, or if your target has some special sections
of its own that you need to create.
@@ -7779,8 +8311,10 @@ GCC calls this hook after processing the command line, but before writing
any assembly code, and before calling any of the section-returning hooks
described below.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_ASM_RELOC_RW_MASK (void)
+@c hook-start:TARGET_ASM_RELOC_RW_MASK
Return a mask describing how relocations should be treated when
selecting sections. Bit 1 should be set if global relocations
should be placed in a read-write section; bit 0 should be set if
@@ -7791,16 +8325,20 @@ is in effect, and 0 otherwise. The hook is typically redefined
when the target cannot support (some kinds of) dynamic relocations
in read-only sections even in executables.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC (void)
+@c hook-start:TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC
Return true to generate ADDR_DIF_VEC table
or false to generate ADDR_VEC table for jumps in case of -fPIC.
The default version of this function returns true if flag_pic
equals true and false otherwise
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_SECTION (tree @var{exp}, int @var{reloc}, unsigned HOST_WIDE_INT @var{align})
+@c hook-start:TARGET_ASM_SELECT_SECTION
Return the section into which @var{exp} should be placed. You can
assume that @var{exp} is either a @code{VAR_DECL} node or a constant of
some sort. @var{reloc} indicates whether the initial value of @var{exp}
@@ -7813,6 +8351,7 @@ variables in @code{readonly_data_section}.
See also @var{USE_SELECT_SECTION_FOR_FUNCTIONS}.
@end deftypefn
+@c hook-end
@defmac USE_SELECT_SECTION_FOR_FUNCTIONS
Define this macro if you wish TARGET_ASM_SELECT_SECTION to be called
@@ -7824,6 +8363,7 @@ it is unlikely to be called.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_UNIQUE_SECTION (tree @var{decl}, int @var{reloc})
+@c hook-start:TARGET_ASM_UNIQUE_SECTION
Build up a unique section name, expressed as a @code{STRING_CST} node,
and assign it to @samp{DECL_SECTION_NAME (@var{decl})}.
As with @code{TARGET_ASM_SELECT_SECTION}, @var{reloc} indicates whether
@@ -7834,8 +8374,10 @@ ELF section name that would normally be used for the symbol. For
example, the function @code{foo} would be placed in @code{.text.foo}.
Whatever the actual target object format, this is often good enough.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {section *} TARGET_ASM_FUNCTION_RODATA_SECTION (tree @var{decl}, bool @var{relocatable})
+@c hook-start:TARGET_ASM_FUNCTION_RODATA_SECTION
Return the readonly data or reloc readonly data section associated with
@samp{DECL_SECTION_NAME (@var{decl})}. @var{relocatable} selects the latter
over the former.
@@ -7844,19 +8386,25 @@ the function's section is @code{.gnu.linkonce.t.name}, @code{.rodata.name}
or @code{.data.rel.ro.name} if function is in @code{.text.name}, and
the normal readonly-data or reloc readonly data section otherwise.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_ASM_MERGEABLE_RODATA_PREFIX
+@c hook-start:TARGET_ASM_MERGEABLE_RODATA_PREFIX
Usually, the compiler uses the prefix @code{".rodata"} to construct
section names for mergeable constant data. Define this macro to override
the string if a different section name should be used.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} {section *} TARGET_ASM_TM_CLONE_TABLE_SECTION (void)
+@c hook-start:TARGET_ASM_TM_CLONE_TABLE_SECTION
Return the section that should be used for transactional memory clone
tables.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {section *} TARGET_ASM_SELECT_RTX_SECTION (machine_mode @var{mode}, rtx @var{x}, unsigned HOST_WIDE_INT @var{align})
+@c hook-start:TARGET_ASM_SELECT_RTX_SECTION
Return the section into which a constant @var{x}, of mode @var{mode},
should be placed. You can assume that @var{x} is some kind of
constant in RTL@. The argument @var{mode} is redundant except in the
@@ -7867,8 +8415,10 @@ The default version of this function takes care of putting symbolic
constants in @code{flag_pic} mode in @code{data_section} and everything
else in @code{readonly_data_section}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree @var{decl}, tree @var{id})
+@c hook-start:TARGET_MANGLE_DECL_ASSEMBLER_NAME
Define this hook if you need to postprocess the assembler name generated
by target-independent code. The @var{id} provided to this hook will be
the computed name (e.g., the macro @code{DECL_NAME} of the @var{decl} in C,
@@ -7877,8 +8427,10 @@ hook is an @code{IDENTIFIER_NODE} for the appropriate mangled name on
your target system. The default implementation of this hook just
returns the @var{id} provided.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ENCODE_SECTION_INFO (tree @var{decl}, rtx @var{rtl}, int @var{new_decl_p})
+@c hook-start:TARGET_ENCODE_SECTION_INFO
Define this hook if references to a symbol or a constant must be
treated differently depending on something about the variable or
function named by the symbol (such as what section it is in).
@@ -7915,31 +8467,41 @@ in @file{varasm.cc}, sets a number of commonly-useful bits in
@code{SYMBOL_REF_FLAGS}. Check whether the default does what you need
before overriding it.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_STRIP_NAME_ENCODING (const char *@var{name})
+@c hook-start:TARGET_STRIP_NAME_ENCODING
Decode @var{name} and return the real name part, sans
the characters that @code{TARGET_ENCODE_SECTION_INFO}
may have added.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_IN_SMALL_DATA_P (const_tree @var{exp})
+@c hook-start:TARGET_IN_SMALL_DATA_P
Returns true if @var{exp} should be placed into a ``small data'' section.
The default version of this hook always returns false.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_HAVE_SRODATA_SECTION
+@c hook-start:TARGET_HAVE_SRODATA_SECTION
Contains the value true if the target places read-only
``small data'' into a separate section. The default value is false.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PROFILE_BEFORE_PROLOGUE (void)
+@c hook-start:TARGET_PROFILE_BEFORE_PROLOGUE
It returns true if target wants profile code emitted before prologue.
The default version of this hook use the target macro
@code{PROFILE_BEFORE_PROLOGUE}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_BINDS_LOCAL_P (const_tree @var{exp})
+@c hook-start:TARGET_BINDS_LOCAL_P
Returns true if @var{exp} names an object for which name resolution
rules must resolve to the current ``module'' (dynamic shared library
or executable image).
@@ -7948,11 +8510,14 @@ The default version of this hook implements the name resolution rules
for ELF, which has a looser model of global name binding than other
currently supported object file formats.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_HAVE_TLS
+@c hook-start:TARGET_HAVE_TLS
Contains the value true if the target supports thread-local storage.
The default value is false.
@end deftypevr
+@c hook-end
@node PIC
@@ -8033,6 +8598,7 @@ This describes the overall framework of an assembly file.
@findex default_file_start
@deftypefn {Target Hook} void TARGET_ASM_FILE_START (void)
+@c hook-start:TARGET_ASM_FILE_START
Output to @code{asm_out_file} any text which the assembler expects to
find at the beginning of a file. The default behavior is controlled
by two flags, documented below. Unless your target's assembler is
@@ -8040,8 +8606,10 @@ quite unusual, if you override the default, you should call
@code{default_file_start} at some point in your target hook. This
lets other target files rely on these variables.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_ASM_FILE_START_APP_OFF
+@c hook-start:TARGET_ASM_FILE_START_APP_OFF
If this flag is true, the text of the macro @code{ASM_APP_OFF} will be
printed as the very first line in the assembly file, unless
@option{-fverbose-asm} is in effect. (If that macro has been defined
@@ -8054,18 +8622,23 @@ The default is false. You should not set it to true unless you have
verified that your port does not generate any extra whitespace or
comments that will cause GAS to issue errors in NO_APP mode.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_ASM_FILE_START_FILE_DIRECTIVE
+@c hook-start:TARGET_ASM_FILE_START_FILE_DIRECTIVE
If this flag is true, @code{output_file_directive} will be called
for the primary source file, immediately after printing
@code{ASM_APP_OFF} (if that is enabled). Most ELF assemblers expect
this to be done. The default is false.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FILE_END (void)
+@c hook-start:TARGET_ASM_FILE_END
Output to @code{asm_out_file} any text which the assembler expects
to find at the end of a file. The default is to output nothing.
@end deftypefn
+@c hook-end
@deftypefun void file_end_indicate_exec_stack ()
Some systems use a common convention, the @samp{.note.GNU-stack}
@@ -8077,24 +8650,30 @@ this function.
@end deftypefun
@deftypefn {Target Hook} void TARGET_ASM_LTO_START (void)
+@c hook-start:TARGET_ASM_LTO_START
Output to @code{asm_out_file} any text which the assembler expects
to find at the start of an LTO section. The default is to output
nothing.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_LTO_END (void)
+@c hook-start:TARGET_ASM_LTO_END
Output to @code{asm_out_file} any text which the assembler expects
to find at the end of an LTO section. The default is to output
nothing.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_CODE_END (void)
+@c hook-start:TARGET_ASM_CODE_END
Output to @code{asm_out_file} any text which is needed before emitting
unwind info and debug info at the end of a file. Some targets emit
here PIC setup thunks that cannot be emitted at the end of file,
because they couldn't have unwind info then. The default is to output
nothing.
@end deftypefn
+@c hook-end
@defmac ASM_COMMENT_START
A C string constant describing how to begin a comment in the target
@@ -8127,19 +8706,23 @@ for the file format in use is appropriate.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *@var{file}, const char *@var{name})
+@c hook-start:TARGET_ASM_OUTPUT_SOURCE_FILENAME
Output DWARF debugging information which indicates that filename
@var{name} is the current source file to the stdio stream @var{file}.
This target hook need not be defined if the standard form of output
for the file format in use is appropriate.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_IDENT (const char *@var{name})
+@c hook-start:TARGET_ASM_OUTPUT_IDENT
Output a string based on @var{name}, suitable for the @samp{#ident}
directive, or the equivalent directive or pragma in non-C-family languages.
If this hook is not defined, nothing is output for the @samp{#ident}
directive.
@end deftypefn
+@c hook-end
@defmac OUTPUT_QUOTED_STRING (@var{stream}, @var{string})
A C statement to output the string @var{string} to the stdio stream
@@ -8150,14 +8733,17 @@ of the filename using this macro.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_NAMED_SECTION (const char *@var{name}, unsigned int @var{flags}, tree @var{decl})
+@c hook-start:TARGET_ASM_NAMED_SECTION
Output assembly directives to switch to section @var{name}. The section
should have attributes as specified by @var{flags}, which is a bit mask
of the @code{SECTION_*} flags defined in @file{output.h}. If @var{decl}
is non-NULL, it is the @code{VAR_DECL} or @code{FUNCTION_DECL} with which
this section is associated.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_ELF_FLAGS_NUMERIC (unsigned int @var{flags}, unsigned int *@var{num})
+@c hook-start:TARGET_ASM_ELF_FLAGS_NUMERIC
This hook can be used to encode ELF section flags for which no letter
code has been defined in the assembler. It is called by
@code{default_asm_named_section} whenever the section flags need to be
@@ -8168,8 +8754,10 @@ normal sequence of letter codes. If the hook is not defined, or if it
returns false, then @var{num} is ignored and the traditional letter sequence
is emitted.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {section *} TARGET_ASM_FUNCTION_SECTION (tree @var{decl}, enum node_frequency @var{freq}, bool @var{startup}, bool @var{exit})
+@c hook-start:TARGET_ASM_FUNCTION_SECTION
Return preferred text (sub)section for function @var{decl}.
Main purpose of this function is to separate cold, normal and hot
functions. @var{startup} is true when function is known to be used only
@@ -8178,28 +8766,36 @@ at startup (from static constructors or it is @code{main()}).
(from static destructors).
Return NULL if function should go to default text section.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE *@var{file}, tree @var{decl}, bool @var{new_is_cold})
+@c hook-start:TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS
Used by the target to emit any assembler directives or additional
labels needed when a function is partitioned between different
sections. Output should be written to @var{file}. The function
decl is available as @var{decl} and the new section is `cold' if
@var{new_is_cold} is @code{true}.
@end deftypefn
+@c hook-end
@deftypevr {Common Target Hook} bool TARGET_HAVE_NAMED_SECTIONS
+@c hook-start:TARGET_HAVE_NAMED_SECTIONS
+@c hook-end
This flag is true if the target supports @code{TARGET_ASM_NAMED_SECTION}.
It must not be modified by command-line option processing.
@end deftypevr
@anchor{TARGET_HAVE_SWITCHABLE_BSS_SECTIONS}
@deftypevr {Target Hook} bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
+@c hook-start:TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
This flag is true if we can create zeroed data by switching to a BSS
section and then using @code{ASM_OUTPUT_SKIP} to allocate the space.
This is true on most ELF targets.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} {unsigned int} TARGET_SECTION_TYPE_FLAGS (tree @var{decl}, const char *@var{name}, int @var{reloc})
+@c hook-start:TARGET_SECTION_TYPE_FLAGS
Choose a set of section attributes for use by @code{TARGET_ASM_NAMED_SECTION}
based on a variable or function decl, a section name, and whether or not the
declaration's initializer may contain runtime relocations. @var{decl} may be
@@ -8210,8 +8806,10 @@ read-only vs read-write data, and @code{flag_pic}. You should only
need to override this if your target has special flags that might be
set via @code{__attribute__}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_RECORD_GCC_SWITCHES (const char *@var{})
+@c hook-start:TARGET_ASM_RECORD_GCC_SWITCHES
Provides the target with the ability to record the gcc command line
switches provided as argument.
@@ -8222,12 +8820,15 @@ section in the assembler output file. The name of the new section is
provided by the @code{TARGET_ASM_RECORD_GCC_SWITCHES_SECTION} target
hook.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
+@c hook-start:TARGET_ASM_RECORD_GCC_SWITCHES_SECTION
This is the name of the section that will be created by the example
ELF implementation of the @code{TARGET_ASM_RECORD_GCC_SWITCHES} target
hook.
@end deftypevr
+@c hook-end
@need 2000
@node Data Output
@@ -8235,20 +8836,7 @@ hook.
@deftypevr {Target Hook} {const char *} TARGET_ASM_BYTE_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PSI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PDI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PTI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PSI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PDI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PTI_OP
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP
+@c hook-start:TARGET_ASM_BYTE_OP
These hooks specify assembly directives for creating certain kinds
of integer object. The @code{TARGET_ASM_BYTE_OP} directive creates a
byte-sized object, the @code{TARGET_ASM_ALIGNED_HI_OP} one creates an
@@ -8259,8 +8847,10 @@ The compiler will print these strings at the start of a new line,
followed immediately by the object's initial value. In most cases,
the string should contain a tab, a pseudo-op, and then another tab.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_INTEGER (rtx @var{x}, unsigned int @var{size}, int @var{aligned_p})
+@c hook-start:TARGET_ASM_INTEGER
The @code{assemble_integer} function uses this hook to output an
integer object. @var{x} is the object's value, @var{size} is its size
in bytes and @var{aligned_p} indicates whether it is aligned. The
@@ -8272,13 +8862,17 @@ The default implementation of this hook will use the
@code{TARGET_ASM_BYTE_OP} family of strings, returning @code{false}
when the relevant string is @code{NULL}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_DECL_END (void)
+@c hook-start:TARGET_ASM_DECL_END
Define this hook if the target assembler requires a special marker to
terminate an initialized variable declaration.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *@var{file}, rtx @var{x})
+@c hook-start:TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA
A target hook to recognize @var{rtx} patterns that @code{output_addr_const}
can't deal with, and output assembly code to @var{file} corresponding to
the pattern @var{x}. This may be used to allow machine-dependent
@@ -8289,6 +8883,7 @@ so that a standard error message is printed. If it prints an error message
itself, by calling, for example, @code{output_operand_lossage}, it may just
return @code{true}.
@end deftypefn
+@c hook-end
@defmac ASM_OUTPUT_ASCII (@var{stream}, @var{ptr}, @var{len})
A C statement to output to the stdio stream @var{stream} an assembler
@@ -8379,10 +8974,12 @@ the character @samp{;} is treated as a logical line separator.
@deftypevr {Target Hook} {const char *} TARGET_ASM_OPEN_PAREN
@deftypevrx {Target Hook} {const char *} TARGET_ASM_CLOSE_PAREN
+@c hook-start:TARGET_ASM_OPEN_PAREN
These target hooks are C string constants, describing the syntax in the
assembler for grouping arithmetic expressions. If not overridden, they
default to normal parentheses, which is correct for most assemblers.
@end deftypevr
+@c hook-end
These macros are provided by @file{real.h} for writing the definitions
of @code{ASM_OUTPUT_DOUBLE} and the like:
@@ -8700,6 +9297,7 @@ You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} and/or
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *@var{file}, const char *@var{name}, const_tree @var{expr}, HOST_WIDE_INT @var{size})
+@c hook-start:TARGET_ASM_DECLARE_CONSTANT_NAME
A target hook to output to the stdio stream @var{file} any text necessary
for declaring the name @var{name} of a constant which is being defined. This
target hook is responsible for outputting the label definition (perhaps using
@@ -8712,6 +9310,7 @@ usual manner as a label (by means of @code{assemble_label}).
You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} in this target hook.
@end deftypefn
+@c hook-end
@defmac ASM_DECLARE_REGISTER_GLOBAL (@var{stream}, @var{decl}, @var{regno}, @var{name})
A C statement (sans semicolon) to output to the stdio stream
@@ -8737,6 +9336,7 @@ You may wish to use @code{ASM_OUTPUT_SIZE_DIRECTIVE} and/or
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_GLOBALIZE_LABEL (FILE *@var{stream}, const char *@var{name})
+@c hook-start:TARGET_ASM_GLOBALIZE_LABEL
This target hook is a function to output to the stdio stream
@var{stream} some commands that will make the label @var{name} global;
that is, available for reference from other files.
@@ -8744,21 +9344,26 @@ that is, available for reference from other files.
The default implementation relies on a proper definition of
@code{GLOBAL_ASM_OP}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *@var{stream}, tree @var{decl})
+@c hook-start:TARGET_ASM_GLOBALIZE_DECL_NAME
This target hook is a function to output to the stdio stream
@var{stream} some commands that will make the name associated with @var{decl}
global; that is, available for reference from other files.
The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL target hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *@var{stream}, const char *@var{name}, const_tree @var{decl})
+@c hook-start:TARGET_ASM_ASSEMBLE_UNDEFINED_DECL
This target hook is a function to output to the stdio stream
@var{stream} some commands that will declare the name associated with
@var{decl} which is not defined in the current translation unit. Most
assemblers do not require anything to be output in this case.
@end deftypefn
+@c hook-end
@defmac ASM_WEAKEN_LABEL (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream
@@ -8830,10 +9435,12 @@ be emitted as one-only.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_ASSEMBLE_VISIBILITY (tree @var{decl}, int @var{visibility})
+@c hook-start:TARGET_ASM_ASSEMBLE_VISIBILITY
This target hook is a function to output to @var{asm_out_file} some
commands that will make the symbol(s) associated with @var{decl} have
hidden, protected or internal visibility as specified by @var{visibility}.
@end deftypefn
+@c hook-end
@defmac TARGET_WEAK_NOT_IN_ARCHIVE_TOC
A C expression that evaluates to true if the target's linker expects
@@ -8866,16 +9473,20 @@ The GNU assembler and most Unix assemblers don't require anything.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_EXTERNAL_LIBCALL (rtx @var{symref})
+@c hook-start:TARGET_ASM_EXTERNAL_LIBCALL
This target hook is a function to output to @var{asm_out_file} an assembler
pseudo-op to declare a library function name external. The name of the
library function is given by @var{symref}, which is a @code{symbol_ref}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_MARK_DECL_PRESERVED (const char *@var{symbol})
+@c hook-start:TARGET_ASM_MARK_DECL_PRESERVED
This target hook is a function to output to @var{asm_out_file} an assembler
directive to annotate @var{symbol} as used. The Darwin target uses the
.no_dead_code_strip directive.
@end deftypefn
+@c hook-end
@defmac ASM_OUTPUT_LABELREF (@var{stream}, @var{name})
A C statement (sans semicolon) to output to the stdio stream
@@ -8886,12 +9497,14 @@ systems. This macro is used in @code{assemble_name}.
@end defmac
@deftypefn {Target Hook} tree TARGET_MANGLE_ASSEMBLER_NAME (const char *@var{name})
+@c hook-start:TARGET_MANGLE_ASSEMBLER_NAME
Given a symbol @var{name}, perform same mangling as @code{varasm.cc}'s
@code{assemble_name}, but in memory rather than to a file stream, returning
result as an @code{IDENTIFIER_NODE}. Required for correct LTO symtabs. The
default implementation calls the @code{TARGET_STRIP_NAME_ENCODING} hook and
then prepends the @code{USER_LABEL_PREFIX}, if any.
@end deftypefn
+@c hook-end
@defmac ASM_OUTPUT_SYMBOL_REF (@var{stream}, @var{sym})
A C statement (sans semicolon) to output a reference to
@@ -8912,6 +9525,7 @@ being taken.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_INTERNAL_LABEL (FILE *@var{stream}, const char *@var{prefix}, unsigned long @var{labelno})
+@c hook-start:TARGET_ASM_INTERNAL_LABEL
A function to output to the stdio stream @var{stream} a label whose
name is made from the string @var{prefix} and the number @var{labelno}.
@@ -8927,6 +9541,7 @@ convention your system uses, and follow it.
The default version of this function utilizes @code{ASM_GENERATE_INTERNAL_LABEL}.
@end deftypefn
+@c hook-end
@defmac ASM_OUTPUT_DEBUG_LABEL (@var{stream}, @var{prefix}, @var{num})
A C statement to output to the stdio stream @var{stream} a debug info
@@ -9237,10 +9852,12 @@ encountering an @code{init_priority} attribute.
@end defmac
@deftypevr {Target Hook} bool TARGET_HAVE_CTORS_DTORS
+@c hook-start:TARGET_HAVE_CTORS_DTORS
This value is true if the target supports some ``native'' method of
collecting constructors and destructors to be run at startup and exit.
It is false if we must use @command{collect2}.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_DTORS_FROM_CXA_ATEXIT
This value is true if the target wants destructors to be queued to be
@@ -9251,6 +9868,7 @@ It is false the method implied by @code{have_ctors_dtors} is used.
@end deftypevr
@deftypefn {Target Hook} void TARGET_ASM_CONSTRUCTOR (rtx @var{symbol}, int @var{priority})
+@c hook-start:TARGET_ASM_CONSTRUCTOR
If defined, a function that outputs assembler code to arrange to call
the function referenced by @var{symbol} at initialization time.
@@ -9264,11 +9882,14 @@ be chosen if (1) the target supports arbitrary section names, (2) the
target defines @code{CTORS_SECTION_ASM_OP}, or (3) @code{USE_COLLECT2}
is not defined.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_DESTRUCTOR (rtx @var{symbol}, int @var{priority})
+@c hook-start:TARGET_ASM_DESTRUCTOR
This is like @code{TARGET_ASM_CONSTRUCTOR} but used for termination
functions rather than initialization functions.
@end deftypefn
+@c hook-end
If @code{TARGET_HAVE_CTORS_DTORS} is true, the initialization routine
generated for the generated object file will have static linkage.
@@ -9415,6 +10036,7 @@ If this macro is not defined, it is equivalent to a null statement.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *@var{file}, rtx_insn *@var{insn}, rtx *@var{opvec}, int @var{noperands})
+@c hook-start:TARGET_ASM_FINAL_POSTSCAN_INSN
If defined, this target hook is a function which is executed just after the
output of assembler code for @var{insn}, to change the mode of the assembler
if necessary.
@@ -9426,6 +10048,7 @@ The contents of this vector are what was used to convert the insn
template into assembler code, so you can change the assembler mode
by checking the contents of the vector.
@end deftypefn
+@c hook-end
@defmac PRINT_OPERAND (@var{stream}, @var{x}, @var{code})
A C compound statement to output to stdio stream @var{stream} the
@@ -9635,6 +10258,7 @@ the jump-table.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_POST_CFI_STARTPROC (FILE *@var{}, @var{tree})
+@c hook-start:TARGET_ASM_POST_CFI_STARTPROC
This target hook is used to emit assembly strings required by the target
after the .cfi_startproc directive. The first argument is the file stream to
write the strings to and the second argument is the function's declaration. The
@@ -9642,8 +10266,10 @@ expected use is to add more .cfi_* directives.
The default is to not output any assembly strings.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *@var{stream}, tree @var{decl}, int @var{for_eh}, int @var{empty})
+@c hook-start:TARGET_ASM_EMIT_UNWIND_LABEL
This target hook emits a label at the beginning of each FDE@. It
should be defined on targets where FDEs need special labels, and it
should write the appropriate label, for the FDE associated with the
@@ -9654,40 +10280,52 @@ true if this is a placeholder label for an omitted FDE@.
The default is that FDEs are not given nonlocal labels.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *@var{stream})
+@c hook-start:TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL
This target hook emits a label at the beginning of the exception table.
It should be defined on targets where it is desirable for the table
to be broken up according to function.
The default is that no label is emitted.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx @var{personality})
+@c hook-start:TARGET_ASM_EMIT_EXCEPT_PERSONALITY
If the target implements @code{TARGET_ASM_UNWIND_EMIT}, this hook may be
used to emit a directive to install a personality hook into the unwind
info. This hook should not be used if dwarf2 unwind info is used.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ASM_UNWIND_EMIT (FILE *@var{stream}, rtx_insn *@var{insn})
+@c hook-start:TARGET_ASM_UNWIND_EMIT
This target hook emits assembly directives required to unwind the
given instruction. This is only used when @code{TARGET_EXCEPT_UNWIND_INFO}
returns @code{UI_TARGET}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT (rtx @var{origsymbol}, bool @var{pubvis})
+@c hook-start:TARGET_ASM_MAKE_EH_SYMBOL_INDIRECT
If necessary, modify personality and LSDA references to handle indirection.
The original symbol is in @code{origsymbol} and if @code{pubvis} is true
the symbol is visible outside the TU.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
+@c hook-start:TARGET_ASM_UNWIND_EMIT_BEFORE_INSN
True if the @code{TARGET_ASM_UNWIND_EMIT} hook should be called before
the assembly for @var{insn} has been emitted, false if the hook should
be called afterward.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_SHOULD_RESTORE_CFA_STATE (void)
+@c hook-start:TARGET_ASM_SHOULD_RESTORE_CFA_STATE
For DWARF-based unwind frames, two CFI instructions provide for save and
restore of register state. GCC maintains the current frame address (CFA)
separately from the register bank but the unwinder in libgcc preserves this
@@ -9696,6 +10334,7 @@ the unwind frames). This hook allows the target to specify that the CFA data
is not saved/restored along with the registers by the target unwinder so that
suitable additional instructions should be emitted to restore it.
@end deftypefn
+@c hook-end
@node Exception Region Output
@subsection Assembler Commands for Exception Regions
@@ -9747,6 +10386,8 @@ GCC will provide a default definition of 1.
@end defmac
@deftypefn {Common Target Hook} {enum unwind_info_type} TARGET_EXCEPT_UNWIND_INFO (struct gcc_options *@var{opts})
+@c hook-start:TARGET_EXCEPT_UNWIND_INFO
+@c hook-end
This hook defines the mechanism that will be used for exception handling
by the target. If the target has ABI specified unwind tables, the hook
should return @code{UI_TARGET}. If the target is to use the
@@ -9773,6 +10414,8 @@ must define this hook so that @var{opts} is used correctly.
@end deftypefn
@deftypevr {Common Target Hook} bool TARGET_UNWIND_TABLES_DEFAULT
+@c hook-start:TARGET_UNWIND_TABLES_DEFAULT
+@c hook-end
This variable should be set to @code{true} if the target ABI requires unwinding
tables even when exceptions are not used. It must not be modified by
command-line option processing.
@@ -9802,13 +10445,16 @@ the target supports DWARF 2 frame unwind information.
@end defmac
@deftypevr {Target Hook} bool TARGET_TERMINATE_DW2_EH_FRAME_INFO
+@c hook-start:TARGET_TERMINATE_DW2_EH_FRAME_INFO
Contains the value true if the target should add a zero word onto the
end of a Dwarf-2 frame info section when used for exception handling.
Default value is false if @code{EH_FRAME_SECTION_NAME} is defined, and
true otherwise.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_DWARF_REGISTER_SPAN (rtx @var{reg})
+@c hook-start:TARGET_DWARF_REGISTER_SPAN
Given a register, this hook should return a parallel of registers to
represent where to find the register pieces. Define this hook if the
register and its mode are represented in Dwarf in non-contiguous
@@ -9816,15 +10462,19 @@ locations, or if the register should be represented in more than one
register in Dwarf. Otherwise, this hook should return @code{NULL_RTX}.
If not defined, the default is to return @code{NULL_RTX}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_DWARF_FRAME_REG_MODE (int @var{regno})
+@c hook-start:TARGET_DWARF_FRAME_REG_MODE
Given a register, this hook should return the mode which the
corresponding Dwarf frame register should have. This is normally
used to return a smaller mode than the raw mode to prevent call
clobbered parts of a register altering the frame register size
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree @var{address})
+@c hook-start:TARGET_INIT_DWARF_REG_SIZES_EXTRA
If some registers are represented in Dwarf-2 unwind information in
multiple pieces, define this hook to fill in information about the
sizes of those pieces in the table used by the unwinder at runtime.
@@ -9832,20 +10482,25 @@ It will be called by @code{expand_builtin_init_dwarf_reg_sizes} after
filling in a single size corresponding to each hard register;
@var{address} is the address of the table.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ASM_TTYPE (rtx @var{sym})
+@c hook-start:TARGET_ASM_TTYPE
This hook is used to output a reference from a frame unwinding table to
the type_info object identified by @var{sym}. It should return @code{true}
if the reference was output. Returning @code{false} will cause the
reference to be output using the normal Dwarf2 routines.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_ARM_EABI_UNWINDER
+@c hook-start:TARGET_ARM_EABI_UNWINDER
This flag should be set to @code{true} on targets that use an ARM EABI
based unwinding library, and @code{false} on other targets. This effects
the format of unwinding tables, and how the unwinder in entered after
running a cleanup. The default is @code{false}.
@end deftypevr
+@c hook-end
@node Alignment Output
@subsection Assembler Commands for Alignment
@@ -10026,6 +10681,14 @@ Here are macros for DWARF output.
Define this macro if GCC should produce dwarf version 2 format
debugging output in response to the @option{-g} option.
+@deftypefn {Target Hook} int TARGET_DWARF_CALLING_CONVENTION (const_tree @var{function})
+@c hook-start:TARGET_DWARF_CALLING_CONVENTION
+Define this to enable the dwarf attribute @code{DW_AT_calling_convention} to
+be emitted for each function. Instead of an integer return the enum
+value for the @code{DW_CC_} tag.
+@end deftypefn
+@c hook-end
+
To support optional call frame debugging information, you must also
define @code{INCOMING_RETURN_ADDR_RTX} and either set
@code{RTX_FRAME_RELATED_P} on the prologue insns if you use RTL for the
@@ -10048,6 +10711,7 @@ how you define @code{DWARF2_FRAME_INFO}.
@end defmac
@deftypefn {Target Hook} {enum unwind_info_type} TARGET_DEBUG_UNWIND_INFO (void)
+@c hook-start:TARGET_DEBUG_UNWIND_INFO
This hook defines the mechanism that will be used for describing frame
unwind information to the debugger. Normally the hook will return
@code{UI_DWARF2} if DWARF 2 debug information is enabled, and
@@ -10059,6 +10723,7 @@ is disabled in order to always output DWARF 2 frame information.
A target may return @code{UI_TARGET} if it has ABI specified unwind tables.
This will suppress generation of the normal debug frame unwind information.
@end deftypefn
+@c hook-end
@defmac DWARF2_ASM_LINE_DEBUG_INFO
Define this macro to be a nonzero value if the assembler can generate Dwarf 2
@@ -10074,6 +10739,7 @@ internal line number tables.
@end defmac
@deftypefn {Target Hook} int TARGET_RESET_LOCATION_VIEW (rtx_insn *@var{})
+@c hook-start:TARGET_RESET_LOCATION_VIEW
This hook, if defined, enables -ginternal-reset-location-views, and
uses its result to override cases in which the estimated min insn
length might be nonzero even when a PC advance (i.e., a view reset)
@@ -10088,28 +10754,37 @@ be reset; or zero to decide based on the estimated insn length.
If insn length is to be regarded as reliable, set the hook to
@code{hook_int_rtx_insn_0}.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_WANT_DEBUG_PUB_SECTIONS
+@c hook-start:TARGET_WANT_DEBUG_PUB_SECTIONS
True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections
should be emitted. These sections are not used on most platforms, and
in particular GDB does not use them.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_DELAY_SCHED2
+@c hook-start:TARGET_DELAY_SCHED2
True if sched2 is not to be run at its normal place.
This usually means it will be run as part of machine-specific reorg.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_DELAY_VARTRACK
+@c hook-start:TARGET_DELAY_VARTRACK
True if vartrack is not to be run at its normal place.
This usually means it will be run as part of machine-specific reorg.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_NO_REGISTER_ALLOCATION
+@c hook-start:TARGET_NO_REGISTER_ALLOCATION
True if register allocation and the passes
following it should not be run. Usually true only for virtual assembler
targets.
@end deftypevr
+@c hook-end
@defmac ASM_OUTPUT_DWARF_DELTA (@var{stream}, @var{size}, @var{label1}, @var{label2})
A C statement to issue assembly directives that create a difference
@@ -10147,9 +10822,11 @@ is referenced by a function.
@end defmac
@deftypefn {Target Hook} void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *@var{file}, int @var{size}, rtx @var{x})
+@c hook-start:TARGET_ASM_OUTPUT_DWARF_DTPREL
If defined, this target hook is a function which outputs a DTP-relative
reference to the given TLS symbol of the specified size.
@end deftypefn
+@c hook-end
@need 2000
@node VMS Debug
@@ -10299,45 +10976,56 @@ switch is needed / supplied.
@end defmac
@deftypefn {Target Hook} void TARGET_MODE_EMIT (int @var{entity}, int @var{mode}, int @var{prev_mode}, HARD_REG_SET @var{regs_live})
+@c hook-start:TARGET_MODE_EMIT
Generate one or more insns to set @var{entity} to @var{mode}.
@var{hard_reg_live} is the set of hard registers live at the point where
the insn(s) are to be inserted. @var{prev_moxde} indicates the mode
to switch from. Sets of a lower numbered entity will be emitted before
sets of a higher numbered entity to a mode of the same or lower priority.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_NEEDED (int @var{entity}, rtx_insn *@var{insn})
+@c hook-start:TARGET_MODE_NEEDED
@var{entity} is an integer specifying a mode-switched entity.
If @code{OPTIMIZE_MODE_SWITCHING} is defined, you must define this macro
to return an integer value not larger than the corresponding element
in @code{NUM_MODES_FOR_MODE_SWITCHING}, to denote the mode that @var{entity}
must be switched into prior to the execution of @var{insn}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_AFTER (int @var{entity}, int @var{mode}, rtx_insn *@var{insn})
+@c hook-start:TARGET_MODE_AFTER
@var{entity} is an integer specifying a mode-switched entity.
If this macro is defined, it is evaluated for every @var{insn} during mode
switching. It determines the mode that an insn results
in (if different from the incoming mode).
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_ENTRY (int @var{entity})
+@c hook-start:TARGET_MODE_ENTRY
If this macro is defined, it is evaluated for every @var{entity} that
needs mode switching. It should evaluate to an integer, which is a mode
that @var{entity} is assumed to be switched to at function entry.
If @code{TARGET_MODE_ENTRY} is defined then @code{TARGET_MODE_EXIT}
must be defined.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_EXIT (int @var{entity})
+@c hook-start:TARGET_MODE_EXIT
If this macro is defined, it is evaluated for every @var{entity} that
needs mode switching. It should evaluate to an integer, which is a mode
that @var{entity} is assumed to be switched to at function exit.
If @code{TARGET_MODE_EXIT} is defined then @code{TARGET_MODE_ENTRY}
must be defined.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_PRIORITY (int @var{entity}, int @var{n})
+@c hook-start:TARGET_MODE_PRIORITY
This macro specifies the order in which modes for @var{entity}
are processed. 0 is the highest priority,
@code{NUM_MODES_FOR_MODE_SWITCHING[@var{entity}] - 1} the lowest.
@@ -10346,6 +11034,7 @@ for @var{entity}. For any fixed @var{entity}, @code{mode_priority}
(@var{entity}, @var{n}) shall be a bijection in 0 @dots{}
@code{num_modes_for_mode_switching[@var{entity}] - 1}.
@end deftypefn
+@c hook-end
@node Target Attributes
@section Defining target-specific uses of @code{__attribute__}
@@ -10358,35 +11047,44 @@ These are described using the following target hooks; they also need to
be documented in @file{extend.texi}.
@deftypevr {Target Hook} {const struct attribute_spec *} TARGET_ATTRIBUTE_TABLE
+@c hook-start:TARGET_ATTRIBUTE_TABLE
If defined, this target hook points to an array of @samp{struct
attribute_spec} (defined in @file{tree-core.h}) specifying the machine
specific attributes for this target and some of the restrictions on the
entities to which these attributes are applied and the arguments they
take.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree @var{name})
+@c hook-start:TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P
If defined, this target hook is a function which returns true if the
machine-specific attribute named @var{name} expects an identifier
given as its first argument to be passed on as a plain identifier, not
subjected to name lookup. If this is not defined, the default is
false for all machine-specific attributes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_COMP_TYPE_ATTRIBUTES (const_tree @var{type1}, const_tree @var{type2})
+@c hook-start:TARGET_COMP_TYPE_ATTRIBUTES
If defined, this target hook is a function which returns zero if the attributes on
@var{type1} and @var{type2} are incompatible, one if they are compatible,
and two if they are nearly compatible (which causes a warning to be
generated). If this is not defined, machine-specific attributes are
supposed always to be compatible.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree @var{type})
+@c hook-start:TARGET_SET_DEFAULT_TYPE_ATTRIBUTES
If defined, this target hook is a function which assigns default attributes to
the newly defined @var{type}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_MERGE_TYPE_ATTRIBUTES (tree @var{type1}, tree @var{type2})
+@c hook-start:TARGET_MERGE_TYPE_ATTRIBUTES
Define this target hook if the merging of type attributes needs special
handling. If defined, the result is a list of the combined
@code{TYPE_ATTRIBUTES} of @var{type1} and @var{type2}. It is assumed
@@ -10394,8 +11092,10 @@ that @code{comptypes} has already been called and returned 1. This
function may call @code{merge_attributes} to handle machine-independent
merging.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_MERGE_DECL_ATTRIBUTES (tree @var{olddecl}, tree @var{newdecl})
+@c hook-start:TARGET_MERGE_DECL_ATTRIBUTES
Define this target hook if the merging of decl attributes needs special
handling. If defined, the result is a list of the combined
@code{DECL_ATTRIBUTES} of @var{olddecl} and @var{newdecl}.
@@ -10416,12 +11116,15 @@ to perform initial processing of the @samp{dllimport} and
@samp{dllexport} attributes. This is done in @file{i386/cygwin.h} and
@file{i386/i386.cc}, for example.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree @var{decl})
+@c hook-start:TARGET_VALID_DLLIMPORT_ATTRIBUTE_P
@var{decl} is a variable or function with @code{__attribute__((dllimport))}
specified. Use this hook if the target needs to add extra validation
checks to @code{handle_dll_attribute}.
@end deftypefn
+@c hook-end
@defmac TARGET_DECLSPEC
Define this macro to a nonzero value if you want to treat
@@ -10433,6 +11136,7 @@ on this implementation detail.
@end defmac
@deftypefn {Target Hook} void TARGET_INSERT_ATTRIBUTES (tree @var{node}, tree *@var{attr_ptr})
+@c hook-start:TARGET_INSERT_ATTRIBUTES
Define this target hook if you want to be able to add attributes to a decl
when it is being created. This is normally useful for back ends which
wish to implement a pragma by using the attributes which correspond to
@@ -10444,24 +11148,30 @@ the list and @code{*@var{attr_ptr}} modified to point to the new
attributes, or a copy of the list may be made if further changes are
needed.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_HANDLE_GENERIC_ATTRIBUTE (tree *@var{node}, tree @var{name}, tree @var{args}, int @var{flags}, bool *@var{no_add_attrs})
+@c hook-start:TARGET_HANDLE_GENERIC_ATTRIBUTE
Define this target hook if you want to be able to perform additional
target-specific processing of an attribute which is handled generically
by a front end. The arguments are the same as those which are passed to
attribute handlers. So far this only affects the @var{noinit} and
@var{section} attribute.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree @var{fndecl})
+@c hook-start:TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P
@cindex inlining
This target hook returns @code{true} if it is OK to inline @var{fndecl}
into the current function, despite its having target-specific
attributes, @code{false} otherwise. By default, if a function has a
target specific attribute attached to it, it will not be inlined.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree @var{fndecl}, tree @var{name}, tree @var{args}, int @var{flags})
+@c hook-start:TARGET_OPTION_VALID_ATTRIBUTE_P
This hook is called to parse @code{attribute(target("..."))}, which
allows setting target-specific options on individual functions.
These function-specific options may differ
@@ -10472,40 +11182,52 @@ The hook should set the @code{DECL_FUNCTION_SPECIFIC_TARGET} field in
the function declaration to hold a pointer to a target-specific
@code{struct cl_target_option} structure.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OPTION_SAVE (struct cl_target_option *@var{ptr}, struct gcc_options *@var{opts}, struct gcc_options *@var{opts_set})
+@c hook-start:TARGET_OPTION_SAVE
This hook is called to save any additional target-specific information
in the @code{struct cl_target_option} structure for function-specific
options from the @code{struct gcc_options} structure.
@xref{Option file format}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OPTION_RESTORE (struct gcc_options *@var{opts}, struct gcc_options *@var{opts_set}, struct cl_target_option *@var{ptr})
+@c hook-start:TARGET_OPTION_RESTORE
This hook is called to restore any additional target-specific
information in the @code{struct cl_target_option} structure for
function-specific options to the @code{struct gcc_options} structure.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OPTION_POST_STREAM_IN (struct cl_target_option *@var{ptr})
+@c hook-start:TARGET_OPTION_POST_STREAM_IN
This hook is called to update target-specific information in the
@code{struct cl_target_option} structure after it is streamed in from
LTO bytecode.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OPTION_PRINT (FILE *@var{file}, int @var{indent}, struct cl_target_option *@var{ptr})
+@c hook-start:TARGET_OPTION_PRINT
This hook is called to print any additional target-specific
information in the @code{struct cl_target_option} structure for
function-specific options.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_OPTION_PRAGMA_PARSE (tree @var{args}, tree @var{pop_target})
+@c hook-start:TARGET_OPTION_PRAGMA_PARSE
This target hook parses the options for @code{#pragma GCC target}, which
sets the target-specific options for functions that occur later in the
input stream. The options accepted should be the same as those handled by the
@code{TARGET_OPTION_VALID_ATTRIBUTE_P} hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_OPTION_OVERRIDE (void)
+@c hook-start:TARGET_OPTION_OVERRIDE
Sometimes certain combinations of command options do not make sense on
a particular target machine. You can override the hook
@code{TARGET_OPTION_OVERRIDE} to take account of this. This hooks is called
@@ -10518,21 +11240,26 @@ If you need to do something whenever the optimization level is
changed via the optimize attribute or pragma, see
@code{TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE}
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_OPTION_FUNCTION_VERSIONS (tree @var{decl1}, tree @var{decl2})
+@c hook-start:TARGET_OPTION_FUNCTION_VERSIONS
This target hook returns @code{true} if @var{DECL1} and @var{DECL2} are
versions of the same function. @var{DECL1} and @var{DECL2} are function
versions if and only if they have the same function signature and
different target specific attributes, that is, they are compiled for
different target machines.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CAN_INLINE_P (tree @var{caller}, tree @var{callee})
+@c hook-start:TARGET_CAN_INLINE_P
This target hook returns @code{false} if the @var{caller} function
cannot inline @var{callee}, based on target specific information. By
default, inlining is not allowed if the callee function has function
specific target options and the caller does not use the same options.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_UPDATE_IPA_FN_TARGET_INFO (unsigned int& @var{info}, const gimple* @var{stmt})
Allow target to analyze all gimple statements for the given function to
@@ -10566,10 +11293,12 @@ The default version of this hook returns false.
@end deftypefn
@deftypefn {Target Hook} void TARGET_RELAYOUT_FUNCTION (tree @var{fndecl})
+@c hook-start:TARGET_RELAYOUT_FUNCTION
This target hook fixes function @var{fndecl} after attributes are processed.
Default does nothing. On ARM, the default function's alignment is updated
with the attribute target.
@end deftypefn
+@c hook-end
@node Emulated TLS
@section Emulating TLS
@@ -10588,66 +11317,86 @@ which, when given the address of the control object, will return the
address of the current thread's instance of the TLS object.
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_GET_ADDRESS
+@c hook-start:TARGET_EMUTLS_GET_ADDRESS
Contains the name of the helper function that uses a TLS control
object to locate a TLS instance. The default causes libgcc's
emulated TLS helper function to be used.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_REGISTER_COMMON
+@c hook-start:TARGET_EMUTLS_REGISTER_COMMON
Contains the name of the helper function that should be used at
program startup to register TLS objects that are implicitly
initialized to zero. If this is @code{NULL}, all TLS objects will
have explicit initializers. The default causes libgcc's emulated TLS
registration function to be used.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_VAR_SECTION
+@c hook-start:TARGET_EMUTLS_VAR_SECTION
Contains the name of the section in which TLS control variables should
be placed. The default of @code{NULL} allows these to be placed in
any section.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_TMPL_SECTION
+@c hook-start:TARGET_EMUTLS_TMPL_SECTION
Contains the name of the section in which TLS initializers should be
placed. The default of @code{NULL} allows these to be placed in any
section.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_VAR_PREFIX
+@c hook-start:TARGET_EMUTLS_VAR_PREFIX
Contains the prefix to be prepended to TLS control variable names.
The default of @code{NULL} uses a target-specific prefix.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} {const char *} TARGET_EMUTLS_TMPL_PREFIX
+@c hook-start:TARGET_EMUTLS_TMPL_PREFIX
Contains the prefix to be prepended to TLS initializer objects. The
default of @code{NULL} uses a target-specific prefix.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} tree TARGET_EMUTLS_VAR_FIELDS (tree @var{type}, tree *@var{name})
+@c hook-start:TARGET_EMUTLS_VAR_FIELDS
Specifies a function that generates the FIELD_DECLs for a TLS control
object type. @var{type} is the RECORD_TYPE the fields are for and
@var{name} should be filled with the structure tag, if the default of
@code{__emutls_object} is unsuitable. The default creates a type suitable
for libgcc's emulated TLS function.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_EMUTLS_VAR_INIT (tree @var{var}, tree @var{decl}, tree @var{tmpl_addr})
+@c hook-start:TARGET_EMUTLS_VAR_INIT
Specifies a function that generates the CONSTRUCTOR to initialize a
TLS control object. @var{var} is the TLS control object, @var{decl}
is the TLS object and @var{tmpl_addr} is the address of the
initializer. The default initializes libgcc's emulated TLS control object.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_EMUTLS_VAR_ALIGN_FIXED
+@c hook-start:TARGET_EMUTLS_VAR_ALIGN_FIXED
Specifies whether the alignment of TLS control variable objects is
fixed and should not be increased as some backends may do to optimize
single objects. The default is false.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
+@c hook-start:TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS
Specifies whether a DWARF @code{DW_OP_form_tls_address} location descriptor
may be used to describe emulated TLS control objects.
@end deftypevr
+@c hook-end
@node MIPS Coprocessors
@section Defining coprocessor specifics for MIPS targets.
@@ -10682,12 +11431,15 @@ floating-point support; they are not included in this mechanism.
@cindex parameters, precompiled headers
@deftypefn {Target Hook} {void *} TARGET_GET_PCH_VALIDITY (size_t *@var{sz})
+@c hook-start:TARGET_GET_PCH_VALIDITY
This hook returns a pointer to the data needed by
@code{TARGET_PCH_VALID_P} and sets
@samp{*@var{sz}} to the size of the data in bytes.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_PCH_VALID_P (const void *@var{data}, size_t @var{sz})
+@c hook-start:TARGET_PCH_VALID_P
This hook checks whether the options used to create a PCH file are
compatible with the current settings. It returns @code{NULL}
if so and a suitable error message if not. Error messages will
@@ -10701,52 +11453,66 @@ compiler, so no format checking is needed.
The default definition of @code{default_pch_valid_p} should be
suitable for most targets.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_CHECK_PCH_TARGET_FLAGS (int @var{pch_flags})
+@c hook-start:TARGET_CHECK_PCH_TARGET_FLAGS
If this hook is nonnull, the default implementation of
@code{TARGET_PCH_VALID_P} will use it to check for compatible values
of @code{target_flags}. @var{pch_flags} specifies the value that
@code{target_flags} had when the PCH file was created. The return
value is the same as for @code{TARGET_PCH_VALID_P}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_PREPARE_PCH_SAVE (void)
+@c hook-start:TARGET_PREPARE_PCH_SAVE
Called before writing out a PCH file. If the target has some
garbage-collected data that needs to be in a particular state on PCH loads,
it can use this hook to enforce that state. Very few targets need
to do anything here.
@end deftypefn
+@c hook-end
@node C++ ABI
@section C++ ABI parameters
@cindex parameters, c++ abi
@deftypefn {Target Hook} tree TARGET_CXX_GUARD_TYPE (void)
+@c hook-start:TARGET_CXX_GUARD_TYPE
Define this hook to override the integer type used for guard variables.
These are used to implement one-time construction of static objects. The
default is long_long_integer_type_node.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_GUARD_MASK_BIT (void)
+@c hook-start:TARGET_CXX_GUARD_MASK_BIT
This hook determines how guard variables are used. It should return
@code{false} (the default) if the first byte should be used. A return value of
@code{true} indicates that only the least significant bit should be used.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_CXX_GET_COOKIE_SIZE (tree @var{type})
+@c hook-start:TARGET_CXX_GET_COOKIE_SIZE
This hook returns the size of the cookie to use when allocating an array
whose elements have the indicated @var{type}. Assumes that it is already
known that a cookie is needed. The default is
@code{max(sizeof (size_t), alignof(type))}, as defined in section 2.7 of the
IA64/Generic C++ ABI@.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_COOKIE_HAS_SIZE (void)
+@c hook-start:TARGET_CXX_COOKIE_HAS_SIZE
This hook should return @code{true} if the element size should be stored in
array cookies. The default is to return @code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_CXX_IMPORT_EXPORT_CLASS (tree @var{type}, int @var{import_export})
+@c hook-start:TARGET_CXX_IMPORT_EXPORT_CLASS
If defined by a backend this hook allows the decision made to export
class @var{type} to be overruled. Upon entry @var{import_export}
will contain 1 if the class is going to be exported, @minus{}1 if it is going
@@ -10754,14 +11520,18 @@ to be imported and 0 otherwise. This function should return the
modified value and perform any other actions necessary to support the
backend's targeted operating system.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_CDTOR_RETURNS_THIS (void)
+@c hook-start:TARGET_CXX_CDTOR_RETURNS_THIS
This hook should return @code{true} if constructors and destructors return
the address of the object created/destroyed. The default is to return
@code{false}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void)
+@c hook-start:TARGET_CXX_KEY_METHOD_MAY_BE_INLINE
This hook returns true if the key method for a class (i.e., the method
which, if defined in the current translation unit, causes the virtual
table to be emitted) may be an inline function. Under the standard
@@ -10770,8 +11540,10 @@ the function is not declared inline in the class definition. Under
some variants of the ABI, an inline function can never be the key
method. The default is to return @code{true}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree @var{decl})
+@c hook-start:TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY
@var{decl} is a virtual table, virtual table table, typeinfo object,
or other similar implicit class data object that will be emitted with
external linkage in this translation unit. No ELF visibility has been
@@ -10779,62 +11551,80 @@ explicitly specified. If the target needs to specify a visibility
other than that of the containing class, use this hook to set
@code{DECL_VISIBILITY} and @code{DECL_VISIBILITY_SPECIFIED}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void)
+@c hook-start:TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT
This hook returns true (the default) if virtual tables and other
similar implicit class data objects are always COMDAT if they have
external linkage. If this hook returns false, then class data for
classes whose virtual table will be emitted in only one translation
unit will not be COMDAT.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void)
+@c hook-start:TARGET_CXX_LIBRARY_RTTI_COMDAT
This hook returns true (the default) if the RTTI information for
the basic types which is defined in the C++ runtime should always
be COMDAT, false if it should not be COMDAT.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_USE_AEABI_ATEXIT (void)
+@c hook-start:TARGET_CXX_USE_AEABI_ATEXIT
This hook returns true if @code{__aeabi_atexit} (as defined by the ARM EABI)
should be used to register static destructors when @option{-fuse-cxa-atexit}
is in effect. The default is to return false to use @code{__cxa_atexit}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void)
+@c hook-start:TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT
This hook returns true if the target @code{atexit} function can be used
in the same manner as @code{__cxa_atexit} to register C++ static
destructors. This requires that @code{atexit}-registered functions in
shared libraries are run in the correct order when the libraries are
unloaded. The default is to return false.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree @var{type})
+@c hook-start:TARGET_CXX_ADJUST_CLASS_AT_DEFINITION
@var{type} is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just
been defined. Use this hook to make adjustments to the class (eg, tweak
visibility or perform any other required target modifications).
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree @var{decl})
+@c hook-start:TARGET_CXX_DECL_MANGLING_CONTEXT
Return target-specific mangling context of @var{decl} or @code{NULL_TREE}.
@end deftypefn
+@c hook-end
@node D Language and ABI
@section D ABI parameters
@cindex parameters, d abi
@deftypefn {D Target Hook} void TARGET_D_CPU_VERSIONS (void)
+@c hook-start:TARGET_D_CPU_VERSIONS
Declare all environmental version identifiers relating to the target CPU
using the function @code{builtin_version}, which takes a string representing
the name of the version. Version identifiers predefined by this hook apply
to all modules that are being compiled and imported.
@end deftypefn
+@c hook-end
@deftypefn {D Target Hook} void TARGET_D_OS_VERSIONS (void)
+@c hook-start:TARGET_D_OS_VERSIONS
Similarly to @code{TARGET_D_CPU_VERSIONS}, but is used for versions
relating to the target operating system.
@end deftypefn
+@c hook-end
@deftypefn {D Target Hook} void TARGET_D_REGISTER_CPU_TARGET_INFO (void)
+@c hook-start:TARGET_D_REGISTER_CPU_TARGET_INFO
Register all target information keys relating to the target CPU using the
function @code{d_add_target_info_handlers}, which takes a
@samp{struct d_target_info_spec} (defined in @file{d/d-target.h}). The keys
@@ -10842,13 +11632,17 @@ added by this hook are made available at compile time by the
@code{__traits(getTargetInfo)} extension, the result is an expression
describing the requested target information.
@end deftypefn
+@c hook-end
@deftypefn {D Target Hook} void TARGET_D_REGISTER_OS_TARGET_INFO (void)
+@c hook-start:TARGET_D_REGISTER_OS_TARGET_INFO
Same as @code{TARGET_D_CPU_TARGET_INFO}, but is used for keys relating to
the target operating system.
@end deftypefn
+@c hook-end
@deftypevr {D Target Hook} {const char *} TARGET_D_MINFO_SECTION
+@c hook-start:TARGET_D_MINFO_SECTION
Contains the name of the section in which module info references should be
placed. By default, the compiler puts all module info symbols in the
@code{"minfo"} section. Define this macro to override the string if a
@@ -10859,32 +11653,41 @@ the section, so that the runtime library can collect all modules for each
loaded shared library and executable. Setting the value to @code{NULL}
disables the use of sections for storing module info altogether.
@end deftypevr
+@c hook-end
@deftypevr {D Target Hook} {const char *} TARGET_D_MINFO_SECTION_START
+@c hook-start:TARGET_D_MINFO_START_NAME
If @code{TARGET_D_MINFO_SECTION} is defined, then this must also be defined
as the name of the symbol indicating the start address of the module info
section
@end deftypevr
+@c hook-end
@deftypevr {D Target Hook} {const char *} TARGET_D_MINFO_SECTION_END
+@c hook-start:TARGET_D_MINFO_END_NAME
If @code{TARGET_D_MINFO_SECTION} is defined, then this must also be defined
as the name of the symbol indicating the end address of the module info
section
@end deftypevr
+@c hook-end
@deftypefn {D Target Hook} bool TARGET_D_HAS_STDCALL_CONVENTION (unsigned int *@var{link_system}, unsigned int *@var{link_windows})
+@c hook-start:TARGET_D_HAS_STDCALL_CONVENTION
Returns @code{true} if the target supports the stdcall calling convention.
The hook should also set @var{link_system} to @code{1} if the @code{stdcall}
attribute should be applied to functions with @code{extern(System)} linkage,
and @var{link_windows} to @code{1} to apply @code{stdcall} to functions with
@code{extern(Windows)} linkage.
@end deftypefn
+@c hook-end
@deftypevr {D Target Hook} bool TARGET_D_TEMPLATES_ALWAYS_COMDAT
+@c hook-start:TARGET_D_TEMPLATES_ALWAYS_COMDAT
This flag is true if instantiated functions and variables are always COMDAT
if they have external linkage. If this flag is false, then instantiated
decls will be emitted as weak symbols. The default is @code{false}.
@end deftypevr
+@c hook-end
@node Named Address Spaces
@section Adding support for named address spaces
@@ -10925,18 +11728,23 @@ c_register_addr_space ("__ea", ADDR_SPACE_EA);
@end smallexample
@deftypefn {Target Hook} scalar_int_mode TARGET_ADDR_SPACE_POINTER_MODE (addr_space_t @var{address_space})
+@c hook-start:TARGET_ADDR_SPACE_POINTER_MODE
Define this to return the machine mode to use for pointers to
@var{address_space} if the target supports named address spaces.
The default version of this hook returns @code{ptr_mode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} scalar_int_mode TARGET_ADDR_SPACE_ADDRESS_MODE (addr_space_t @var{address_space})
+@c hook-start:TARGET_ADDR_SPACE_ADDRESS_MODE
Define this to return the machine mode to use for addresses in
@var{address_space} if the target supports named address spaces.
The default version of this hook returns @code{Pmode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (scalar_int_mode @var{mode}, addr_space_t @var{as})
+@c hook-start:TARGET_ADDR_SPACE_VALID_POINTER_MODE
Define this to return nonzero if the port can handle pointers
with machine mode @var{mode} to address space @var{as}. This target
hook is the same as the @code{TARGET_VALID_POINTER_MODE} target hook,
@@ -10945,8 +11753,10 @@ version of this hook returns true for the modes returned by either the
@code{TARGET_ADDR_SPACE_POINTER_MODE} or @code{TARGET_ADDR_SPACE_ADDRESS_MODE}
target hooks for the given address space.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P (machine_mode @var{mode}, rtx @var{exp}, bool @var{strict}, addr_space_t @var{as})
+@c hook-start:TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
Define this to return true if @var{exp} is a valid address for mode
@var{mode} in the named address space @var{as}. The @var{strict}
parameter says whether strict addressing is in effect after reload has
@@ -10954,15 +11764,19 @@ finished. This target hook is the same as the
@code{TARGET_LEGITIMATE_ADDRESS_P} target hook, except that it includes
explicit named address space support.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx @var{x}, rtx @var{oldx}, machine_mode @var{mode}, addr_space_t @var{as})
+@c hook-start:TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
Define this to modify an invalid address @var{x} to be a valid address
with mode @var{mode} in the named address space @var{as}. This target
hook is the same as the @code{TARGET_LEGITIMIZE_ADDRESS} target hook,
except that it includes explicit named address space support.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t @var{subset}, addr_space_t @var{superset})
+@c hook-start:TARGET_ADDR_SPACE_SUBSET_P
Define this to return whether the @var{subset} named address space is
contained within the @var{superset} named address space. Pointers to
a named address space that is a subset of another named address space
@@ -10970,13 +11784,17 @@ will be converted automatically without a cast if used together in
arithmetic operations. Pointers to a superset address space can be
converted to pointers to a subset address space via explicit casts.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID (addr_space_t @var{as})
+@c hook-start:TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID
Define this to modify the default handling of address 0 for the
address space. Return true if 0 should be considered a valid address.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_ADDR_SPACE_CONVERT (rtx @var{op}, tree @var{from_type}, tree @var{to_type})
+@c hook-start:TARGET_ADDR_SPACE_CONVERT
Define this to convert the pointer expression represented by the RTL
@var{op} with type @var{from_type} that points to a named address
space to a new pointer expression with type @var{to_type} that points
@@ -10984,13 +11802,17 @@ to a different named address space. When this hook it called, it is
guaranteed that one of the two address spaces is a subset of the other,
as determined by the @code{TARGET_ADDR_SPACE_SUBSET_P} target hook.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_ADDR_SPACE_DEBUG (addr_space_t @var{as})
+@c hook-start:TARGET_ADDR_SPACE_DEBUG
Define this to define how the address space is encoded in dwarf.
The result is the value to be used with @code{DW_AT_address_class}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t @var{as}, location_t @var{loc})
+@c hook-start:TARGET_ADDR_SPACE_DIAGNOSE_USAGE
Define this hook if the availability of an address space depends on
command line options and some diagnostics should be printed when the
address space is used. This hook is called during parsing and allows
@@ -11000,6 +11822,7 @@ the address space as registered with @code{c_register_addr_space}.
@var{loc} is the location of the address space qualifier token.
The default implementation does nothing.
@end deftypefn
+@c hook-end
@node Misc
@section Miscellaneous Parameters
@@ -11050,11 +11873,13 @@ is in effect.
@end defmac
@deftypefn {Target Hook} {unsigned int} TARGET_CASE_VALUES_THRESHOLD (void)
+@c hook-start:TARGET_CASE_VALUES_THRESHOLD
This function return the smallest number of different values for which it
is best to use a jump-table instead of a tree of conditional branches.
The default is four for machines with a @code{casesi} instruction and
five otherwise. This is best for most machines.
@end deftypefn
+@c hook-end
@defmac WORD_REGISTER_OPERATIONS
Define this macro to 1 if operations between registers with integral mode
@@ -11067,6 +11892,7 @@ to 1. Most RISC machines have this property and most CISC machines do not.
@end defmac
@deftypefn {Target Hook} {unsigned int} TARGET_MIN_ARITHMETIC_PRECISION (void)
+@c hook-start:TARGET_MIN_ARITHMETIC_PRECISION
On some RISC architectures with 64-bit registers, the processor also
maintains 32-bit condition codes that make it possible to do real 32-bit
arithmetic, although the operations are performed on the full registers.
@@ -11082,6 +11908,7 @@ with a precision lower than the word precision.
You need not define this hook if @code{WORD_REGISTER_OPERATIONS} is not
defined to 1.
@end deftypefn
+@c hook-end
@defmac LOAD_EXTEND_OP (@var{mem_mode})
Define this macro to be a C expression indicating when insns that read
@@ -11116,6 +11943,7 @@ extends.
@end defmac
@deftypefn {Target Hook} {unsigned int} TARGET_MIN_DIVISIONS_FOR_RECIP_MUL (machine_mode @var{mode})
+@c hook-start:TARGET_MIN_DIVISIONS_FOR_RECIP_MUL
When @option{-ffast-math} is in effect, GCC tries to optimize
divisions by the same divisor, by turning them into multiplications by
the reciprocal. This target hook specifies the minimum number of divisions
@@ -11123,6 +11951,7 @@ that should be there for GCC to perform the optimization for a variable
of mode @var{mode}. The default implementation returns 3 if the machine
has an instruction for the division, and 2 if it does not.
@end deftypefn
+@c hook-end
@defmac MOVE_MAX
The maximum number of bytes that a single instruction can move quickly
@@ -11164,6 +11993,7 @@ You need not define this macro if it would always have the value of zero.
@anchor{TARGET_SHIFT_TRUNCATION_MASK}
@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_SHIFT_TRUNCATION_MASK (machine_mode @var{mode})
+@c hook-start:TARGET_SHIFT_TRUNCATION_MASK
This function describes how the standard shift patterns for @var{mode}
deal with shifts by negative amounts or by more than the width of the mode.
@xref{shift patterns}.
@@ -11186,8 +12016,10 @@ and 0 otherwise. This definition is always safe, but if
nevertheless truncate the shift count, you may get better code
by overriding it.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_TRULY_NOOP_TRUNCATION (poly_uint64 @var{outprec}, poly_uint64 @var{inprec})
+@c hook-start:TARGET_TRULY_NOOP_TRUNCATION
This hook returns true if it is safe to ``convert'' a value of
@var{inprec} bits to one of @var{outprec} bits (where @var{outprec} is
smaller than @var{inprec}) by merely operating on it as if it had only
@@ -11200,8 +12032,10 @@ If @code{TARGET_MODES_TIEABLE_P} returns false for a pair of modes,
suboptimal code can result if this hook returns true for the corresponding
mode sizes. Making this hook return false in such cases may improve things.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_MODE_REP_EXTENDED (scalar_int_mode @var{mode}, scalar_int_mode @var{rep_mode})
+@c hook-start:TARGET_MODE_REP_EXTENDED
The representation of an integral mode can be such that the values
are always extended to a wider integral mode. Return
@code{SIGN_EXTEND} if values of @var{mode} are represented in
@@ -11228,8 +12062,10 @@ In order to enforce the representation of @code{mode},
@code{TARGET_TRULY_NOOP_TRUNCATION} should return false when truncating to
@code{mode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P (void)
+@c hook-start:TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P
On some targets, it is assumed that the compiler will spill all pseudos
that are live across a call to @code{setjmp}, while other targets treat
@code{setjmp} calls as normal function calls.
@@ -11241,6 +12077,7 @@ On some targets, it is assumed that the compiler will spill all pseudos
The default implementation conservatively assumes all pseudos must be
spilled across @code{setjmp} calls.
@end deftypefn
+@c hook-end
@defmac STORE_FLAG_VALUE
A C expression describing the value returned by a comparison operator
@@ -11422,6 +12259,7 @@ files @code{__STDC__} will always expand to 1.
@end defmac
@deftypefn {C Target Hook} {const char *} TARGET_C_PREINCLUDE (void)
+@c hook-start:TARGET_C_PREINCLUDE
Define this hook to return the name of a header file to be included at
the start of all compilations, as if it had been included with
@code{#include <@var{file}>}. If this hook returns @code{NULL}, or is
@@ -11433,14 +12271,17 @@ library to implement ISO C requirements for certain macros to be
predefined that describe properties of the whole implementation rather
than just the compiler.
@end deftypefn
+@c hook-end
@deftypefn {C Target Hook} bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*@var{})
+@c hook-start:TARGET_CXX_IMPLICIT_EXTERN_C
Define this hook to add target-specific C++ implicit extern C functions.
If this function returns true for the name of a file-scope function, that
function implicitly gets extern "C" linkage rather than whatever language
linkage the declaration would normally have. An example of such function
is WinMain on Win32 targets.
@end deftypefn
+@c hook-end
@defmac SYSTEM_IMPLICIT_EXTERN_C
Define this macro if the system header files do not support C++@.
@@ -11561,6 +12402,7 @@ You need not define this macro if it would always evaluate to zero.
@end defmac
@deftypefn {Target Hook} {rtx_insn *} TARGET_MD_ASM_ADJUST (vec<rtx>& @var{outputs}, vec<rtx>& @var{inputs}, vec<machine_mode>& @var{input_modes}, vec<const char *>& @var{constraints}, vec<rtx>& @var{clobbers}, HARD_REG_SET& @var{clobbered_regs}, location_t @var{loc})
+@c hook-start:TARGET_MD_ASM_ADJUST
This target hook may add @dfn{clobbers} to @var{clobbers} and
@var{clobbered_regs} for any hard regs the port wishes to automatically
clobber for an asm. The @var{outputs} and @var{inputs} may be inspected
@@ -11573,6 +12415,7 @@ return value is a sequence of insns to emit after the asm. Note that
changes to @var{inputs} must be accompanied by the corresponding changes
to @var{input_modes}.
@end deftypefn
+@c hook-end
@defmac MATH_LIBRARY
Define this macro as a C string constant for the linker argument to link
@@ -11652,6 +12495,7 @@ to by @var{ce_info}.
@end defmac
@deftypefn {Target Hook} void TARGET_MACHINE_DEPENDENT_REORG (void)
+@c hook-start:TARGET_MACHINE_DEPENDENT_REORG
If non-null, this hook performs a target-specific pass over the
instruction stream. The compiler will run it at all optimization levels,
just before the point at which it normally does delayed-branch scheduling.
@@ -11664,8 +12508,10 @@ Others use it as an opportunity to do some machine-dependent optimizations.
You need not implement the hook if it has nothing to do. The default
definition is null.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_INIT_BUILTINS (void)
+@c hook-start:TARGET_INIT_BUILTINS
Define this hook if you have any machine-specific built-in functions
that need to be defined. It should be a function that performs the
necessary setup.
@@ -11682,8 +12528,10 @@ up by @code{build_common_tree_nodes};
only language front ends that use those two functions will call
@samp{TARGET_INIT_BUILTINS}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_BUILTIN_DECL (unsigned @var{code}, bool @var{initialize_p})
+@c hook-start:TARGET_BUILTIN_DECL
Define this hook if you have any machine-specific built-in functions
that need to be defined. It should be a function that returns the
builtin function declaration for the builtin function code @var{code}.
@@ -11692,8 +12540,10 @@ if @var{initialize_p} is true the function should return @code{NULL_TREE}.
If @var{code} is out of range the function should return
@code{error_mark_node}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_EXPAND_BUILTIN (tree @var{exp}, rtx @var{target}, rtx @var{subtarget}, machine_mode @var{mode}, int @var{ignore})
+@c hook-start:TARGET_EXPAND_BUILTIN
Expand a call to a machine specific built-in function that was set up by
@samp{TARGET_INIT_BUILTINS}. @var{exp} is the expression for the
@@ -11704,8 +12554,10 @@ convenient, and have mode @var{mode} if that is convenient.
ignored. This function should return the result of the call to the
built-in function.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int @var{loc}, tree @var{fndecl}, void *@var{arglist})
+@c hook-start:TARGET_RESOLVE_OVERLOADED_BUILTIN
Select a replacement for a machine specific built-in function that
was set up by @samp{TARGET_INIT_BUILTINS}. This is done
@emph{before} regular type checking, and so allows the target to
@@ -11716,8 +12568,10 @@ complete expression that implements the operation, usually
another @code{CALL_EXPR}.
@var{arglist} really has type @samp{VEC(tree,gc)*}
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CHECK_BUILTIN_CALL (location_t @var{loc}, vec<location_t> @var{arg_loc}, tree @var{fndecl}, tree @var{orig_fndecl}, unsigned int @var{nargs}, tree *@var{args})
+@c hook-start:TARGET_CHECK_BUILTIN_CALL
Perform semantic checking on a call to a machine-specific built-in
function after its arguments have been constrained to the function
signature. Return true if the call is valid, otherwise report an error
@@ -11731,8 +12585,10 @@ location of the call and @var{args} is an array of function arguments,
of which there are @var{nargs}. @var{arg_loc} specifies the location
of each argument.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_FOLD_BUILTIN (tree @var{fndecl}, int @var{n_args}, tree *@var{argp}, bool @var{ignore})
+@c hook-start:TARGET_FOLD_BUILTIN
Fold a call to a machine specific built-in function that was set up by
@samp{TARGET_INIT_BUILTINS}. @var{fndecl} is the declaration of the
built-in function. @var{n_args} is the number of arguments passed to
@@ -11741,15 +12597,19 @@ The result is another tree, valid for both GIMPLE and GENERIC,
containing a simplified expression for the call's result. If
@var{ignore} is true the value will be ignored.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator *@var{gsi})
+@c hook-start:TARGET_GIMPLE_FOLD_BUILTIN
Fold a call to a machine specific built-in function that was set up
by @samp{TARGET_INIT_BUILTINS}. @var{gsi} points to the gimple
statement holding the function call. Returns true if any change
was made to the GIMPLE stream.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_COMPARE_VERSION_PRIORITY (tree @var{decl1}, tree @var{decl2})
+@c hook-start:TARGET_COMPARE_VERSION_PRIORITY
This hook is used to compare the target attributes in two functions to
determine which function's features get higher priority. This is used
during function multi-versioning to figure out the order in which two
@@ -11757,36 +12617,46 @@ versions must be dispatched. A function version with a higher priority
is checked for dispatching earlier. @var{decl1} and @var{decl2} are
the two function decls that will be compared.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void *@var{decl})
+@c hook-start:TARGET_GET_FUNCTION_VERSIONS_DISPATCHER
This hook is used to get the dispatcher function for a set of function
versions. The dispatcher function is called to invoke the right function
version at run-time. @var{decl} is one version from a set of semantically
identical versions.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void *@var{arg})
+@c hook-start:TARGET_GENERATE_VERSION_DISPATCHER_BODY
This hook is used to generate the dispatcher logic to invoke the right
function version at run-time for a given set of function versions.
@var{arg} points to the callgraph node of the dispatcher function whose
body must be generated.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_PREDICT_DOLOOP_P (class loop *@var{loop})
+@c hook-start:TARGET_PREDICT_DOLOOP_P
Return true if we can predict it is possible to use a low-overhead loop
for a particular loop. The parameter @var{loop} is a pointer to the loop.
This target hook is required only when the target supports low-overhead
loops, and will help ivopts to make some decisions.
The default version of this hook returns false.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_HAVE_COUNT_REG_DECR_P
+@c hook-start:TARGET_HAVE_COUNT_REG_DECR_P
Return true if the target supports hardware count register for decrement
and branch.
The default value is false.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} int64_t TARGET_DOLOOP_COST_FOR_GENERIC
+@c hook-start:TARGET_DOLOOP_COST_FOR_GENERIC
One IV candidate dedicated for doloop is introduced in IVOPTs, we can
calculate the computation cost of adopting it to any generic IV use by
function get_computation_cost as before. But for targets which have
@@ -11797,8 +12667,10 @@ expensive penalty. This hook allows target owners to define the cost for
this especially for generic IV uses.
The default value is zero.
@end deftypevr
+@c hook-end
@deftypevr {Target Hook} int64_t TARGET_DOLOOP_COST_FOR_ADDRESS
+@c hook-start:TARGET_DOLOOP_COST_FOR_ADDRESS
One IV candidate dedicated for doloop is introduced in IVOPTs, we can
calculate the computation cost of adopting it to any address IV use by
function get_computation_cost as before. But for targets which have
@@ -11809,8 +12681,10 @@ expensive penalty. This hook allows target owners to define the cost for
this escpecially for address IV uses.
The default value is zero.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CAN_USE_DOLOOP_P (const widest_int @var{&iterations}, const widest_int @var{&iterations_max}, unsigned int @var{loop_depth}, bool @var{entered_at_top})
+@c hook-start:TARGET_CAN_USE_DOLOOP_P
Return true if it is possible to use low-overhead loops (@code{doloop_end}
and @code{doloop_begin}) for a particular loop. @var{iterations} gives the
exact number of iterations, or 0 if not known. @var{iterations_max} gives
@@ -11823,8 +12697,10 @@ This hook is only used if @code{doloop_end} is available. The default
implementation returns true. You can use @code{can_use_doloop_if_innermost}
if the loop must be the innermost, and if there are no other restrictions.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_INVALID_WITHIN_DOLOOP (const rtx_insn *@var{insn})
+@c hook-start:TARGET_INVALID_WITHIN_DOLOOP
Take an instruction in @var{insn} and return NULL if it is valid within a
low-overhead loop, otherwise return a string explaining why doloop
@@ -11836,6 +12712,7 @@ the reason why the doloop could not be applied.
By default, the RTL loop optimizer does not use a present doloop pattern for
loops containing function calls or branch on table instructions.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} machine_mode TARGET_PREFERRED_DOLOOP_MODE (machine_mode @var{mode})
This hook takes a @var{mode} for a doloop IV, where @code{mode} is the
@@ -11847,27 +12724,34 @@ original and the returned modes should be @code{MODE_INT}.
@end deftypefn
@deftypefn {Target Hook} bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *@var{insn})
+@c hook-start:TARGET_LEGITIMATE_COMBINED_INSN
Take an instruction in @var{insn} and return @code{false} if the instruction
is not appropriate as a combination of two or more instructions. The
default is to accept all instructions.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *@var{follower}, const rtx_insn *@var{followee})
+@c hook-start:TARGET_CAN_FOLLOW_JUMP
FOLLOWER and FOLLOWEE are JUMP_INSN instructions;
return true if FOLLOWER may be modified to follow FOLLOWEE;
false, if it can't.
For example, on some targets, certain kinds of branches can't be made to
follow through a hot/cold partitioning.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_COMMUTATIVE_P (const_rtx @var{x}, int @var{outer_code})
+@c hook-start:TARGET_COMMUTATIVE_P
This target hook returns @code{true} if @var{x} is considered to be commutative.
Usually, this is just COMMUTATIVE_P (@var{x}), but the HP PA doesn't consider
PLUS to be commutative inside a MEM@. @var{outer_code} is the rtx code
of the enclosing rtl, if known, otherwise it is UNKNOWN.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx @var{hard_reg})
+@c hook-start:TARGET_ALLOCATE_INITIAL_VALUE
When the initial value of a hard register has been copied in a pseudo
register, it is often not necessary to actually allocate another register
@@ -11888,8 +12772,10 @@ register in question will not be clobbered.
The default value of this hook is @code{NULL}, which disables any special
allocation.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} int TARGET_UNSPEC_MAY_TRAP_P (const_rtx @var{x}, unsigned @var{flags})
+@c hook-start:TARGET_UNSPEC_MAY_TRAP_P
This target hook returns nonzero if @var{x}, an @code{unspec} or
@code{unspec_volatile} operation, might cause a trap. Targets can use
this hook to enhance precision of analysis for @code{unspec} and
@@ -11897,8 +12783,10 @@ this hook to enhance precision of analysis for @code{unspec} and
to analyze inner elements of @var{x} in which case @var{flags} should be
passed along.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_SET_CURRENT_FUNCTION (tree @var{decl})
+@c hook-start:TARGET_SET_CURRENT_FUNCTION
The compiler invokes this hook whenever it changes its current function
context (@code{cfun}). You can define this function if
the back end needs to perform any initialization or reset actions on a
@@ -11916,6 +12804,7 @@ or when the back end is in a partially-initialized state.
@code{cfun} might be @code{NULL} to indicate processing at top level,
outside of any function scope.
@end deftypefn
+@c hook-end
@defmac TARGET_OBJECT_SUFFIX
Define this macro to be a C string representing the suffix for object
@@ -11939,6 +12828,7 @@ lists.
@end defmac
@deftypefn {Target Hook} bool TARGET_CANNOT_MODIFY_JUMPS_P (void)
+@c hook-start:TARGET_CANNOT_MODIFY_JUMPS_P
This target hook returns @code{true} past the point in which new jump
instructions could be created. On machines that require a register for
every jump such as the SHmedia ISA of SH5, this point would typically be
@@ -11952,14 +12842,18 @@ cannot_modify_jumps_past_reload_p ()
@}
@end smallexample
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_HAVE_CONDITIONAL_EXECUTION (void)
+@c hook-start:TARGET_HAVE_CONDITIONAL_EXECUTION
This target hook returns true if the target supports conditional execution.
This target hook is required only when the target has several different
modes and they have different conditional execution capability, such as ARM.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_GEN_CCMP_FIRST (rtx_insn **@var{prep_seq}, rtx_insn **@var{gen_seq}, int @var{code}, tree @var{op0}, tree @var{op1})
+@c hook-start:TARGET_GEN_CCMP_FIRST
This function prepares to emit a comparison insn for the first compare in a
sequence of conditional comparisions. It returns an appropriate comparison
with @code{CC} for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.
@@ -11968,8 +12862,10 @@ This function prepares to emit a comparison insn for the first compare in a
compares in the conditional comparision are generated without error.
@var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_GEN_CCMP_NEXT (rtx_insn **@var{prep_seq}, rtx_insn **@var{gen_seq}, rtx @var{prev}, int @var{cmp_code}, tree @var{op0}, tree @var{op1}, int @var{bit_code})
+@c hook-start:TARGET_GEN_CCMP_NEXT
This function prepares to emit a conditional comparison within a sequence
of conditional comparisons. It returns an appropriate comparison with
@code{CC} for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.
@@ -11983,6 +12879,7 @@ This function prepares to emit a conditional comparison within a sequence
@var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.
@var{bit_code} is @code{AND} or @code{IOR}, which is the op on the compares.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_GEN_MEMSET_SCRATCH_RTX (machine_mode @var{mode})
This hook should return an rtx for a scratch register in @var{mode} to
@@ -11992,6 +12889,7 @@ is @code{gen_reg_rtx}.
@end deftypefn
@deftypefn {Target Hook} unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned @var{nunroll}, class loop *@var{loop})
+@c hook-start:TARGET_LOOP_UNROLL_ADJUST
This target hook returns a new value for the number of times @var{loop}
should be unrolled. The parameter @var{nunroll} is the number of times
the loop is to be unrolled. The parameter @var{loop} is a pointer to
@@ -11999,6 +12897,7 @@ the loop, which is going to be checked for unrolling. This target hook
is required only when the target has special constraints like maximum
number of memory accesses.
@end deftypefn
+@c hook-end
@defmac POWI_MAX_MULTS
If defined, this macro is interpreted as a signed integer C expression
@@ -12071,32 +12970,41 @@ and scanf formatter settings.
@end defmac
@deftypefn {Target Hook} {const char *} TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN (const_tree @var{typelist}, const_tree @var{funcdecl}, const_tree @var{val})
+@c hook-start:TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN
If defined, this macro returns the diagnostic message when it is
illegal to pass argument @var{val} to function @var{funcdecl}
with prototype @var{typelist}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_INVALID_CONVERSION (const_tree @var{fromtype}, const_tree @var{totype})
+@c hook-start:TARGET_INVALID_CONVERSION
If defined, this macro returns the diagnostic message when it is
invalid to convert from @var{fromtype} to @var{totype}, or @code{NULL}
if validity should be determined by the front end.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_INVALID_UNARY_OP (int @var{op}, const_tree @var{type})
+@c hook-start:TARGET_INVALID_UNARY_OP
If defined, this macro returns the diagnostic message when it is
invalid to apply operation @var{op} (where unary plus is denoted by
@code{CONVERT_EXPR}) to an operand of type @var{type}, or @code{NULL}
if validity should be determined by the front end.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {const char *} TARGET_INVALID_BINARY_OP (int @var{op}, const_tree @var{type1}, const_tree @var{type2})
+@c hook-start:TARGET_INVALID_BINARY_OP
If defined, this macro returns the diagnostic message when it is
invalid to apply operation @var{op} to operands of types @var{type1}
and @var{type2}, or @code{NULL} if validity should be determined by
the front end.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_PROMOTED_TYPE (const_tree @var{type})
+@c hook-start:TARGET_PROMOTED_TYPE
If defined, this target hook returns the type to which values of
@var{type} should be promoted when they appear in expressions,
analogous to the integer promotions, or @code{NULL_TREE} to use the
@@ -12104,8 +13012,10 @@ front end's normal promotion rules. This hook is useful when there are
target-specific types with special promotion rules.
This is currently used only by the C and C++ front ends.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} tree TARGET_CONVERT_TO_TYPE (tree @var{type}, tree @var{expr})
+@c hook-start:TARGET_CONVERT_TO_TYPE
If defined, this hook returns the result of converting @var{expr} to
@var{type}. It should return the converted expression,
or @code{NULL_TREE} to apply the front end's normal conversion rules.
@@ -12113,8 +13023,10 @@ This hook is useful when there are target-specific types with special
conversion rules.
This is currently used only by the C and C++ front ends.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_VERIFY_TYPE_CONTEXT (location_t @var{loc}, type_context_kind @var{context}, const_tree @var{type}, bool @var{silent_p})
+@c hook-start:TARGET_VERIFY_TYPE_CONTEXT
If defined, this hook returns false if there is a target-specific reason
why type @var{type} cannot be used in the source language context described
by @var{context}. When @var{silent_p} is false, the hook also reports an
@@ -12126,6 +13038,7 @@ default to false and also handles @code{error_mark_node}.
The default implementation always returns true.
@end deftypefn
+@c hook-end
@defmac OBJC_JBLEN
This macro determines the size of the objective C jump buffer for the
@@ -12140,18 +13053,23 @@ and the associated definitions of those functions.
@end defmac
@deftypefn {Target Hook} void TARGET_UPDATE_STACK_BOUNDARY (void)
+@c hook-start:TARGET_UPDATE_STACK_BOUNDARY
Define this macro to update the current function stack boundary if
necessary.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_GET_DRAP_RTX (void)
+@c hook-start:TARGET_GET_DRAP_RTX
This hook should return an rtx for Dynamic Realign Argument Pointer (DRAP) if a
different argument pointer register is needed to access the function's
argument list due to stack realignment. Return @code{NULL} if no DRAP
is needed.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} HARD_REG_SET TARGET_ZERO_CALL_USED_REGS (HARD_REG_SET @var{selected_regs})
+@c hook-start:TARGET_ZERO_CALL_USED_REGS
This target hook emits instructions to zero the subset of @var{selected_regs}
that could conceivably contain values that are useful to an attacker.
Return the set of registers that were actually cleared.
@@ -12169,8 +13087,10 @@ target has more efficient ways of zeroing certain registers,
or if you believe that certain registers would never contain
values that are useful to an attacker.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void)
+@c hook-start:TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS
When optimization is disabled, this hook indicates whether or not
arguments should be allocated to stack slots. Normally, GCC allocates
stacks slots for arguments when not optimizing in order to make
@@ -12180,8 +13100,10 @@ cannot safely move arguments from the registers in which they are passed
to the stack. Therefore, this hook should return true in general, but
false for naked functions. The default implementation always returns true.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} {unsigned HOST_WIDE_INT} TARGET_CONST_ANCHOR
+@c hook-start:TARGET_CONST_ANCHOR
On some architectures it can take multiple instructions to synthesize
a constant. If there is another constant already in a register that
is close enough in value then it is preferable that the new constant
@@ -12198,30 +13120,39 @@ MIPS, where add-immediate takes a 16-bit signed value,
@code{TARGET_CONST_ANCHOR} is set to @samp{0x8000}. The default value
is zero, which disables this optimization.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_ASAN_SHADOW_OFFSET (void)
+@c hook-start:TARGET_ASAN_SHADOW_OFFSET
Return the offset bitwise ored into shifted address to get corresponding
Address Sanitizer shadow memory address. NULL if Address Sanitizer is not
supported by the target. May return 0 if Address Sanitizer is not supported
by a subtarget.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {unsigned HOST_WIDE_INT} TARGET_MEMMODEL_CHECK (unsigned HOST_WIDE_INT @var{val})
+@c hook-start:TARGET_MEMMODEL_CHECK
Validate target specific memory model mask bits. When NULL no target specific
memory model bits are allowed.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} {unsigned char} TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
+@c hook-start:TARGET_ATOMIC_TEST_AND_SET_TRUEVAL
This value should be set if the result written by
@code{atomic_test_and_set} is not exactly 1, i.e.@: the
@code{bool} @code{true}.
@end deftypevr
+@c hook-end
@deftypefn {Target Hook} bool TARGET_HAS_IFUNC_P (void)
+@c hook-start:TARGET_HAS_IFUNC_P
It returns true if the target supports GNU indirect functions.
The support includes the assembler, linker and dynamic linker.
The default value of this hook is based on target's libc.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_IFUNC_REF_LOCAL_OK (void)
Return true if it is OK to reference indirect function resolvers
@@ -12229,12 +13160,15 @@ locally. The default is to return false.
@end deftypefn
@deftypefn {Target Hook} {unsigned int} TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode @var{mode})
+@c hook-start:TARGET_ATOMIC_ALIGN_FOR_MODE
If defined, this function returns an appropriate alignment in bits for an
atomic object of machine_mode @var{mode}. If 0 is returned then the
default alignment for the specified mode is used.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *@var{hold}, tree *@var{clear}, tree *@var{update})
+@c hook-start:TARGET_ATOMIC_ASSIGN_EXPAND_FENV
ISO C11 requires atomic compound assignments that may raise floating-point
exceptions to raise exceptions corresponding to the arithmetic operation
whose result was successfully stored in a compare-and-exchange sequence.
@@ -12251,14 +13185,18 @@ leaves all three expressions as @code{NULL_TREE}. The
@code{__atomic_feraiseexcept} function from @code{libatomic} may be of use
as part of the code generated in @code{*@var{update}}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_RECORD_OFFLOAD_SYMBOL (tree)
+@c hook-start:TARGET_RECORD_OFFLOAD_SYMBOL
Used when offloaded functions are seen in the compilation unit and no named
sections are available. It is called once for each symbol that must be
recorded in the offload function and variable table.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} {char *} TARGET_OFFLOAD_OPTIONS (void)
+@c hook-start:TARGET_OFFLOAD_OPTIONS
Used when writing out the list of options into an LTO file. It should
translate any relevant target-specific options (such as the ABI in use)
into one of the @option{-foffload} options that exist as a common interface
@@ -12266,6 +13204,7 @@ to express such options. It should return a string containing these options,
separated by spaces, which the caller will free.
@end deftypefn
+@c hook-end
@defmac TARGET_SUPPORTS_WIDE_INT
@@ -12314,6 +13253,7 @@ maintainer is familiar with.
@end defmac
@deftypefn {Target Hook} bool TARGET_HAVE_SPECULATION_SAFE_VALUE (bool @var{active})
+@c hook-start:TARGET_HAVE_SPECULATION_SAFE_VALUE
This hook is used to determine the level of target support for
@code{__builtin_speculation_safe_value}. If called with an argument
of false, it returns true if the target has been modified to support
@@ -12330,8 +13270,10 @@ This hook is used to determine the level of target support for
simply redefine this hook to @code{speculation_safe_value_not_needed}
along with your other target hooks.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode @var{mode}, rtx @var{result}, rtx @var{val}, rtx @var{failval})
+@c hook-start:TARGET_SPECULATION_SAFE_VALUE
This target hook can be used to generate a target-specific code
sequence that implements the @code{__builtin_speculation_safe_value}
built-in function. The function must always return @var{val} in
@@ -12348,12 +13290,16 @@ This target hook can be used to generate a target-specific code
The default implementation simply copies @var{val} to @var{result} and
emits a @code{speculation_barrier} instruction if that is defined.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} void TARGET_RUN_TARGET_SELFTESTS (void)
+@c hook-start:TARGET_RUN_TARGET_SELFTESTS
If selftests are enabled, run any selftests for this target.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} bool TARGET_MEMTAG_CAN_TAG_ADDRESSES ()
+@c hook-start:TARGET_MEMTAG_CAN_TAG_ADDRESSES
True if the backend architecture naturally supports ignoring some region
of pointers. This feature means that @option{-fsanitize=hwaddress} can
work.
@@ -12361,14 +13307,18 @@ work.
At preset, this feature does not support address spaces. It also requires
@code{Pmode} to be the same as @code{ptr_mode}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} uint8_t TARGET_MEMTAG_TAG_SIZE ()
+@c hook-start:TARGET_MEMTAG_TAG_SIZE
Return the size of a tag (in bits) for this platform.
The default returns 8.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} uint8_t TARGET_MEMTAG_GRANULE_SIZE ()
+@c hook-start:TARGET_MEMTAG_GRANULE_SIZE
Return the size in real memory that each byte in shadow memory refers to.
I.e. if a variable is @var{X} bytes long in memory, then this hook should
return the value @var{Y} such that the tag in shadow memory spans
@@ -12380,15 +13330,19 @@ the same tag.
The default returns 16.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_MEMTAG_INSERT_RANDOM_TAG (rtx @var{untagged}, rtx @var{target})
+@c hook-start:TARGET_MEMTAG_INSERT_RANDOM_TAG
Return an RTX representing the value of @var{untagged} but with a
(possibly) random tag in it.
Put that value into @var{target} if it is convenient to do so.
This function is used to generate a tagged base for the current stack frame.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_MEMTAG_ADD_TAG (rtx @var{base}, poly_int64 @var{addr_offset}, uint8_t @var{tag_offset})
+@c hook-start:TARGET_MEMTAG_ADD_TAG
Return an RTX that represents the result of adding @var{addr_offset} to
the address in pointer @var{base} and @var{tag_offset} to the tag in pointer
@var{base}.
@@ -12398,28 +13352,36 @@ put into an operand with @code{force_operand}.
Unlike other memtag hooks, this must return an expression and not emit any
RTL.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_MEMTAG_SET_TAG (rtx @var{untagged_base}, rtx @var{tag}, rtx @var{target})
+@c hook-start:TARGET_MEMTAG_SET_TAG
Return an RTX representing @var{untagged_base} but with the tag @var{tag}.
Try and store this in @var{target} if convenient.
@var{untagged_base} is required to have a zero tag when this hook is called.
The default of this hook is to set the top byte of @var{untagged_base} to
@var{tag}.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_MEMTAG_EXTRACT_TAG (rtx @var{tagged_pointer}, rtx @var{target})
+@c hook-start:TARGET_MEMTAG_EXTRACT_TAG
Return an RTX representing the tag stored in @var{tagged_pointer}.
Store the result in @var{target} if it is convenient.
The default represents the top byte of the original pointer.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} rtx TARGET_MEMTAG_UNTAGGED_POINTER (rtx @var{tagged_pointer}, rtx @var{target})
+@c hook-start:TARGET_MEMTAG_UNTAGGED_POINTER
Return an RTX representing @var{tagged_pointer} with its tag set to zero.
Store the result in @var{target} if convenient.
The default clears the top byte of the original pointer.
@end deftypefn
+@c hook-end
@deftypefn {Target Hook} HOST_WIDE_INT TARGET_GCOV_TYPE_SIZE (void)
+@c hook-start:TARGET_GCOV_TYPE_SIZE
Returns the gcov type size in bits. This type is used for example for
counters incremented by profiling and code-coverage events. The default
value is 64, if the type size of long long is greater than 32, otherwise the
@@ -12429,8 +13391,11 @@ counters are incremented using atomic operations. Targets not supporting
64-bit atomic operations may override the default value and request a 32-bit
type.
@end deftypefn
+@c hook-end
@deftypevr {Target Hook} bool TARGET_HAVE_SHADOW_CALL_STACK
+@c hook-start:TARGET_HAVE_SHADOW_CALL_STACK
This value is true if the target platform supports
@option{-fsanitize=shadow-call-stack}. The default value is false.
@end deftypevr
+@c hook-end
diff --git a/gcc/fortran/gfc-internals.texi b/gcc/fortran/gfc-internals.texi
index 1409e28..76b8f50 100644
--- a/gcc/fortran/gfc-internals.texi
+++ b/gcc/fortran/gfc-internals.texi
@@ -124,7 +124,6 @@ not accurately reflect the status of the most recent GNU Fortran compiler.
* LibGFortran:: The LibGFortran Runtime Library.
* GNU Free Documentation License::
How you can copy and share this manual.
-* Index:: Index of this documentation.
@end menu
@end ifnottex
@@ -960,8 +959,6 @@ and @code{VERS_1.2} as well as in @code{VERS_2.0}.
@c Index
@c ---------------------------------------------------------------------
-@node Index
-@unnumbered Index
@printindex cp
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 55f53fc..ce927ca 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -1,16 +1,3 @@
-@ignore
-Copyright (C) 2005-2022 Free Software Foundation, Inc.
-This is part of the GNU Fortran manual.
-For copying conditions, see the file gfortran.texi.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``Funding Free Software'', the Front-Cover
-Texts being (a) (see below), and with the Back-Cover Texts being (b)
-(see below). A copy of the license is included in the gfdl(7) man page.
-
-
Some basic guidelines for editing this document:
(1) The intrinsic procedures are to be listed in alphabetical order.
@@ -19,9 +6,6 @@ Some basic guidelines for editing this document:
table at the end of the node (See ABS entry).
(4) Try to maintain the same style for each entry.
-
-@end ignore
-
@tex
\gdef\acosd{\mathop{\rm acosd}\nolimits}
\gdef\asind{\mathop{\rm asind}\nolimits}
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 58502d3..ee1bf6c 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -1,32 +1,11 @@
-@c Copyright (C) 2004-2022 Free Software Foundation, Inc.
+@c Copyright (C) 2004-2021 Free Software Foundation, Inc.
@c This is part of the GNU Fortran manual.
@c For copying conditions, see the file gfortran.texi.
-@ignore
-@c man begin COPYRIGHT
-Copyright @copyright{} 2004-2022 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``Funding Free Software'', the Front-Cover
-Texts being (a) (see below), and with the Back-Cover Texts being (b)
-(see below). A copy of the license is included in the gfdl(7) man page.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
+@setfilename gfortran
-(b) The FSF's Back-Cover Text is:
+@subsubheading Synopsis
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@c Set file name and title for the man page.
-@setfilename gfortran
-@settitle GNU Fortran compiler.
-@c man begin SYNOPSIS
gfortran [@option{-c}|@option{-S}|@option{-E}]
[@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
[@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
@@ -38,22 +17,12 @@ gfortran [@option{-c}|@option{-S}|@option{-E}]
Only the most useful options are listed here; see below for the
remainder.
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7),
-cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), dbx(1)
-and the Info entries for @file{gcc}, @file{cpp}, @file{gfortran}, @file{as},
-@file{ld}, @file{binutils} and @file{gdb}.
-@c man end
-@c man begin BUGS
+
For instructions on reporting bugs, see
-@w{@value{BUGURL}}.
-@c man end
-@c man begin AUTHOR
+$$BUGURL$$.
+
See the Info entry for @command{gfortran} for contributors to GCC and
GNU Fortran.
-@c man end
-@end ignore
@node Invoking GNU Fortran
@chapter GNU Fortran Command Options
@@ -61,7 +30,7 @@ GNU Fortran.
@cindex command options
@cindex options, @command{gfortran} command
-@c man begin DESCRIPTION
+@subsubheading Description
The @command{gfortran} command supports all the options supported by the
@command{gcc} command. Only options specific to GNU Fortran are documented
@@ -85,7 +54,6 @@ In some cases, options have positive and negative forms;
the negative form of @option{-ffoo} would be @option{-fno-foo}.
This manual documents only one of these two forms, whichever
one is not the default.
-@c man end
@menu
* Option Summary:: Brief list of all @command{gfortran} options,
@@ -108,7 +76,7 @@ one is not the default.
@node Option Summary
@section Option summary
-@c man begin OPTIONS
+@subsubheading Options
Here is a summary of all the options specific to GNU Fortran, grouped
by type. Explanations are in the following sections.
@@ -2058,8 +2026,6 @@ gcc,Using the GNU Compiler Collection (GCC)}, for information on more options
offered by the GBE
shared by @command{gfortran}, @command{gcc}, and other GNU compilers.
-@c man end
-
@node Interoperability Options
@section Options for interoperability with other languages
@@ -2118,7 +2084,7 @@ then uses @code{#include "foo.h"}.
@section Environment variables affecting @command{gfortran}
@cindex environment variable
-@c man begin ENVIRONMENT
+@subsubheading Environment
The @command{gfortran} compiler currently does not make use of any environment
variables to control its operation above and beyond those
@@ -2130,4 +2096,3 @@ variables.
@xref{Runtime}, for environment variables that affect the
run-time behavior of programs compiled with GNU Fortran.
-@c man end
diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc
index 6bae85d..86dff52 100644
--- a/gcc/genhooks.cc
+++ b/gcc/genhooks.cc
@@ -232,6 +232,7 @@ emit_documentation (const char *in_fname)
deftype, hook_array[j].docname,
hook_array[j].type, namex);
}
+ printf ("\n@c hook-start:%s", upstrdup (hook_array[i].name));
if (hook_array[i].doc[0])
{
printf ("\n");
@@ -245,6 +246,7 @@ emit_documentation (const char *in_fname)
}
printf ("\n@end %s", deftype);
}
+ printf ("\n@c hook-end");
}
if (++i >= (int) (ARRAY_SIZE (hook_array)) || !hook_array[i].doc)
break;
diff --git a/gcc/go/gccgo.texi b/gcc/go/gccgo.texi
index 66020aa7..e2da482 100644
--- a/gcc/go/gccgo.texi
+++ b/gcc/go/gccgo.texi
@@ -11,41 +11,6 @@
@include gcc-common.texi
-@c Copyright years for this manual.
-@set copyrights-go 2010-2022
-
-@copying
-@c man begin COPYRIGHT
-Copyright @copyright{} @value{copyrights-go} Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, the Front-Cover Texts being (a) (see below), and
-with the Back-Cover Texts being (b) (see below).
-A copy of the license is included in the
-@c man end
-section entitled ``GNU Free Documentation License''.
-@ignore
-@c man begin COPYRIGHT
-man page gfdl(7).
-@c man end
-@end ignore
-
-@c man begin COPYRIGHT
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@c man end
-@end copying
-
@ifinfo
@format
@dircategory Software development
@@ -90,7 +55,6 @@ package documentation, see @uref{https://golang.org/}.
* Import and Export:: Importing and exporting package data.
* Compiler Directives:: Comments to control compilation.
* C Interoperability:: Calling C from Go and vice-versa.
-* Index:: Index.
@end menu
@@ -102,25 +66,18 @@ package documentation, see @uref{https://golang.org/}.
@node Invoking gccgo
@chapter Invoking gccgo
-@c man title gccgo A GCC-based compiler for the Go language
+@subsubheading Synopsis
-@ignore
-@c man begin SYNOPSIS gccgo
gccgo [@option{-c}|@option{-S}]
[@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
[@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
[@option{-o} @var{outfile}] @var{infile}@dots{}
+
+@subsubheading Description
+
Only the most useful options are listed here; see below for the
remainder.
-@c man end
-@c man begin SEEALSO
-gpl(7), gfdl(7), fsf-funding(7), gcc(1)
-and the Info entries for @file{gccgo} and @file{gcc}.
-@c man end
-@end ignore
-
-@c man begin DESCRIPTION gccgo
The @command{gccgo} command is a frontend to @command{gcc} and
supports many of the same options. @xref{Option Summary, , Option
@@ -147,9 +104,7 @@ Go programs must generally be compiled with debugging information, and
@option{-g1} is the default as described below. Stripping a Go
program will generally cause it to misbehave or fail.
-@c man end
-
-@c man begin OPTIONS gccgo
+@subsubheading Options
@table @gcctabopt
@item -I@var{dir}
@@ -284,8 +239,6 @@ debugging information, in which case certain standard library
functions, such as @code{runtime.Callers}, will not operate correctly.
@end table
-@c man end
-
@node Import and Export
@chapter Import and Export
@@ -513,9 +466,6 @@ call the function from C you must set the name using the @command{gcc}
extern int go_function(int) __asm__ ("mypkgpath.Function");
@end smallexample
-@node Index
-@unnumbered Index
-
@printindex cp
@bye
diff --git a/gcc/target.def b/gcc/target.def
index 25f94c1..fa66ee5 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -44,21 +44,7 @@ DEFHOOKPODX (close_paren, const char *, ")")
/* Assembler instructions for creating various kinds of integer object. */
DEFHOOKPOD
(byte_op,
- "@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PSI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PDI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PTI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PSI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PDI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PTI_OP\n\
-@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP\n\
-These hooks specify assembly directives for creating certain kinds\n\
+ "These hooks specify assembly directives for creating certain kinds\n\
of integer object. The @code{TARGET_ASM_BYTE_OP} directive creates a\n\
byte-sized object, the @code{TARGET_ASM_ALIGNED_HI_OP} one creates an\n\
aligned two-byte object, and so on. Any of the hooks may be\n\
diff --git a/gcc/testsuite/c-c++-common/pragma-diag-15.c b/gcc/testsuite/c-c++-common/pragma-diag-15.c
index 8ffff88..d8076b4 100644
--- a/gcc/testsuite/c-c++-common/pragma-diag-15.c
+++ b/gcc/testsuite/c-c++-common/pragma-diag-15.c
@@ -9,5 +9,5 @@
because the location of the macro definition is incorrectly set. This is a
separate issue, will resolve it in a later patch. */
-#define X /* { dg-warning "-:-Wunused-macros" } */
+#define X /* { dg-warning "-:-Wunused-macros" {} { xfail c++ } } */
#pragma GCC diagnostic ignored "-Wunused-macros"
diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi
index 10fefa9..3e8340b 100644
--- a/libgomp/libgomp.texi
+++ b/libgomp/libgomp.texi
@@ -54,7 +54,7 @@ Boston, MA 02110-1301 USA
@subtitle The GNU OpenMP and OpenACC Implementation
@page
@vskip 0pt plus 1filll
-@comment For the @value{version-GCC} Version*
+@comment For the $$version-GCC$$ Version*
@sp 1
Published by the Free Software Foundation @*
51 Franklin Street, Fifth Floor@*
diff --git a/libiberty/libiberty.texi b/libiberty/libiberty.texi
index ad1f8e3..1ddc36d 100644
--- a/libiberty/libiberty.texi
+++ b/libiberty/libiberty.texi
@@ -83,7 +83,6 @@ License; for more information, see @ref{Library Copying}.
* Licenses:: The various licenses under which libiberty sources are
distributed.
-* Index:: Index of functions and categories.
@end menu
@node Using
@@ -304,8 +303,6 @@ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-@node Index
-@unnumbered Index
@printindex cp
diff --git a/libitm/libitm.texi b/libitm/libitm.texi
index 7dff5f8..cb8fe54 100644
--- a/libitm/libitm.texi
+++ b/libitm/libitm.texi
@@ -35,7 +35,7 @@ This manual documents the GNU Transactional Memory Library.
@title The GNU Transactional Memory Library
@page
@vskip 0pt plus 1filll
-@comment For the @value{version-GCC} Version*
+@comment For the $$version-GCC$$ Version*
@sp 1
@insertcopying
@end titlepage
diff --git a/libquadmath/libquadmath.texi b/libquadmath/libquadmath.texi
index fad8e62..6eb36f1 100644
--- a/libquadmath/libquadmath.texi
+++ b/libquadmath/libquadmath.texi
@@ -44,7 +44,7 @@ Boston, MA 02110-1301 USA
@title The GCC Quad-Precision Math Library
@page
@vskip 0pt plus 1filll
-@comment For the @value{version-GCC} Version*
+@comment For the $$version-GCC$$ Version*
@sp 1
Published by the Free Software Foundation @*
51 Franklin Street, Fifth Floor@*
@@ -103,8 +103,7 @@ The following macros are defined, which give the numeric limits of the
@table @asis
@item @code{FLT128_MAX}: largest finite number
@item @code{FLT128_MIN}: smallest positive number with full precision
-@item @code{FLT128_EPSILON}: difference between 1 and the next larger
- representable number
+@item @code{FLT128_EPSILON}: difference between 1 and the next larger representable number
@item @code{FLT128_DENORM_MIN}: smallest positive denormalized number
@item @code{FLT128_MANT_DIG}: number of digits in the mantissa (bit precision)
@item @code{FLT128_MIN_EXP}: maximal negative exponent
@@ -160,7 +159,6 @@ The following mathematical functions are available:
@item @code{exp2q}: base 2 exponential function
@item @code{expq}: exponential function
@item @code{expm1q}: exponential minus 1 function
-@need 800
@item @code{fabsq}: absolute value function
@item @code{fdimq}: positive difference function
@item @code{finiteq}: check finiteness of value
@@ -187,7 +185,6 @@ The following mathematical functions are available:
@item @code{log10q}: base 10 logarithm function
@item @code{log1pq}: compute natural logarithm of the value plus one
@item @code{log2q}: base 2 logarithm function
-@need 800
@item @code{lrintq}: round to nearest integer value
@item @code{lroundq}: round to nearest integer value away from zero
@item @code{modfq}: decompose the floating-point number
@@ -208,15 +205,14 @@ The following mathematical functions are available:
@item @code{sqrtq}: square root function
@item @code{tanq}: tangent function
@item @code{tanhq}: hyperbolic tangent function
-@need 800
@item @code{tgammaq}: true gamma function
@item @code{truncq}: round to integer, towards zero
@item @code{y0q}: Bessel function of the second kind, first order
@item @code{y1q}: Bessel function of the second kind, second order
@item @code{ynq}: Bessel function of the second kind, @var{n}-th order
-@item @code{cabsq} complex absolute value function
+@item @code{cabsq}: complex absolute value function
@item @code{cargq}: calculate the argument
-@item @code{cimagq} imaginary part of complex number
+@item @code{cimagq}: imaginary part of complex number
@item @code{crealq}: real part of complex number
@item @code{cacoshq}: complex arc hyperbolic cosine function
@item @code{cacosq}: complex arc cosine function
@@ -224,12 +220,10 @@ The following mathematical functions are available:
@item @code{casinq}: complex arc sine function
@item @code{catanhq}: complex arc hyperbolic tangent function
@item @code{catanq}: complex arc tangent function
-@item @code{ccosq} complex cosine function:
+@item @code{ccosq}: complex cosine function
@item @code{ccoshq}: complex hyperbolic cosine function
@item @code{cexpq}: complex exponential function
-@need 800
-@item @code{cexpiq}: computes the exponential function of ``i'' times a
- real value
+@item @code{cexpiq}: computes the exponential function of ``i'' times a real value
@item @code{clogq}: complex natural logarithm
@item @code{clog10q}: complex base 10 logarithm
@item @code{conjq}: complex conjugate function
@@ -371,13 +365,13 @@ int main ()
@c ---------------------------------------------------------------------
@c For BUGURL
-@include libquadmath-vers.texi
+@include gcc-vers.texi
@node Reporting Bugs
@chapter Reporting Bugs
Bugs in the GCC Quad-Precision Math Library implementation should be
-reported via @value{BUGURL}.
+reported via $$BUGURL$$.
@c ---------------------------------------------------------------------